PROJECT STUDY

Clinic Queue

Wait nearby. Come in when it is your turn.

A queue and appointment app for Indonesian clinics: bookings and walk-ins in one fair line, live on the waiting-room TV and each patient's phone, with honest wait ranges.

Explore the build
Clinic queue illustration: a waiting-room TV calls ticket A-012 to Ruang 2 and lists the next tickets with initials only, beside a phone that shows the patient's own ticket, place in line and wait range.
Original interface illustration · Synthetic demo data.View larger

At a glance

Industry
Healthcare
Capabilities
7
Technologies
9
Year
2026

The challenge

At Indonesian clinics, patients often wait for hours in a crowded room without knowing when they will be called.

The front desk juggles walk-ins and appointments by hand, doctors run late, and a patient who steps outside can miss their turn.

Clinics want online booking, a live queue on the waiting-room TV and on each patient's phone, honest wait estimates and fewer no-shows, without putting patient details on a public screen.

What we built

Clinic Queue is one installable web app with four views: booking and live status on the patient's phone, a front-desk console, a doctor console and the waiting-room TV.

Bookings and walk-ins in one line

One installation serves many clinics, each with its own doctors, rooms, schedules and slots. Patients book online, walk-ins check in by scanning a QR code at the front desk, and both join the same queue

Bookings and walk-ins in one line

One installation serves many clinics, each with its own doctors, rooms, schedules and slots. Patients book online, walk-ins check in by scanning a QR code at the front desk, and both join the same queue

A fair, explainable order

A booking keeps its priority within a grace window around its time, walk-ins are served first come, first served, and configurable flags such as elderly or urgent move a patient forward with a recorded reason

Consoles for the desk and the doctor

Doctors call the next patient from their console, and staff can recall, skip, transfer a patient to another room, mark a visit done or record a no-show. Every action is written to an audit log of who did what

A TV the whole room can follow

The queue display uses type large enough to read from five metres, then plays a chime and announces each call in Indonesian, such as "Nomor antrean A-012, silakan ke Ruang 2"

Live status on the patient's phone

A signed status link shows the patient's place in line and a wait range. Notifications such as "you are third in line" or "please come to Room 2" are WhatsApp-style messages composed behind a notification adapter, so the delivery provider can change without touching the queue

Overbooking advice from no-show history

No-show rates are tracked per slot type, and each session gets a modest overbooking recommendation for the front desk

Privacy by design

Public screens show only ticket numbers and initials, status links are signed and expire, and every query is scoped to one clinic

How it works

  1. Book or check in

    A patient books a slot from the phone, or arrives as a walk-in and scans the QR code at the front desk. Either way the patient gets a ticket number and a signed link to a live status page.

  2. Every action becomes an event

    Check-ins, calls, recalls, skips, transfers, completions and no-shows are appended to an event log, and a pure reducer derives the queue from it. The same log is the audit trail, and replaying it rebuilds the queue as it stood at any moment.

  3. Live updates over SSE

    The API fans each change out over Server-Sent Events, per clinic and per room, so the TV, both consoles and every patient's status page move as soon as the queue does.

  4. Wait ranges, not minutes

    The estimate comes from each doctor's recent consultation durations, kept as rolling quantiles. The status page shows a range from the median (P50) to the 90th percentile (P90) instead of one falsely precise minute.

Engineering insights

The queue is built so that every place in line can be explained, replayed and tested.

Stack by layer

Frontend
  • React
  • TypeScript
  • Vite
  • PWA
  • Web Speech API
Backend
  • Node.js
  • Hono
  • TypeScript
  • Server-Sent Events
Data
  • SQLite
Infrastructure
  • fast-check
  • Biome
  1. The queue is a pure fold over events

    Every queue action is stored as an event, and the queue state is derived rather than updated in place. Because the reducer is pure, replaying the same events always yields the same queue, so the audit log doubles as a way to rebuild any past state

  2. Invariants hold under random sequences

    Property tests built with fast-check generate random sequences of queue actions and check that no ticket appears twice, that every ticket ends in exactly one terminal state and that the ordering policy holds

  3. Tenancy in every query

    Storage sits behind a thin repository layer over SQLite with migrations, and every query in it is scoped by clinic. Tests check that one clinic can never read another clinic's data

  4. Links that expire

    A patient's status page opens from a signed token with an expiry rather than a guessable ID, and tests cover both the signing and the expiry

  5. Overbooking advised, never imposed

    No-show rates are tracked per slot type rather than per patient. A newsvendor-style calculation, which weighs an idle slot against an overfull session, recommends a modest number of extra bookings, and the front desk decides whether to use them

Design system

Calm care is a reassuring, legible design language for anxious and often elderly patients, who read a TV across a crowded waiting room or a phone while they wait outside.

Colour palette

  • Clinic teal#0f766ePrimary actions and links
  • Mist#f0fdfaPage background
  • Ink#134e4aText and headings
  • Coral#e8505bYour turn, and nothing else
  • Amber#b45309Delays
  • White#ffffffCards, panels and other surfaces
  • Colour

    Clinic teal and ink on mist and white keep every screen quiet. Coral appears only when it is your turn, and amber only for delays

  • Typography

    Inter throughout, with ticket numbers in very large tabular numerals, so the board does not shift as A-012 becomes A-013

  • Components

    The TV queue display, the patient status card, the front-desk console and the doctor console are built from one set of design tokens, so a ticket looks the same on every screen

  • Accessibility

    Text contrast is at least 4.5:1 everywhere and 7:1 on the TV, and every call is shown, chimed and spoken, so no patient depends on sight or hearing alone

Where this fits

Clinics, laboratories and other services with walk-in traffic can use the same pattern: one fair line, live status on every screen and no patient details on public displays. Explore our web apps and business systems, see our healthcare work, or talk to us about your clinic.

talk to us about your clinic

Let’s connect the dots

Let's put these ideas to work.

Share a process, product, or problem you want to improve. We will work through the possibilities together.

Discuss your project