Clinic admin
Runs the practice — doctors, staff, schedules, services, pricing, and the audit trail.
Multi-tenant clinic management SaaS — scheduling, patient records, treatment plans, recalls, and an AI assistant, with clinics isolated by Postgres row-level security and every record read audited.
Small practices run on a booking tool, a spreadsheet of patients, a paper recall list, and a receptionist’s memory. Meridian replaces all four with one system — and because it’s patient data, access has to be provable: who could see a record, and who actually did.
Runs the practice — doctors, staff, schedules, services, pricing, and the audit trail.
Sees their own day, records consultations and prescriptions, quotes treatment plans.
Front desk. Scoped to the doctors the clinic assigns them — or to nobody at all.
Self-registers from the clinic’s own link, then books and tracks appointments.

Feature 01
Everything that needs a human today on one screen: unpaid visits, today’s schedule, and recent cancellations. Every cancelled slot carries a “Who wants this slot?” button that pulls matching patients off the waitlist, so a gap becomes a booking instead of lost revenue.
Live updates over Server-Sent Events fed by Postgres LISTEN/NOTIFY

Feature 02
Every booking with its status, fee, and paid state, filterable by status, billing, and doctor, with running counts for pending, completed, cancelled, and no-show visits.
Double-booking blocked by a Postgres exclusion constraint, not just the UI

Feature 03
Each clinician’s weekly hours and slot length, with date exceptions for leave and closures, projected across a month, week, or day view. Bookable slots come from those hours, not from someone’s memory of them.
FullCalendar over provider schedules and schedule exceptions

Feature 04
The whole record in one place — demographics, emergency contact, treatment plans, allergies, medical conditions, family history, insurance, and consents — including anything since removed, because medical history doesn’t get deleted.
Tenant isolation enforced by Postgres row-level security

Feature 05
Multi-item quotes a patient can accept, with progress tracked item by item — what was quoted, what’s done, and what it adds up to.
Plan items priced from the clinic’s own service list

Feature 06
A call list of patients due a check-up, driven by each clinic’s recall interval, alongside a waitlist of patients who want an earlier slot.
Recall interval set per clinic, due date tracked per patient

Feature 07
How the clinic has actually been running: appointments per day, stacked by outcome, for any date range and status.
Recharts over daily aggregates computed in SQL

Feature 08
Every read and every write — who, in which role, did what to which record, and when. Filterable by person, action, and date. The question “who opened this file?” has an answer.
Reads are audited too, not only writes

Feature 09
Ask “who has an appointment today?” or “when is Dr. Hayes free?” in plain English. The assistant answers from live clinic data and labels every answer as generated.
Google Gemini with seven read-only tools, rate-limited and capped per clinic per day

Feature 10
Each clinic gets its own public sign-up link. Patients create an account, add address and emergency contact, and can book as soon as they sign in. New clinics onboard themselves the same way.
Rate-limited public endpoints, argon2 password hashing
✦ Highlight 01
Patients, appointments, consultations, and prescriptions sit behind forced row-level security. Every transaction sets its clinic before it touches a row, and a query that forgets to set one errors out instead of quietly returning nothing — the failure you notice beats the one you don’t.
✦ Highlight 02
A GiST exclusion constraint over each clinician’s time ranges makes overlapping appointments impossible to insert. Two receptionists clicking the same slot at once get one booking and one clear error.
✦ Highlight 03
One Postgres LISTEN connection per server process fans events out in memory to every open browser over Server-Sent Events. A thousand open tabs cost one database connection, not a thousand.
✦ Highlight 04
Reminders are queued in an outbox table and drained by one worker to Brevo. A crash mid-send makes a reminder late, never lost — and the queued payload carries only the patient’s name, clinic, and time: no doctor, service, fee, or reason ever leaves in an email.
Meridian — multi-tenant clinic management