Overview
A web-based appointment and clinical management system built for BodySoul / Windy Mayang (WM) Physiotherapy Center in Kemang, Jakarta. The platform enables patients to book specialized therapy sessions, choose practitioners, and view their treatment schedule, while clinic staff manage therapist availability, room allocations, and patient records.
The Goals
- Digitize patient reservations with automated conflict detection for therapy slots.
- Provide an intuitive self-service portal for selecting therapy types and licensed practitioners.
- Automate appointment reminders and therapist availability scheduling.
The Idea
“BodySoul was handling high-demand therapy bookings manually via phone and chat, causing schedule overlaps and missed session reminders. The goal was to build an intuitive online booking workflow for patients and an operational admin dashboard for managing therapist time slots and room capacity.”
My Role & Responsibility
Full Stack Engineer
- Developed the client-facing booking interface in React with dynamic calendar slot selection.
- Built internal admin dashboard for therapy staff to manage room allocations and therapist rosters.
- Implemented Express.js backend services with MySQL transactional locking to avoid double-bookings.
- Configured automated notification service for session confirmations and reminder alerts.
Tech Stack
Screenshots & UI Showcase
6 captured screens from the live production app

Bodysoul Patient & Member Login
Secure login portal for patients to view upcoming therapy sessions and check booking history.

Bodysoul Clinic Online Booking
Public booking schedule with interactive calendar, outlet selection, therapist slot availability, and checkout.

Physiotherapy Services & Specialist Catalog
Detailed treatment options, certified physiotherapy team bios, and clinical facilities showcase.

Admin Schedule & Booking Manager
Internal dashboard for managing all incoming patient reservations, doctor time slots, and therapy room allocations.

Patient History & Transaction Logs
Record of patient visits, therapy logs, payment receipts, and session package balances.

Clinic Locations & Direct Contact
Location map, opening hours, and direct consultation contact channels.
Project Structure
Patient Portal (React)
Public-facing React web app where patients browse available therapists, select time slots, book sessions, and view upcoming appointments.
Admin Dashboard (React)
Internal React dashboard for clinic staff to manage therapist schedules, view all appointments, handle cancellations/rescheduling, and monitor daily session loads.
Backend API (Node.js / Express)
Express REST API handling appointment CRUD operations, availability calculation logic, collision detection for double-booking prevention, and reminder scheduling.
Notification Service
Scheduled job service that sends automated WhatsApp and email reminders to patients 24 hours and 1 hour before their appointments.
Database (MySQL)
MySQL database storing therapist profiles, appointment records, patient data, and availability slots with transactional integrity to prevent race conditions during booking.
The Process
Mapped outpatient therapy booking stages and identified peak slot reservation patterns.
Structured relational tables for therapist shifts, treatment modalities, and appointment states.
Built the responsive appointment calendar with real-time slot status updates.
Tested high-concurrency booking requests to ensure zero double-booking occurrences.
Key Highlights
- Self-service online booking with real-time slot availability
- Automated WhatsApp & email reminders
- Double-booking prevention with optimistic locking
- Therapist-specific calendar and schedule management
- Session history and patient progress tracking
The Result
The system eliminated booking collisions, decreased administrative scheduling overhead by 40%, and provided patients with a seamless online self-service reservation experience.
Challenges & Solutions
Preventing double-bookings under concurrent requests was the primary challenge. We implemented database-level transactions with row locking to ensure that when two patients attempt to book the same slot simultaneously, only one succeeds and the other receives a graceful error and is redirected to the next available slot.



