/ recent work / squishymind
SquishyMind
Mind-mapping app where ideas pan, zoom, and snap together. Real-time sync across devices, share links, the works.
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.