/ 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 we 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, read-only canvas for viewers, per-page social share buttons, nav share above Recently Shipped.
- Flow view — link pickers as mid-line chips, unlink + SMIL re-activation after edits; minimap top-right so the voice bot stops covering it.
- Account deletion that actually nukes the auth row via a server-only admin client — not just the public profile.
Recent passes (May 2026): OG images + share_token RLS fix, perf/SEO/security audit sweep, Flow view with link pickers as mid-line chips (not buried in a side panel), per-page social share buttons, nav share above Recently Shipped, v4 changelog cadence documenting hand-tuned UX wins.
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.