02Patient journey
Castellana Clínica Dental
From symptom to appointment
A rebuilt patient journey for a dental clinic: patients find the treatment matching what they actually feel, and request an appointment without leaving the site. The request form, the clinic's calendar and a purpose-built appointment system share one record, so qualification, confirmations and reminders happen on their own, inside GDPR constraints.
- Role
- Product & Full-stack
- Year
- 2026
- Type
- Patient journey
- Status
- Delivered

Stack
- Next.js
- TypeScript
- Django REST
- PostgreSQL
- Brevo
- Custom booking system
The problem
Patients do not search for implantology. They search for a broken tooth, a pain, a price. The site listed treatments the way the clinic thinks about them, so a visitor had to self-diagnose before finding anything, and then call during opening hours.
Automating that is constrained: a dental enquiry is health data. The system had to qualify and route requests without quietly turning a medical concern into a marketing record.
What I built
01
Treatment discovery
Entry points are written from the patient's symptom and situation rather than the clinical name, each leading to the treatment page and, from there, straight into a request, with no detour through a generic contact page.
02
Request, calendar & appointments
Rather than bolt a booking widget onto the site, the appointment system was built against a Django REST API the clinic owns: the request form, the calendar and the appointment record are one thing, not three that have to be kept in agreement.
A submitted request arrives already qualified, then gets its confirmation, its reminder and a follow-up if it goes cold, sent through Brevo, without anyone re-typing it.
03
Data handling
The flow is built around what it is allowed to keep: explicit consent, a stated retention period, the minimum set of fields, and clinical detail kept out of channels that were never meant to carry it.
Engineering decisions
GDPR-shaped data model
Consent, retention and minimisation are properties of the schema rather than a banner. A field that cannot be justified is not collected in the first place.
Single qualified record
Form, calendar and appointment share one record in Postgres, so a confirmation and a reminder can never disagree about the appointment.
Symptom-first information architecture
Routes are organised by the patient's problem and cross-linked to the clinical treatment, which is also what makes them findable in search.
Outcome
A clinic whose site answers the question the patient actually asked, and turns that answer into a booked appointment without a phone call.