Product Guide · Part 4

Same screens. Station instincts.

The doctor and reception surfaces from Part 1 carry over almost wholesale. A handful of UI changes — fewer for doctors, more for reception — turn them into station-aware tools without a re-learn.

9-minute read Two roles, two diffs What changes, what stays
Station Doctor
  • My Clinics
  • Reception staff
  • Audit logs
  • Everything else, identical
3 items removed
Station Reception
  • Specialty step on Quick Add
  • Optional doctor pin
  • Specialty + doctor filters
  • Pinned vs Shared row badges
4 things added
Part 3 · Station ModePart 5 · Admin & Financials
The diff at a glance

Everything you already learned in Part 1 still applies.

One codebase, conditional rendering. The mode is detected once at login (clinicKind === "station") and a small set of components flip behaviour. Same URLs, same shortcuts, same shape.

Station Doctor — subtractive
  • Dashboard, Queue, Patients, Archive, Medications, Performance — unchanged.
  • Sidebar loses My Clinics, Reception staff, Audit logs.
  • Doctor sees a flat clinic queue: pinned and shared, undifferentiated.
  • No claim button. Doctor starts any waiting patient — server enforces specialty match.
Station Reception — additive
  • Quick Add gains a Specialty step (required) and an optional Doctor pin.
  • Add-to-queue form gains Specialty + Doctor selects.
  • Queue page gets two filters: "Filter by specialty", "Filter by doctor".
  • Queue rows display the specialty + a "Shared" or "Dr. X" badge.
Section 01 · Station Doctor

A solo doctor who shares a building.

The Station Doctor screen is the Solo Doctor screen with three sidebar items removed and a busier queue. There is no claim flow, no specialty pool view — the doctor sees the patients waiting for their clinic and starts whoever is next. Pinned vs shared lives on the reception side.

At a glance
  • WhoDoctors in a multi-doctor station
  • OutcomeSame workflow, fewer admin distractions
myclinic-system.com/doctor/dashboard
dr-ahmed
Cardiology · Al Nour
Dashboard
Queue
Patients
Medications
Archive
Performance
Settings
Hidden in station
My Clinics
Reception staff
Audit logs
14:32:07
Dashboard
Manage the live queue, visits, and prescriptions.
Cardiology · 6 waiting
BusyReem Al-Sayed
12
Patients today
6
Waiting
11m
Avg wait
9m
Avg session
Waiting queue6
Pinned + shared, server-filtered to your specialty
1NextYousef HammadExamination
2Tarek HelalFollow-up
3Mona FaroukExamination
4Heba El-BannaConsultation
5Karim AdelFollow-up
6Sarah HanyExamination
Station chat2 unread
MA
reception-mai · Reception
Tarek's family asked specifically for you — pinned.
SH
dr-sara · Pediatrics
Cardiology room is free if you need it after the next one.
Floating comments

Numbered annotations on the mockup.

1
Why

Slimmer sidebar — three items gone

My Clinics, Reception staff, Audit logs — all moved to the station admin's surface. The doctor sees only what they own clinically.

2
Why

Specialty appears in the user chip, not the queue

Doctor identity in the sidebar shows their specialty. The queue doesn't repeat it — the doctor knows their own specialty.

3
Why

Flat queue: pinned and shared, side by side

Doctors don't see the routing decision. Pinned-to-me and shared-pool items land in the same list, ordered by arrival. The server has already filtered them.

4
Why

No claim button. Start works on every row.

If the doctor sees it, the doctor can start it — server enforced. No multi-step claim ceremony, no race conditions.

5
Why

Chat carries specialty context

The chat dock shows colleague names with their specialty. Useful when reception messages 'send Tarek to the Cardiology room'.

Components

Building blocks.

<SidebarStationDoctor/>

SidebarStationDoctor

Same nav as Solo Doctor minus three items: My Clinics, Reception staff, Audit logs.

BehaviourRenders conditionally on `clinicKind === 'station'` from /api/auth/me.
DoHide the items entirely. Greyed-out 'unavailable' nav is more confusing than absence.
Don'tReplace with disabled icons. The doctor doesn't need to know what the admin sees.
<FlatStationQueue/>

FlatStationQueue

Server-merged queue: items pinned to this doctor + unassigned items in their specialty.

BehaviourWebSocket subscribes to queue events; server filters by (assignedDoctorId === self || (assignedDoctorId IS NULL && specialtyId === self.specialtyId)).
DoOrder by arrival time, not by pinned-status. Pinned-first creates resentment over fairness.
Don'tShow pinned/shared distinction in the doctor's UI. It's a routing concept, not a clinical one.
<Server-side claim guard/>

Server-side claim guard

Prevents a doctor from starting a queue item that doesn't belong to them.

BehaviourPOST /api/queue/{id}/start returns 403 if the item is pinned to another doctor.
DoSurface the failure as a non-disruptive toast — race conditions happen in busy stations.
Don'tCache the queue client-side past 30s. The reality drifts; the server is the truth.
<DashboardChat (station-aware)/>

DashboardChat (station-aware)

Cross-role chat dock with colleague names + specialty.

BehaviourSame dock as Solo, but colleague metadata includes `specialtyName` from the clinic context.
DoShow specialty as a small subtitle, not a tag. It's context, not a filter.
Don'tBuild per-specialty chat channels. The shared station thread is enough.
User flow

A station doctor's morning, in four moves.

01

Open Dashboard

Slimmer sidebar, same metrics, a busier queue.

02

Scan the queue

Pinned and shared items, all ordered by arrival.

03

Start whoever is next

Server validates the claim. Start works or fails fast.

04

Complete and repeat

Same form, same shortcuts, same prescription pipeline. Workflow muscle-memory transfers.

Pro tips

Get more out of station mode.

Speed

⌘+Enter still ends the visit

Every shortcut from Solo Doctor (Part 1) carries over. Train once; works everywhere.

Discipline

Don't ignore queue depth

Station queues are co-mingled, so 'my queue is 8' actually means 'Cardiology is 8'. Coordinate with colleagues — don't silently absorb everything.

Missing

Pinned-to-me visibility

Improvement: a tiny pin icon next to your name in the queue would show you which items the family explicitly wanted you for. Currently invisible.

Improvement

Cross-cover when colleagues are away

Improvement: when another doctor in your specialty is offline > 30 min, surface a banner offering to absorb their pinned queue with one click. Pure social load-balancing.

Insight

Use Performance to spot drift

Performance breaks down visits by doctor. If you're handling 60% of the specialty's load month over month, that's a staffing conversation with the admin.

Compliance

Audit lives elsewhere now

Audit logs moved to /station/audit-logs. If you need to reconstruct your own actions, ask the admin or use Archive — same data, different angle.

Section 02 · Station Reception

Where the routing decision actually happens.

Solo reception adds a patient. Station reception adds a patient with a specialty and an optional doctor pin. Two new selects on Quick Add, two new filters on the queue, two new badges per row — small surface change, large workflow change.

At a glance
  • WhoReception in a multi-doctor station
  • OutcomePredictable routing, no lost patients
myclinic-system.com/reception/queue
reception-mai
Al Nour station
Dashboard
Queue
Appointments
Patients
14:32:07
Queue
Manage the patient queue in real time.
Quick Add · station mode
3/4
Step 1
Examination
Visit type
Step 2
Tarek Helal
51y · …5520
Step 3Active
Specialty*
Cardiology
Required in station mode
Step 4Pending
Doctor (optional)
Any (shared)
Queue now
Book later
FiltersURL-synced
Cardiology
Everyone
LegendDr. X= pinnedShared= any doctor of the specialty
Active queue · Cardiology5
Real-time
With doctorReem Al-SayedExaminationCardiologyDr. dr-ahmed
1NextYousef HammadExaminationCardiologyShared
2Tarek HelalFollow-upCardiologyDr. dr-ahmed
3Mona FaroukExaminationCardiologyShared
4Karim AdelFollow-upCardiologyDr. dr-omar
Floating comments

Numbered annotations on the mockup.

1
Why

Specialty step is required, never skipped

Quick Add adds it as Step 3 between visit type and patient action. The form blocks submission without it — the most common bug class in multi-doctor flows is unrouted queue items.

2
Why

Doctor select defaults to "Any (shared)"

Pinning is a deliberate action. The default routes the patient into the specialty pool, where any qualified doctor can claim them.

3
Why

Queue filters: "Filter by specialty" + "Filter by doctor"

Two dropdowns above the queue. The doctor list narrows to the chosen specialty. "Unassigned only" surfaces shared-pool items.

4
Why

Badge per row: specialty + assignment

The specialty badge (secondary) and the doctor badge (info "Dr. X" if pinned, warning "Shared" if not) make routing visible at a glance.

5
Why

Filter state lives in the URL

Reception loads the page and lands on the same view they had open before — refresh-safe filters are a small thing that compounds.

Components

Building blocks.

<SpecialtyPicker/>

SpecialtyPicker

Required dropdown on Quick Add and the inline add-to-queue form.

BehaviourHidden in solo (`clinicKind === 'solo'`); required in station. Empty option is a 'Select…' placeholder.
DoShow all specialties alphabetically. Most-recently-used sort sounds smart but trains the wrong reflex.
Don'tAuto-pick when there's only one specialty. Make the requirement explicit.
<DoctorPicker/>

DoctorPicker

Optional dropdown — appears once specialty is chosen.

BehaviourFirst option is "Any (shared)". Filtered by `specialtyId`. Empty value = NULL `assignedDoctorId`.
DoDefault to Any. Pinning should be a conscious extra click.
Don'tShow all doctors regardless of specialty. Cross-specialty pinning is invalid by design.
<QueueFilterBar/>

QueueFilterBar

Specialty + doctor + clear button at the top of the Queue page.

BehaviourURL-synced. Doctor list narrows to the selected specialty.
DoMake "Clear filters" prominent. Sticky filters are the silent UX bug.
Don'tHide the filter row when no filter is set. Discoverability matters more than tidiness.
<StationQueueRow/>

StationQueueRow

Same structure as Solo, plus two badges (specialty + doctor assignment).

BehaviourRenders specialty (secondary), then assignment ('Dr. X' info / 'Shared' warning).
DoUse info for pinned, warning for shared. Pinned reads as "owned"; shared reads as "available".
Don'tStack three badges vertically. Specialty + assignment is enough; visit type stays inline.
<QuickAddDialog (station)/>

QuickAddDialog (station)

Four steps instead of three: type → patient → specialty → action.

BehaviourBackwards navigation preserves earlier steps. Step 3 (specialty) is required; doctor pin is optional inside step 4.
DoShow step indicators (●●●○) so reception knows progress mid-walk-in.
Don'tHide the specialty step behind an 'Advanced' toggle. It's not advanced — it's required.
<Routing badges (legend)/>

Routing badges (legend)

A small "Shared = any doctor / Dr. X = pinned" legend on the queue page header.

BehaviourAlways visible above the queue list when there's at least one row.
DoTooltip the badge meaning on hover for new staff.
Don'tHide it after onboarding. New staff arrive constantly.
User flow

A station walk-in, in five moves.

01

Click Quick Add

Same button, four-step dialog.

02

Type + patient

Same as solo — Examination/Follow-up/Consultation, then patient.

03

Pick specialty

Required. New step.

04

Pin or share

Optional. 'Any (shared)' is the default.

Pro tips

Get more out of station mode.

Discipline

Default to shared, pin sparingly

Pin only when continuity matters (chronic patients, family doctors). Pinning everything kills load-balancing and creates resentment.

Speed

Bookmark the filtered URLs

Save 'Cardiology only' or 'Unassigned only' as bookmarks. Filter state is in the URL, so each bookmark opens a specific view.

Hygiene

Watch for unrouted appointments

Appointments booked before specialties existed (or before this feature shipped) may have NULL specialtyId. Sweep them quarterly.

Improvement

Suggest specialty from chief complaint

Improvement: a free-text complaint field that suggests "looks like Cardiology" would cut the most common reception mistake — wrong specialty.

Missing

Per-specialty queue depth on dashboard

Improvement: reception's dashboard could show the per-specialty queue depth bars from the admin dashboard. Same data, different consumer.

Hygiene

Wrong specialty? Edit, don't recreate

If reception picks the wrong specialty, edit the queue item — don't remove and re-add. Removal cuts the audit trail.