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.

NDA available on request