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


