Skip to content
Ali Hassan — home

Work

Clinic management SaaS

One system for beauty and cosmetic clinics across several locations: bookings, patient records, practitioner consents, stock and reports, live in production.

Role
Full-stack engineer
Status
Live in production
Client
Beauty and cosmetic clinics
  • React
  • Node.js
  • MongoDB
  • AWS
  • Twilio SMS
View live
Clinical treatment options, practitioner consents and report exports from a multi-location clinic management system.

The problem

Context
Beauty and cosmetic clinic chains run several locations under one brand. Each location books treatments, keeps patient records and holds its own stock, while the chain sets the treatments, paperwork and products every location uses. The system includes a staff app and a public online-booking site over one API.
Constraints
Many cosmetic treatments use prescription-only injectables, so each treatment has to be tied to a prescribing practitioner's authority and the patient's consent, under Australian healthcare-identifier rules. Stock is regulated medicine that expires and can be recalled, and it moves between locations.
What was at stake
The system is live in clinics treating real patients. A missing or expired consent, or medicine used past its expiry, is a clinical and regulatory failure, and patient records are sensitive health data.

What I built

Multi-location model

  • Chain-level settings, location-level operations

    Treatments, consent and medical-history templates, products and payment types are set once for the chain and shared by every location, while each location keeps its own hours, address and stock. A new location starts with the chain's paperwork.

  • Patients across locations

    A patient can belong to several locations, with a credit balance and payment log, and every view of their record is logged with who opened it and when.

Stock control

  • Batches tracked to expiry

    Stock is tracked per batch and location, with received and expiry dates, balance, and a status that can be in stock, out, expired or recalled.

  • A full trail for every unit

    Every use, reversal, status change and transfer between locations is logged with the user, the patient and the booking, so any dose can be traced.

  • Expiry handled automatically

    Scheduled jobs mark expired batches, consents and medical histories, so expired items stop being offered without anyone remembering to check.

Consent and prescribing

  • Practitioner consents tied to protocols

    Each practitioner consent links the patient, location, prescribing practitioner, treatment protocol and script, with its own expiry date and signature, so treatment can only follow a valid authority.

  • Signed, expiring patient paperwork

    Consent forms and medical histories are generated as signed PDFs from the chain's templates and expire on schedule.

  • Healthcare-identifier integration

    Practitioners' national healthcare identifiers are verified through a signed SOAP integration with the Australian healthcare-identifier service.

Operations

  • Automatic reminders and follow-ups

    Booking reminders and treatment follow-ups go out by SMS and email on schedule, with marketing opt-outs respected, and only one server instance sends them so nobody gets duplicates.

  • Reports and practitioner payouts

    Reports export to CSV, and practitioner payouts can be exported as bank direct-entry files, guarded so the same day's file is never generated twice.

  • Roles that match clinic work

    Nurses, dermal therapists and doctors each have their own roles, with administrator variants, rather than one generic staff role.

Tell me what you’re building and where it’s stuck.

I’ll tell you the cleanest path forward, including if it’s “don’t build that.”

Or write tocontact@alihassan.dev

Ali Hassan in a dark winter jacket, looking off to one side, standing in a stone courtyard with a minaret and cloudy sky behind him.