322 Commits

Author SHA1 Message Date
wass08
ced76b0475 fix placement 2026-02-25 15:21:19 +09:00
wass08
b114e60df7 fix hinge + materials 2026-02-25 14:50:17 +09:00
wass08
7608cad748 nice progress on doors 2026-02-25 14:05:32 +09:00
wass08
27e4afb757 draft custom door 2026-02-25 13:28:42 +09:00
wass08
d9317bfba2 automated thumbnail + position enhancement 2026-02-25 12:43:14 +09:00
wass08
4be3291d64 vertical line ceiling 2026-02-25 10:46:41 +09:00
wass08
53ed21ba0b fixed ceiling item not selectable in viewer 2026-02-25 09:33:31 +09:00
wass08
8a0c7d31cc default scale top grid ceiling for viewer 2026-02-25 09:28:47 +09:00
wass08
31927da543 event handlers for ceiling 2026-02-25 09:25:00 +09:00
wass08
c53f1f9679 ceiling system + reveal/hide 2026-02-25 08:59:04 +09:00
wass08
9b9398c5ff remove ceiling from depthcalc 2026-02-25 07:35:03 +09:00
Wassim SAMAD
2182fe535d
Merge pull request #116 from pascalorg/fix/community-feedback-pass-3
Fix/community feedback pass 3
2026-02-24 16:17:44 +09:00
wass08
aee8ac5e76 fix build 2026-02-24 16:16:07 +09:00
wass08
63cf407cac persist viewer preferences 2026-02-24 16:13:37 +09:00
wass08
14708c041a fix tools visibility 2026-02-24 16:09:03 +09:00
wass08
81ede241d5 save site + camera build position 2026-02-24 14:48:59 +09:00
Aymeric Rabot
db05c86120
Add scene graph viewer and persist migration (#115)
Render an interactive Scene Graph in the Settings panel using @visual-json/react. Introduces SceneNode/SceneGraphNode types and buildSceneGraphValue to build a tree (handles missing nodes and cycles), and adds handlers to block drag/drop/context/delete mutations inside the viewer. Adds @visual-json/react to apps/editor package.json and updates the dev script to forbid .env.local and source the root .env instead. Also adds a persistence migration in use-scene to preserve existing nodes and rootNodeIds when the persist version changes.
2026-02-24 00:40:18 -05:00
Anton
5781e98270
feat: add YouTube social link to user profiles (#114)
* feat: add YouTube social link to user profiles

- Add youtube_url column to auth_users schema
- Add DB migration for the new column
- Update updateProfile action with YouTube URL validation
- Update getUserProfile and getPublicProfile to include youtubeUrl
- Add YouTube input field to settings page
- Display YouTube icon on public profile pages

* fix: use drizzle-kit generate for youtube_url migration

Replaces manually created migration with proper drizzle-kit generated
migration that includes meta snapshot and journal entry.

---------

Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
2026-02-24 05:38:40 +00:00
wass08
0863f5e632 fix z-index viewer 2026-02-24 13:07:53 +09:00
wass08
0dea6a2205 fix zones in viewer too 2026-02-24 13:06:45 +09:00
wass08
db81a62722 fix radio 2026-02-24 12:46:33 +09:00
wass08
28b44fe92d fix zones 2026-02-24 12:46:27 +09:00
wass08
20f5f7ab4a fix wall elevation with slab holes 2026-02-24 10:27:51 +09:00
wass08
3791739b5b mark nodes as dirty after deletion 2026-02-24 08:19:49 +09:00
wass08
5deb0b363e fix render priority for item-system 2026-02-24 07:47:03 +09:00
Anton
c476d30303
feat: enhance feedback form with image upload, user/project context, and scene graph (#113)
* feat: enhance feedback form with image upload, user/project context, and scene graph

- Add invisible drag-and-drop zone that reveals on hover+drag with dashed border overlay
- Multi-image upload (max 5, max 5MB each) to Supabase Storage feedback-images bucket
- Subtle attach button + thumbnail previews with remove on hover
- Auto-capture authenticated user email/name from Better Auth session
- Pass projectId from editor context
- Snapshot scene graph (nodes + rootNodeIds) on submit
- DB migration adds user_email, user_name, project_id, images (jsonb), scene_graph (jsonb) columns
- Storage bucket + RLS policies for public read / service role write

* refactor: use existing user_id FK instead of denormalized email/name columns

Removed user_email and user_name — the user_id already links to the users table.
Simpler schema, no data duplication.

* fix: guard against undefined in removeImage

* refactor: direct Supabase Storage upload via signed URLs

Bypass Vercel's 4.5MB serverless body-size limit by uploading images
directly from the client to Supabase Storage.

- New createImageUploadUrls server action generates signed upload URLs
- Client PUTs files directly to Supabase (no bytes through Vercel)
- submitFeedback now receives only image paths, not FormData with files
- No migration changes needed (existing RLS policies support signed URLs)

* fix: remove relative class that broke dialog centering

twMerge was replacing the Dialog's fixed positioning with relative,
pushing the dialog to the bottom of the viewport.

---------

Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
2026-02-22 23:52:42 -05:00
Wassim SAMAD
c0a7fd8067
Merge pull request #112 from pascalorg/fix/community-feedback-pass-2
Fix/community feedback pass 2
2026-02-23 12:42:54 +09:00
wass08
49c4794ecb fix item scale surface 2026-02-23 12:41:55 +09:00
wass08
6581e25e9f handle better item scales 2026-02-23 11:11:22 +09:00
wass08
d15f601107 item scale 2026-02-23 10:59:42 +09:00
wass08
3894d7c8bf fixing system orders for ensuring level calculation comes last 2026-02-23 09:08:15 +09:00
wass08
4555325389 fix wall items wrong level + elevation 2026-02-23 08:43:38 +09:00
wass08
16ba5bf9c6 fiix adjacent walls pushed up 2026-02-23 08:22:06 +09:00
Wassim SAMAD
b9c28a627e
Merge pull request #110 from pascalorg/fix/community-feedback-pass
Fix/community feedback pass
2026-02-23 07:42:18 +09:00
wass08
373d9310ee fix build 2026-02-23 07:41:17 +09:00
wass08
9129a5b847 doesn't work, removing it 2026-02-23 07:28:03 +09:00
wass08
3cf133e832 try adding vercel.json 2026-02-23 07:27:07 +09:00
wass08
5edd5e4235 trying to fix build 2026-02-20 20:12:39 +09:00
wass08
66b4efba09 fix build 2026-02-20 19:45:15 +09:00
wass08
c58d5ab535 level height 2026-02-20 19:33:59 +09:00
wass08
d819249d07 fix level window tools 2026-02-20 18:34:49 +09:00
wass08
ce41228e58 fix level move / create item 2026-02-20 18:30:20 +09:00
wass08
33c81045bb duplicate item 2026-02-20 18:06:59 +09:00
wass08
96865a8ce7 window move tool + duplicate 2026-02-20 17:24:52 +09:00
wass08
4572c36da5 threejs version upgrade #91 2026-02-20 16:17:56 +09:00
Anton
88cdbc6806
fix: add Supabase branching safety check for preview deployments (#109)
- Removed 9 stale branch-specific env vars on Vercel that were locked
  to the deleted feat/refactor-supabase-setup branch
- Added runtime warning when a preview deployment detects it's using
  the production Supabase instance (branching skipped/misconfigured)

The root issue: Supabase branching only creates preview branches for
PRs that include migration changes. PRs without migrations get SKIPPED
and fall through to the generic env vars, which include 'preview' in
their targets and point to production Supabase.

To fully fix: configure Supabase branching to always create preview
branches, or remove 'preview' from generic Supabase env var targets
on Vercel (requires branching to be working first).

Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
2026-02-20 05:34:54 +00:00
Anton
557781950d
fix: reduce autosave function invocation spam (25x anomaly) (#108)
* fix: reduce autosave function invocation spam (25x anomaly)

Root cause: useProjectScene() was mounted in BOTH editor/index.tsx
AND project-dropdown.tsx, creating duplicate zustand subscriptions
that each independently triggered saveProjectModel() server actions.

Combined with a 2-second debounce and the fact that each server
action also calls getSession() (another function invocation), active
editing was generating ~120+ invocations/minute.

Changes:
- Remove duplicate useProjectScene() from project-dropdown.tsx
- Increase autosave debounce from 2s to 10s
- Skip auto-save on initial scene load from server (was saving the
  scene right back after loading it)
- Add pending-save coalescing: changes during in-flight saves get
  batched into one follow-up save instead of queuing concurrently

* fix: flush unsaved scene to cloud on page exit / unmount

Adds two safety nets so the 10s debounce doesn't lose data:
- beforeunload listener: fires saveProjectModel() when the user
  closes the tab or navigates away externally
- cleanup flush on unmount: fires when navigating within the SPA
  (e.g. switching projects, going to settings)

Both are fire-and-forget — if the browser kills the request,
localStorage still has the data and will sync on next load.

* style: fix biome import ordering in project-dropdown

---------

Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
2026-02-20 05:01:59 +00:00
Anton
2dcb80554c
feat: add terms, privacy pages, email notification preferences, and sign-in consent (#107)
- /terms — Terms of Service for editor + pascal.app platform
- /privacy — Privacy Policy (data collection, third parties, user rights)
- Email notification toggle in Settings (new column + migration)
- Sign-in consent text linking to terms/privacy
- Effective date: February 20, 2026

Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
2026-02-20 04:02:08 +00:00
Aymeric Rabot
f4f9f8a220
feat: add project visibility settings for scans and floorplans (#106)
- Add show_scans_public and show_guides_public columns to projects table
- Add visibility toggles to editor sidebar settings panel (auto-save)
- Add visibility toggles to project settings dialog (auto-save)
- Propagate settings to community viewer (hide scans/guides for non-owners)
- Add updateProjectVisibility server action
- Fix username onboarding dialog stuck after DB reset (validate update affected rows)
- Add error handling to UsernameGate for stale sessions

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-19 16:59:23 -05:00
Aymeric Rabot
659c01052e Update .gitignore 2026-02-19 15:43:44 -05:00