Healthcare
Session notes and billing for a therapy practice
A therapy practice with six therapists. Each therapist keeps private session notes per client, books recurring weekly slots, and bills either the client or their insurer. No therapist can see another therapist's notes, and the practice owner sees only the billing.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
Six therapists must independently manage recurring client time slots, write private session notes, and feed billing records to the practice owner without cross-therapist note leakage.
Section 03 · Screens
Every screen, and what it is for.
- ›Dashboard — Owner, reviews unbilled session ledger and marks invoices paid, and ledger totals must be instant.
- ›Calendar — Therapist, manages weekly recurring slots and individual appointments, and slot drag-and-drop must be instant.
- ›Client File — Therapist, views client contact details and payment type, and contact details must be instant.
- ›Session Note — Therapist, writes and signs confidential clinical progress notes, and auto-saving text must be instant.
- ›Billing Queue — Therapist or Owner, generates line items for private pay or insurance, and ledger filtering must be instant.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
therapist
id uuid, user_id uuid, name text, email text, created_at timestamptz
Access · Any authenticated user can read therapists.
client
id uuid, therapist_id uuid, name text, email text, billing_type enum(private, insurance), insurance_details jsonb, created_at timestamptz
Access · Therapist reads where therapist_id matches current user. Owner reads all.
appointment
id uuid, client_id uuid, therapist_id uuid, start_time timestamptz, end_time timestamptz, status enum(scheduled, completed, cancelled), recurrence_rule text, created_at timestamptz
Access · Therapist reads where therapist_id matches current user. Owner reads all.
session_note
id uuid, appointment_id uuid, therapist_id uuid, content text, signed_at timestamptz, created_at timestamptz
Access · Therapist reads where therapist_id matches current user. Owner cannot read.
invoice
id uuid, appointment_id uuid, client_id uuid, amount numeric(10,2), status enum(unbilled, billed, paid), billed_to enum(client, insurer), created_at timestamptz
Access · Therapist reads own clients. Owner reads all.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
unbilled → billed → paid | void
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Therapist accidentally views another therapist's client notes via insecure URL parameters.
Enforce strict row-level security in PostgreSQL checking auth.uid() against therapist_id on every query.
Recurring appointment series miscalculates dates across daylight saving time transitions.
Store all appointment times in UTC timestamptz and calculate local display offsets at render time.
Section 08 · Deliberately left out
What version one does not do.
- ×Automated insurance electronic claim submission — more work than it looks for v1, add when processing volume justifies clearinghouse API integration costs.
- ×Client portal login — Unnecessary for v1 since therapists handle booking and billing communication directly.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- How should recurring weekly slots handle holidays or therapist vacation days without breaking the series?
- What specific insurer billing codes or form outputs must the owner export from the billing ledger?
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.