<AddToQueueCard/>AddToQueueCard
The single intake surface — patient + visit type → Add.
Queue, Appointments, Patients, Medications, Archive — the Solo Mode pages doctors and reception live in when they’re not in the consultation cockpit. Same six-section structure, deeper breakdowns.
The Queue page is the operational hub. Reception adds, edits, and removes; the doctor watches in read-only. Both surfaces share the same live stream — no refresh ever needed.
Numbered callouts on the mockup above.
The form lives where eyes already land. No accordion, no modal — friction here multiplies across every walk-in.
Cards give room for the multi-line context (specialty, doctor, phone) that mid-day staff actually scan for. Rows would compress this into noise.
When the doctor is busy, Position 1 means 'next up'. When they're idle, Position 1 has the start authority. The badge encodes both states.
Reception needs to know what's been done — without leaving for Archive. Six rows max here, then it collapses.
An in-progress visit can't be removed; it has to be completed by the doctor. The trash icon disappears the moment the patient is started.
<AddToQueueCard/>The single intake surface — patient + visit type → Add.
<ActiveQueueList/>Real-time card list, numbered, with status states.
<CompletedToday/>Six most recent done-visits in chronological reverse.
<Remove confirmation/>Single-click toast confirm with Undo.
Type last 4 digits of phone, or first 3 of name.
Examination · Follow-up · Consultation.
New row lands at the bottom of the queue, position N+1.
Their position and rough ETA — both visible.
The picker accepts focus from anywhere — no need to click. Power-users add 8+ patients/hour without touching the mouse.
Late patients should be marked No-show on Appointments, not removed from Queue. The status is tracked separately and feeds analytics.
Improvement: when a patient is searched and has a recent (< 30 day) prior visit, default the visit type to Follow-up. Saves a click on returning patients.
Reception books, confirms, and follows up appointments without leaving the page. Late and no-show flows are first-class — most appointment systems treat them as edge cases, but in a busy clinic they're a Tuesday.
What each numbered region does.
Hidden when the queue is empty and the doctor is on time. Reception only sees ETA when it's worth telling a patient.
When an appointment time has passed and the patient hasn't arrived, the screen surfaces it loudly. Reception decides: arrived, no-show, or wait.
Booked → Confirmed → Arrived → (queued) → Completed is the canonical state machine. Late and No-show are auto-transitions reception can override.
One click, no modal. The patient is in front of you — every confirmation step is friction. The action also auto-creates a queue entry.
Marked no-shows surface here for the rest of the day. Reception can reinsert (patient eventually arrived) or close (rescheduled).
<LiveETAPanel/>Tells reception what to promise — patients ahead, est. wait, doctor delay, next slot.
<AwaitingArrivalAlert/>List of appointments past their scheduled time but not yet checked in.
<AppointmentTable/>Day's appointments with status, queue link, and actions.
<NoShowSection/>Bottom-of-page list of today's no-shows, with reinsertion path.
Quick Add → Book Later → date + time picker.
Booked → Confirmed (after reminder) → Late (after threshold).
Reception clicks Arrived on the row; queue entry auto-creates.
When the doctor completes the visit, status moves to Completed.
Let the auto-threshold trigger. Manual early flags skew future ETA estimates because the system 'learns' patients are no-showing faster than they actually are.
Improvement: a one-click 'running late?' SMS template on the Late status. Reduces no-shows without requiring discretion from busy staff.
Improvement: the page is a list, which is fine for today but unhelpful for next week. A 7-day grid view would let reception spot empty afternoons at a glance.
A single canonical list of every patient who has ever walked through the door. Reception adds and edits; the doctor reads. Every row links into the patient detail page so the full visit history is one click away.
What each numbered region does.
Phone is unique per clinic; name isn't. Phone-first dedupes the table almost for free.
Reception scans this column to spot returning patients (don't book a follow-up if they came yesterday) and lapsed patients (call back).
Venus/Mars saves a column. Gender is glanceable, not sortable.
90% of edits are typo fixes (phone, name spelling). The dialog opens in 50ms; the detail page would mean a route change.
25 per page. Reception remembers 'page 3 has the Salem family' — infinite scroll loses that mental anchor.
<PatientSearch/>Single input, dual-indexed (name and phone, both fuzzy).
<PatientTable/>Tabular list with name, gender, age, DOB, phone, last visit, notes, actions.
<EditPatientDialog/>Inline edit of patient identity and contact.
<AddPatientDialog (reception)/>New-patient creation with the four required fields.
Always. Duplicate prevention starts with a search.
Name, DOB, gender, phone — minimal viable record.
Spelling, phone updates — no route change.
Patient name → detail page → full visit timeline + Rx archive.
Faster than full names, immune to transliteration variance, and exact enough that hits are usually unique.
Two records for the same patient = two history threads. Always reconcile through Edit, never by adding a fresh record.
Improvement: a tag column (diabetic, hypertensive, pregnant) would let reception triage walk-ins by acuity at a glance.
A small, opinionated master list — not a copy of a pharmacopoeia. Every medication entered here becomes searchable in the visit form with its default dose pre-filled. Curation is a feature, not a chore.
Numbered annotations on the mockup.
The medication you prescribed yesterday is more likely to be the one you want today. Recency wins — alphabetical search ranks against it as a fallback.
Set 'Amlodipine 5 mg = 1 tab daily' once. Every subsequent prescription starts there; per-patient overrides never touch the master.
Cautions, interactions, common pitfalls — surfaced in the prescription form's tooltip but never printed.
The medications page is read-rare, edit-rare. The actions belong on the row, not in a bulk menu — there's no 'select all and merge' use case.
Removing a medication from the master list does not touch any past prescription. The patient still has their record.
<MedicationTable/>Master-list table with name, default dose, notes, actions.
<MedicationDialog (Add/Edit)/>Single dialog for both create and update — three fields.
Surface stale entries — anything > 12 months is a cleanup candidate.
If your default has drifted (e.g. you now prescribe a different dose), edit once.
Delete the misspelled duplicate. Past prescriptions are untouched.
Anything you've found yourself typing as free-text twice deserves a master entry.
20 well-chosen medications you actually prescribe beat 200 imported from a generic database. Search is faster and ranking is meaningful.
'Amoxicilin' and 'Amoxicillin' both will appear in search and split prescription history across two threads. Server-side uniqueness on name prevents this.
Improvement: detect when free-text drug names appear in 3+ visits and propose a master-list entry. Catches drift without manual quarterly review.
The archive is the long-term memory of the clinic — every completed visit with diagnosis, notes, and prescription, retrievable by patient, type, or date range. Built for the moments when reception or the doctor needs to answer a question that didn't exist when the visit happened.
Annotations on the mockup.
Name, phone, diagnosis text, notes text — all matched in one query. Reception types 'asthma' and finds every visit that mentioned it, by anyone.
Hardcoded ranges (today/week/month) feel friendlier but answer fewer real questions. A from/to picker handles all of them.
Diagnosis is the answer. Notes are the workings. Typography reinforces which is which during a 5-second scan.
Each med renders as a small chip with name + dose. Quick visual diff between visits without opening anything.
25 visits × diagnosis + notes + Rx is already a heavy row. Scroll past 25 and you wanted a date filter anyway.
<ArchiveFilters/>Search + type select + date range, with a 'Clear' shortcut.
<VisitRow/>Dense visit row: date, patient, type, diagnosis, notes, Rx.
<DateRangeFilter/>From/to date inputs with empty=open.
Diagnosis or notes text — usually one word is enough.
From/to picker; 'last spring' is roughly Mar–May.
Examination only; skips the routine consultations.
Diagnosis, notes, prescription — all inline.
Filter state is in the URL. Save 'all hypertension follow-ups in the last 90 days' as a bookmark — opens to the same view every time.
Every visit, prescription, and edit is timestamped here. When compliance asks for a record, this page is the answer — export-ready.
Improvement: a 'group by diagnosis' toggle would surface chronic-care patterns at the practice level — your top 10 diagnoses across all patients.
Parts 3–5 cover Station Mode and the admin layer. Same six-section structure, same fidelity — everything you saw here, scaled to specialties, routing, and admin oversight.
Multi-doctor clinics with specialties and routing. Same data model, more knobs.
Read itThe multi-doctor counterparts to Part 1.
Suspension controls, audit, performance, billing. The behind-the-scenes layer.