Skip to main content

Case study · SaaS / Healthcare scheduling

ShowupOnline booking and WhatsApp reminders for private clinics

Showup is an appointment booking and reminder web app built by DanixSoft for private clinics: patients book online without an account, the clinic runs its schedule per practitioner, and WhatsApp confirmations, reminders and recalls cut no-shows. It handles appointments and communication only, not medical records.

Online booking, a per-practitioner schedule, a patient list with recall dates, and WhatsApp reminders in English or Urdu, for clinics that book by phone and a paper register.

What problem does Showup solve?

Small clinics book by phone and track appointments in a register, so no-shows leave empty slots, staff spend hours confirming by phone, and patients forget follow-ups.

How does Showup work?

A public booking page shows only real free time, computed from working hours, time off and existing bookings, and a database exclusion constraint makes double booking impossible whatever path creates the appointment. Patients manage their booking from a private link, and reminders go out through the clinic's own WhatsApp or, when configured, the WhatsApp Cloud API with replies of 1 or 2 updating the appointment.

What we built

  • A booking page per clinic, embeddable on the clinic's own website
  • A private link for patients to confirm or cancel, with a calendar file
  • Day and week schedules per practitioner with walk-ins, rescheduling and time off
  • A patient list with visit history and next-due recall dates
  • Confirmations, reminders and recalls in English or Urdu, by click-to-chat or the optional WhatsApp Cloud API
  • Owner and staff roles

What is Showup built with?

Application
Next.js 16 (App Router, Server Actions), React 19, TypeScript, Tailwind CSS v4
Data
Supabase Postgres with row-level security and Auth
Messaging
WhatsApp click-to-chat, optional WhatsApp Cloud API
Quality
Vitest unit tests and a database rules and isolation check script

Engineering challenges

  • A Postgres exclusion constraint refuses overlapping appointments, so two patients racing for one slot get exactly one winner
  • Public booking functions return availability and the clinic's public details only, never patient data
  • Webhook signatures checked with a timing-safe comparison before any reply updates an appointment
  • Every table scoped to a clinic by row-level security, with cross-clinic consistency triggers

Next step

Have a similar problem to solve?

A free 30-minute discovery call, then a written scope and a fixed-price quote — before you commit to anything.