Grovvve
Co-founder & Developer
Therapists spend more time on admin than on therapy. A practice platform where scheduling, notes, intake, messaging and billing all know about each other.
- Role
- Co-founder & Developer
- Status
- Live in production
- Note formats
- 19 clinical
- Commits
- 228
Problem
Private-practice therapists run their business across a scheduling tool, a notes tool, a billing tool and a personal phone, none of which talk to each other. Every appointment gets re-entered three times, and the admin overhead lands on a clinician rather than an operations team.
The tools that do integrate are enterprise EHR systems priced and scoped for hospitals, not for a solo practitioner.
Approach
Grovvve is built around one insight: every workflow should be aware of the others. A booking request auto-populates a client record. A session note links to the appointment it belongs to. An invoice is generated from that same appointment. A signed intake form appears in the client's profile without anyone filing it.
One login, no integrations, and the connective tissue is the product rather than a feature of it.
Architecture decisions
Clients never get accounts. Asking a therapy client to create a login just to fill in an intake form is friction at exactly the wrong moment. Instead, every client-facing surface (booking, intake, secure messaging, feedback) is reached through a unique 24-byte base64url token: /intake/[token], /message/[token], /feedback/[token]. No password, no signup, and no account recovery path to support.
Multi-tenancy is enforced at the row. Every record is scoped to a therapist_id matching the authenticated Supabase Auth UID, and every API route verifies the session user and filters on that column before it reads or writes. There is no shared data between practices, and no code path where a missing WHERE clause leaks across tenants.
AI structures notes, it does not write them. Raw dictation goes to Groq's whisper-large-v3 for transcription, then to Claude to be shaped into one of 19 clinical formats: SOAP, DAP, BIRP, EMDR, CBT, DBT and others. The clinician stays the author; the model does the formatting. Completed notes are locked and digitally signed with a timestamp.
Stack
Next.js 16 App Router with TypeScript in strict mode. Supabase Postgres with SSR auth. SWR for client-side dashboard data against REST routes under /api, with server components reserved for the public pages where SEO and first paint actually matter.
Stripe and Paddle for subscriptions, checkout, billing portal and webhooks. Twilio for SMS reminders, Resend for transactional email, Upstash Redis for rate limiting, TipTap for rich text, next-intl for localisation, Vitest for tests.
Built with
- Next.js 16
- · TypeScript
- · Supabase
- · Stripe
- · Groq
- · Twilio