Healthcare · 2026
Clinic management system for physiotherapy and slimming
Dr. Mohab’s clinic treats clients in two sections, physiotherapy and slimming, with one reception, a set of treatment devices and one cashbox. We built the system its staff work in all day: each client’s file, the day’s bookings by hour, packages paid in parts, the money that comes in and goes out, and the stock of supplies. It is in Arabic from the first screen, and it runs on the clinic’s own server.
Built by
- Client
- Withheld at the client’s request
- Timeline
- April – July 2026
- Squad
- 1 engineer, start to finish
- Platform
- Web · Arabic, right to left
- Sections
- Physiotherapy and slimming
- Size
- 35 models · 158 routes · 86 permissions
- Status
- Delivered
Technologies
- Laravel 10
- PHP 8.2
- MySQL
- Blade
- jQuery
- Bootstrap 4 RTL
- Chart.js
- Spatie Permission
- SweetAlert2
- Select2
The product
7 images01
Brief
Two clinical sections, one reception, one cashbox.
Context
The clinic treats physiotherapy and slimming clients. Both sections share the reception, the treatment devices, the stock and the cashbox, but each has its own kind of file, visit and follow-up.
What had to be managed
A client can be in either section or both, pays for a package in parts and by four methods, books sessions on devices that have hourly limits, and uses supplies the clinic has to reorder. Each section’s staff should work on their own part.
Goals
- One file for each client in each section
- Bookings by the hour that know every device’s limit
- Packages, offers and payments in parts
- A cashbox and a daily sheet that agree
- Supplies with low-stock alerts
- Permissions by section, edited by the owner
02
Team
One engineer, from the first screen to the handover.
| Lead engineerRequirements, the screens, the Laravel system, the permissions, the clinic’s server and the handover | ×1 | Requirements, the screens, the Laravel system, the permissions, the clinic’s server and the handover | Senior |
|---|
03
UI/UX design
A licensed Arabic theme, made the clinic’s own.
Who worked on it
We started from a licensed admin theme with a right-to-left layout and shaped it for the clinic: a sign-in page with the clinic’s logo and image, Cairo for the text, tag colours that mean something, and a menu grouped the way the work is. The day’s bookings and the client file are one click from the menu.
- The clinic’s own sign-inThe sign-in page carries the clinic’s logo and image, so staff meet the clinic’s identity before the system’s.
- Colour that means somethingSections, session types, genders and booking states each have their own tag colour, so a row can be read at a glance.
- A menu that follows the workThe sidebar is grouped the way the clinic works: examinations, slimming, physiotherapy, finance and the system’s own settings.
04
Frontend
Arabic screens a reception desk can use all day.
Who worked on it
The system is a server-rendered Laravel application with Blade pages, built on a licensed admin theme with a right-to-left layout and Cairo for text. The reception works from the day’s bookings laid out by the hour and from a five-step client file; the doctors work from each client’s visits and follow-ups. The physiotherapy case file prints as an A4 page, and every client has a QR page that opens their file.
Decision 1
Server-rendered pages with jQuery, not a single-page app
The system is a set of forms, tables and grids, which server-rendered pages suit. A licensed Arabic theme gave a tested right-to-left layout from the first day.
Trade-off · The busiest pages carry their scripts inline, so they are long files to maintain.
- The day, hour by hourBookings sit on a grid of the working hours. The reception filters them by session type, gender, responsible staff member and phone confirmation, and a postponed booking is dimmed and frees its hour until it is booked again.
- A five-step client fileClient data, subscriptions, payments, the visit log, then a review of the whole file before it is finished.
- Arabic all the wayRight-to-left layouts, Arabic weekday names with the week starting on Saturday, numbers that stay left to right, and drop-downs and alerts that open the right way round.
- Careful with fast fingersA button that saves cannot be pressed twice, a page whose session expired reloads instead of failing, and an upload shows its progress.
- On paper and by phoneThe physiotherapy case file prints as one A4 page, and a client’s QR page opens their file for whoever is signed in.
05
Backend & architecture
Packages, devices and money that add up.
Who worked on it
The back end is one Laravel 10 application with its rules in services: booking, availability, payments, orders, the cashbox, stock and attendance. A client’s packages are subscriptions, built from offers or from a company contract’s prices. Each payment is recorded inside a transaction that locks the subscription, and the cashbox is a ledger of every amount in and out with where it came from. Stock moves the same way: every change is a movement with its signed quantity and the quantity after it.
Decision 1
Balances are worked out when they are shown
What a client has paid, still owes and has used is calculated from their payments and visits, so there is no counter that can drift away from them.
Trade-off · Each list does more work per row, so the heaviest pages ask the database more questions.
Decision 2
The hourly limit asks before it refuses
The reception sometimes has to take one more client. The system warns that the hour is full and lets a user with booking rights continue.
Trade-off · It is a house rule and not a lock: a booking made on purpose can pass it.
Decision 3
One client, one file for each section
Physiotherapy and slimming keep their own history, follow-ups and checks for duplicates.
Trade-off · A person who uses both has two files, with their details entered twice.
Decision 4
A contract’s prices are copied into the package
Changing a company’s price later does not change what an existing package cost.
Trade-off · A correction to an old package is made on that package.
Decision 5
A payment is all or nothing
A payment split across cash, card and wallet is recorded in one transaction that locks the package, so two payments cannot both fill the same balance.
Trade-off · If one part fails the whole payment is cancelled, and it is entered again.
- 86 permissions, edited by the ownerPermissions are per action and per clinical section, with three roles to start from: super admin, admin and employee. The owner changes them in a permission matrix.
- Devices have limitsA device can be limited per hour and weekday, and per client; a company contract prices each device, and a client under an active contract is billed at that rate.
- Offers that carry their visitsA slimming package copies its visit template into pending visits when it is given to a client, so the programme is laid out from the first day.
- Money that is not counted twiceA payment recorded on the daily sheet is not entered in the cashbox a second time.
- Stock with alertsSupplies have an alert level. An item under it shows on the sidebar, the bell and the dashboard, and an analytics page shows what each department consumed.
06
DevOps
On the clinic’s own server, for the clinic’s staff.
Who worked on it
We set up the clinic’s own server and installed the system on it, so the clinic keeps control of its clients’ data. It is an internal system for the clinic’s staff, so this page gives no link to it.
07
Outcome
Finished and handed over to the clinic.
The system was finished and delivered to the clinic in 2026: the screens, roles, offers, devices and stock described above, for the clinic’s staff to work in.
Tell us what you’re building.
A short message is enough. A senior engineer replies within 1 working day.
