Design and buildHealthcare / SaaS · 2026

Pulse Clinic

A full clinic management system with six roles, 53 screens, and 61 tables, where the safety rules are pure, tested modules.

Pulse Clinic front desk screen on a laptop, showing arrivals, live room status and unpaid invoices

Services

  • Product Design
  • Next.js Development
  • Database Design
  • AI Integration

Stack

  • Next.js 15
  • React 19
  • TypeScript
  • Supabase
  • Tailwind CSS

Outcome

  • 358 Unit tests on scheduling, dosing, money, triage
  • 200 RLS assertions proven on real Postgres
  • 53 Screens across six roles, 61 tables

Our own build, not client work

Pulse Clinic is what we build when nobody is holding the brief: a complete clinic management system covering appointments, consultations, prescribing, laboratory, pharmacy, billing, analytics, and a patient portal. Designed and built end to end by Confidency.

Six roles (admin, doctor, receptionist, lab, pharmacist, patient), 53 screens, 61 tables, all behind row-level security that’s proven against real Postgres rather than asserted in a README.

Pulse Clinic front desk with expected arrivals, check-in status, payment state and live room availability
Reception answers one question: who is here, and who is next. Payment state sits on the same row, so nothing unpaid leaves the building.

The safety rules are the point

Most clinic templates are screens. Pulse Clinic is mostly the reasoning underneath them, eleven pure, dependency-free modules that hold the decisions that matter, each one testable in isolation:

Drug allergy checking catches amoxicillin prescribed to a penicillin-allergic patient, a class match, not a name match, because those words share no letters. It warns and requires a written reason rather than blocking, because software that refuses gets worked around.

Result flagging picks the reference range by sex and age before comparing, so 13 g/dL of haemoglobin is normal for a woman and low for a man. No range on file means no flag, never a guess.

Batch dispensing picks stock first-expiry-first-out and flags a batch that’s in date today but expires partway through a 30-day course. Nothing else in a clinic system knows both those facts at once.

Money parity ports the database’s invoice arithmetic into the interface and then proves they agree by running the same rows through the real migrations. It caught a schema bug where insurance-settled invoices stayed “partially paid” forever.

The statistics engine refuses to mislead: medians with a 90th percentile instead of means, no percentage without its denominator, and under ten observations it says “too few to judge” instead of publishing noise a manager would act on.

Pulse Clinic doctor day view with the morning list, patient activity and items needing attention
The clinician view opens on the morning list, with unsigned notes and a critical potassium result pulled to the top rather than buried.

Half the AI features use no AI

The assistant explains lab results with a curated glossary plus the flagging engine’s verdict, a template can’t invent a number; a model can, fluently. Triage is an explicit rule table where red flags cannot be talked down. Only note drafting uses a model, fenced by redaction on the way out and grounding checks on the way back: every number in a draft must appear in the source, and nothing generated becomes clinical fact until a person accepts it.

Pulse Clinic patient portal showing next appointment, medication to collect, recent results and vaccinations
The patient side of the same system. Results appear only after a clinician releases them, which is a rule in the data layer rather than a promise in the interface.

Built the way we build for clients

The same discipline we bring to client products: a token-driven design system, dev-ready structure, and evidence over adjectives: 358 unit tests, 200 RLS assertions, 15 money-parity checks.

What this project involved

Next projectMerit

Next project

Have an ideaworth raising?