/ recent work / squishymind

SquishyMind

Mind-mapping app where ideas pan, zoom, and snap together. Real-time sync across devices, share links, the works.

SquishyMind — preview
Year
2025
Role
Solo build
Status
live
Stack
  • Next.js 16
  • TypeScript
  • Supabase
  • Vercel

Mind-mapping that actually feels good to use. Pan and zoom, click-to-spawn nodes, real-time sync via Supabase, shareable read-only links with one-click token rotation.

What I built

  • Hand-built canvas to replace an iframed editor. A 2500-line React component handling pan, zoom, drag, plus-handle spawn, action chips, detail view, themes, keyboard shortcuts (Tab/Enter/Del/F/Home/Esc), import/export, undo.
  • Server sync via PATCH endpoints, debounced 800ms, with a save indicator that distinguishes “saving” / “saved Xs ago” / “retry.”
  • Sharing model with public / unlisted / private visibility, regenerable share tokens, and read-only canvas state for viewers.
  • Account deletion that actually nukes the auth row via a server-only admin client — not just the public profile.

Tricky bits

Next.js 16’s proxy.ts middleware had an __dirname issue in Edge runtime with @supabase/ssr, so the proxy was dropped and auth handled per-page. Sessions don’t auto-refresh; works fine in practice. Supabase RLS had a circular reference between mindmap-read and collab-read policies that needed simplification.