Fundraise CRM

macOSweb appElectronReactSupabaseClaudemobile

Fundraise CRM is the app my team uses to run our fundraise. Instead of a spreadsheet that one person owns and everyone else screenshots, it’s a real app where the whole team edits the same investor pipeline live — as a native macOS desktop app, or from any browser, including on a phone.

What it does

  • One shared pipeline. Everyone opens the same workspace and every edit syncs in real time. If two people touch the same investor at once, the second save gets an “edited while you were away” prompt instead of silently clobbering the first.
  • Anywhere, any device. Use the native macOS app at your desk or the same CRM in a browser on your phone — they’re backed by the same database and stay in sync, so you can update the pipeline from a meeting on the go.
  • Invite-only access. You sign in with your email and a 6-digit code, and stay signed in across restarts. Access is granted per-teammate; removing someone revokes them immediately.
  • Auto-fill from transcripts. Paste a meeting transcript and Claude extracts the investor details — who they are, what they said, next steps — and fills in the record for you, so notes don’t rot in a doc somewhere.

How it’s built

  • One codebase, two surfaces — a Vite + React renderer that ships both ways: packaged by Electron into a double-clickable, notarised macOS app, and deployed as a web app on Cloudflare Pages that runs in any browser, desktop or mobile.
  • Data & auth — a shared Supabase Postgres database with row-level security and realtime; sign-in is email one-time-passcode, so there’s nothing local to lose.
  • Extraction — transcript parsing runs in the Electron main process using each user’s own Anthropic key, stored encrypted in their Mac’s Keychain and never sent anywhere but Anthropic’s API.
  • Security — context isolation, sandboxing, no Node integration in the renderer, and a content-security policy that only allows outbound traffic to Supabase. No secrets in the build.

Why I made it

Fundraising is a team sport, but most CRMs are either heavyweight enterprise tools or a single shared spreadsheet that falls apart the moment two people edit it. I wanted something lightweight that felt like a native app, kept everyone on the same page in real time, and used Claude to kill the busywork of turning conversations into structured records.