Commit Graph

408 Commits

Author SHA1 Message Date
Jeff Emmett 4405e380c1 fix: redirect /board/* from jeffemmett.com to canvas.jeffemmett.com
When visiting jeffemmett.com/board/mycofi, the redirect now correctly
goes to canvas.jeffemmett.com/mycofi/ instead of jeffemmett.com/mycofi.
Localhost and canvas.jeffemmett.com still use same-domain redirects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:11:33 +00:00
Jeff Emmett dea24bde81 feat: migrate all presentation embeds from FlipHTML5 to self-hosted flipbook service
Replace 12 FlipHTML5 iframe URLs with slides.jeffemmett.com for full self-hosting
of all presentation decks. Zero external dependencies for presentation viewing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 09:20:33 -07:00
Jeff Emmett a37ab68588 refactor: move activity log into settings dropdown, simplify permissions
Move the standalone activity log toggle button (~) into the settings
gear dropdown as a collapsible accordion section. Simplify the board
permission display by removing the verbose "Access Levels" grid and
replacing it with a compact current-permission badge + request button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 22:57:06 -07:00
Jeff Emmett 20094ea9a7 Add deployment scaffolding (Dockerfile, docker-compose, nginx)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:14:29 +01:00
Jeff Emmett 72043f0f12 fix: remove duplicate folder picker in Obsidian browser shape mode
Removed the purple "Connect Vault" button from shape mode rendering.
The no-vault case is now handled only by the early return section which
shows the working "Select Folder" design.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:21:13 +01:00
Jeff Emmett 6ed1edf82b fix: add missing BlenderGen tool definition to context menu
BlenderGen was registered as a tool but missing from overrides.tsx,
causing an empty space in the context menu between VideoGen and Markdown.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:15:27 +01:00
Jeff Emmett 5dbcd1cec3 fix: correct tldraw index validation to accept base-62 alphanumeric
The sanitizeIndex function was incorrectly expecting decimal digits
after the prefix letter (e.g., "b10"), but tldraw uses base-62
alphanumeric fractional indexing (e.g., "bBE6lP", "aKB7V" are valid).

This was causing all shapes to be reset to 'a1' z-index, flooding
the console with invalid index warnings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 18:29:05 +01:00
Jeff Emmett b2941333f3 feat: improve Obsidian vault storage with IndexedDB content store
- Add noteContentStore.ts for storing full note content in IndexedDB
- Avoids Automerge WASM capacity limits and localStorage quota (~5MB)
- Only metadata (id, title, tags, links) syncs via Automerge
- Full content stays local and loads on-demand
- Handle ephemeral messages in AutomergeDurableObject for cursor sync
- Improvements to ObsidianVaultBrowser component
- Enhanced obsidianImporter functionality

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:15:48 +01:00
Jeff Emmett 2030ae447d refactor: remove Daily.co, fix IndexedDB sync for stale cache
Daily.co Cleanup:
- Remove @daily-co/daily-js and @daily-co/daily-react packages
- Remove DailyProvider wrapper from App.tsx
- Remove ~380 lines of Daily API endpoints from worker.ts
- Remove DAILY_DOMAIN from wrangler configs
- Remove Daily env vars from .env.example
- Video chat now uses self-hosted Jitsi (meet.jeffemmett.com)

Sync Logic Fix:
- Fix stale IndexedDB cache preventing server data from loading
- Changed threshold from "10x more shapes" to "more shapes"
- Server data now properly updates local cache on initial load
- Keeps local-only records for offline work

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:21:20 +01:00
Jeff Emmett 58905067f8 feat: improve Jitsi Meet interaction and room naming
- Enable pointer events on iframe for direct mouse/touch/pen interaction
- Room names now use canvas slug (e.g., mycofi-jeffsi-meet for /mycofi)
- All video chats in same canvas room share the same Jitsi room
- Support both /:slug and /board/:slug URL patterns

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 16:57:12 +00:00
Jeff Emmett 08bea8490d fix: TypeScript errors in sync version state
- Fixed variable scope issue with totalMerged counter
- Added syncVersion to return type declaration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 18:58:24 +01:00
Jeff Emmett edb386ec3c fix: force React re-render after server sync merges data
Added syncVersion state that increments when server data is merged,
ensuring the UI updates to show the loaded board content.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 18:50:14 +01:00
Jeff Emmett 5b2de78677 fix: CORS and IndexedDB sync for canvas.jeffemmett.com
- Add canvas.jeffemmett.com to CORS allowed origins
- Fix IndexedDB sync to prefer server data when local has no shapes
- Handle case where local cache has stale/minimal data but server has full board
- Add console logging for sync debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 18:32:50 +01:00
Jeff Emmett 854ce9aa50 fix: enable canvas panning when VideoChat shape not selected
Add conditional pointer-events to iframe - only enabled when shape is
selected, allowing normal canvas pan/zoom when not interacting with video.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 20:45:30 +01:00
Jeff Emmett 30daf2a8cb feat: Replace Daily.co with Jeffsi Meet for video calls
- Remove Daily.co API dependencies
- Use self-hosted Jeffsi Meet (Jitsi fork) at meet.jeffemmett.com
- Simplify room creation (Jitsi creates rooms on-the-fly)
- Add Copy Link and Pop Out buttons for sharing
- Configure Jitsi embed with custom branding settings
- No recurring per-minute costs with self-hosted solution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 19:45:50 +01:00
Jeff Emmett ed61902fab feat: add Last Visited canvases and per-board Activity Logger
- Add "Last Visited" section to Dashboard showing recent board visits
- Add per-board activity logging that tracks shape creates/deletes/updates
- Activity panel with collapsible sidebar, grouped by date
- Debounced update logging to skip tiny movements
- Full dark mode support for both features

New files:
- src/lib/visitedBoards.ts - Visit tracking service
- src/lib/activityLogger.ts - Activity logging service
- src/components/ActivityPanel.tsx - Activity panel UI
- src/css/activity-panel.css - Activity panel styles

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 00:36:43 +01:00
Jeff Emmett 4974c0e303 fix: use internal redirect for /board/:slug on staging
Changed RedirectBoardSlug to use React Router's Navigate instead of
window.location.href to a non-existent domain. Now /board/:slug
redirects to /:slug/ within the same domain.

Production (main branch) keeps /board/:slug unchanged.
Staging (dev branch) supports both /board/:slug and /:slug patterns.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 19:06:54 +01:00
Jeff Emmett 06f41e8fec style: change enCryptID security border from green to steel blue/grey
Updated the security visual indicator to use slate/steel colors (#64748b)
instead of green (#22c55e) for a more professional look.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 09:09:36 +01:00
Jeff Emmett 00aa0828c4 fix: guard Drawfast tool with feature flag in overrides
Drawfast was always included in overrides.tsx but is conditional in
Board.tsx (dev-only). This caused "l is not a function" errors when
users tried to select tools in production since the Drawfast tool
wasn't registered.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 08:32:46 +01:00
Jeff Emmett 486e75d02a fix: Simplify Web3Provider to only use injected connector
- Remove WalletConnect connector to fix TypeScript build error
- Only injected wallets (MetaMask, etc.) are supported for now
- WalletConnect can be re-added when valid project ID is configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 03:29:55 +01:00
Jeff Emmett 28ab62f645 fix: guard WorkflowBlock/Calendar tools with feature flags, disable WalletConnect QR modal
- Add ENABLE_WORKFLOW and ENABLE_CALENDAR flags to overrides.tsx
- Conditionally include tool menu entries only in dev mode
- Disable WalletConnect QR modal to fix web3modal initialization errors
- Users can still connect via injected wallets (MetaMask, etc.)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 21:53:08 +01:00
Jeff Emmett 5db25f3ac1 fix: Redirect /board/:slug URLs to clean /:slug/ URLs
- Old links like jeffemmett.com/board/ccc now redirect to /ccc/
- Both /board/:slug and /board/:slug/ redirect to clean URLs
- Boards served directly at /:slug/ without /board prefix

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 21:45:21 +01:00
Jeff Emmett 7debeb598f fix: Only enable WalletConnect when valid project ID is configured
- Skip WalletConnect connector if VITE_WALLETCONNECT_PROJECT_ID is not set
- MetaMask and other injected wallets still work without WalletConnect
- Add helpful console warning in dev mode when WalletConnect is disabled
- Prevents 401 errors from WalletConnect API with placeholder project ID

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 21:40:50 +01:00
Jeff Emmett 156c402169 feat: Add Web3 Wallet to enCryptID menu with security visual indicator
- Add WalletLinkPanel integration to CryptIDDropdown
- Add security header with lock icon and encryption tooltip
- Add green border around menu to indicate secure zone
- Move Web3 Wallet to top of integrations list
- Wallet modal opens from "Manage Wallets" button

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 21:38:44 +01:00
Jeff Emmett 73d186e8e8 feat: rename CryptID to enCryptID, improve Settings Menu styling
- Renamed all user-facing "CryptID" references to "enCryptID"
- Updated emails, error messages, UI text, and onboarding tour
- Enhanced BoardSettingsDropdown with section headers, icons, and
  alternating background colors for better visual hierarchy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 21:29:48 +01:00
Jeff Emmett b8f179c9c1 fix: serve board directly at /:slug without redirect
Changed catch-all route to render Board component directly instead
of redirecting to /board/:slug/. Now canvas.jeffemmett.com/ccc shows
the board without changing the URL.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 20:00:56 +01:00
Jeff Emmett 80f457f615 feat: add Web3 wallet linking to CryptID accounts
- Add WalletLinkPanel component for connecting and linking wallets
- Add useWallet hooks (useWalletConnection, useWalletLink, useLinkedWallets)
- Add wallet API endpoints in worker (link, list, update, unlink, verify)
- Add proper signature verification with @noble/hashes and @noble/secp256k1
- Add D1 migration for linked_wallets table
- Integrate wallet section into Settings > Integrations tab
- Support for MetaMask, WalletConnect, Coinbase Wallet
- Multi-chain support: Ethereum, Optimism, Arbitrum, Base, Polygon

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 19:29:42 +01:00
Jeff Emmett f15b137686 chore: add missing Web3Provider to git
The providers directory was untracked, causing build failures on the server.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 18:18:25 +01:00
Jeff Emmett 95d7f9631c feat: add catch-all route for direct board slug URLs
Added routes to handle direct slug URLs like canvas.jeffemmett.com/ccc
These now redirect to /board/ccc/ to maintain backward compatibility
with old links from jeffemmett.com/board/ccc

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 18:14:05 +01:00
Jeff Emmett f17d6dea17 feat: enable custom tools in staging, add BlenderGen to context menu
- Changed feature flags to use VITE_WORKER_ENV instead of PROD
- Staging environment now shows experimental tools (Drawfast, Calendar, Workflow)
- Added BlenderGen to context menu "Create Tool" submenu
- Tools now available in both toolbar and right-click menu

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:35:44 +01:00
Jeff Emmett a45ad2844d fix: add type assertion for BlenderGen API response
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 14:23:28 +01:00
Jeff Emmett e891f8dd33 fix: video generation API routing and worker URL configuration
- Fix itty-router route patterns: :endpoint(*) -> :endpoint+
  The (*) syntax is invalid; :endpoint+ correctly captures multi-segment paths
- Update getWorkerApiUrl() to use VITE_WORKER_ENV for all environments
- Fix dev/staging worker URLs to use jeffemmett-canvas-automerge-dev
- Update wrangler.toml dev environment to use shared D1 database

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 14:21:10 +01:00
Jeff Emmett 7dd03b6f6f feat: add BlenderGen to toolbar menu
Added Blender 3D tool to the toolbar menu alongside Image and Video generation tools.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:05:28 +01:00
Jeff Emmett 0677ad3b5d feat: add BlenderGen shape for 3D Blender rendering
Add custom tldraw shape and tool for generating 3D renders via Blender:
- BlenderGenShapeUtil.tsx: custom shape with preset selector and controls
- BlenderGenTool.ts: toolbar tool for creating Blender render shapes
- Worker routes for /api/blender/render and /api/blender/status/:jobId
- Proxies requests to Netcup-hosted Blender render server

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 07:45:03 +01:00
Jeff Emmett 1b67a2fe7f fix: move Daily.co API key to server-side for security
- Worker now uses DAILY_API_KEY secret instead of client-sent auth header
- Added GET /daily/rooms/:roomName endpoint for room info lookup
- Frontend no longer exposes or sends API key
- All Daily.co API calls now proxied securely through worker

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 19:53:06 +01:00
Jeff Emmett d2101ef1cf fix: prevent onboarding tour tooltip from cutting off at step 4
Increased estimated tooltip height from 200px to 300px so the viewport
clamping function correctly positions the tooltip, keeping the Next
button visible on all steps.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 22:23:59 -05:00
Jeff Emmett 0273133e0a feat: add Drawfast to toolbar (dev only)
Added Drawfast button to toolbar between VideoGen and Map.
Only visible in development mode.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 17:03:44 -05:00
Jeff Emmett bf9c9fad93 feat: enable Drawfast in dev, add Workflow to context menu
- Changed Drawfast from disabled to dev-only (can test in dev mode)
- Added WorkflowBlock to overrides.tsx for context menu support
- Added Workflow to context menu (dev only)

All three features (Drawfast, Calendar, Workflow) now available in dev only.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 16:51:10 -05:00
Jeff Emmett 36e269c55f feat: hide Drawfast and Calendar from context menu in production
Extended feature flags to context menu:
- ENABLE_DRAWFAST = false (disabled everywhere)
- ENABLE_CALENDAR = !IS_PRODUCTION (dev only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 16:43:58 -05:00
Jeff Emmett 6a20897322 feat: disable Workflow, Calendar in production (dev only)
Added feature flags to conditionally disable experimental features:
- ENABLE_WORKFLOW: Workflow blocks (dev only)
- ENABLE_CALENDAR: Calendar shape/tool (dev only)
- Drawfast was already disabled

These features will only appear in development builds.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 16:38:42 -05:00
Jeff Emmett 57c49096de fix: use WORKER_URL for networking API to fix connections loading
The connectionService was using a relative path '/api/networking' which
caused requests to go to the Pages frontend URL instead of the Worker API.
This resulted in HTML being returned instead of JSON.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 10:49:03 -05:00
Jeff Emmett 101f386f4a feat: switch ImageGen from RunPod to fal.ai, reduce logging, disable Drawfast
- ImageGen now uses fal.ai Flux-Dev model instead of RunPod
  - Faster generation (no cold start delays)
  - More reliable (no timeout issues)
  - Simpler response handling

- Reduced verbose console logging in CloudflareAdapter
  - Removed debug logs for send/receive operations
  - Kept essential error logging

- Disabled Drawfast tool pending debugging (task-059)
  - Commented out imports and registrations in Board.tsx

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 00:33:47 -05:00
Jeff Emmett 7f1315c2a8 refactor: improve unknown shape type handling and filtering
- Move CUSTOM_SHAPE_TYPES to module level for single source of truth
- Filter ALL unknown shape types (not just SharedPiano) to prevent validation errors
- Add detailed error logging for unknown shapes with fix instructions
- Fix MycelialIntelligenceShape comment (was incorrectly marked as deprecated)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:35:36 -05:00
Jeff Emmett 5bad65eed6 feat: add server-side AI service proxies for fal.ai and RunPod
Add proxy endpoints to Cloudflare Worker for AI services, keeping
API credentials server-side for better security architecture.

Changes:
- Add fal.ai proxy endpoints (/api/fal/*) for image generation
- Add RunPod proxy endpoints (/api/runpod/*) for image, video, text, whisper
- Update client code to use proxy pattern:
  - useLiveImage.tsx (fal.ai live image generation)
  - VideoGenShapeUtil.tsx (video generation)
  - ImageGenShapeUtil.tsx (image generation)
  - runpodApi.ts (whisper transcription)
  - llmUtils.ts (LLM text generation)
- Add Environment types for AI service configuration
- Improve Automerge migration: compare shape counts between formats
  to prevent data loss during format conversion

To deploy, set secrets:
  wrangler secret put FAL_API_KEY
  wrangler secret put RUNPOD_API_KEY

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:26:04 -05:00
Jeff Emmett 1063ea7730 fix: add debug logging and re-emit peer-candidate for Automerge sync
- Add extensive debug logging to track sync message flow
- Re-emit peer-candidate after documentId is set to trigger Repo sync
- Fix timing issue where peer connected before document existed
- This should enable Automerge binary sync protocol (task-027)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 18:59:21 -05:00
Jeff Emmett 0fc80f7496 fix: convert props.text to richText for text shape sync (task-026)
Text shapes arriving from other clients had props.text but the
deserialization code was initializing richText to empty before
deleting props.text, causing content loss.

Added text → richText conversion in AutomergeToTLStore.ts before
the empty initialization, similar to the existing conversion for
geo shapes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 18:34:52 -05:00
Jeff Emmett f15397d19f fix: correct dev worker URL after deployment
- jeffemmett-canvas-dev.jeffemmett.workers.dev is the actual deployed URL

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:45:19 -05:00
Jeff Emmett cf554986a1 feat: add staging environment for Netcup deployment
- Update workerUrl.ts to support staging/dev environments pointing to Cloudflare dev worker
- 'staging' and 'dev' now use jeffemmett-canvas-automerge-dev worker
- 'local' still uses localhost:5172 for local development
- Set VITE_WORKER_ENV=staging when building for Netcup staging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:32:19 -05:00
Jeff Emmett f9208719b0 fix: address multiple runtime issues
- Register missing shape types in Automerge schema (CalendarEvent, HolonBrowser, PrivateWorkspace, GoogleItem, WorkflowBlock)
- Improve connections API error handling to detect HTML responses gracefully
- Clean up Vite config debug logs
- Add static PWA manifest and link to index.html for proper manifest serving

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 21:06:20 -05:00
Jeff Emmett 0d6b62d1c7 fix: remove orphaned debug statements causing build errors
- Remove incomplete console.log cleanup artifacts across 17 files
- Fix orphaned object literals left from previous debug removal
- Prefix unused callback parameters with underscores
- Update Drawfast shape to side-by-side INPUT/OUTPUT layout (900x500)
- Remove unused overlay toggle from Drawfast controls

Files fixed: AutomergeToTLStore, TLStoreToAutomerge, useAutomergeSyncRepo,
FathomMeetingsPanel, NetworkGraphPanel, sessionPersistence, quartzSync,
testClientConfig, useCollaboration, Board, DrawfastShapeUtil,
FathomMeetingsBrowserShapeUtil, MapShapeUtil, FathomMeetingsTool,
HolonTool, overrides, githubSetupValidator

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 19:38:27 -05:00