← All work

F02Delivered to a dental clinic · 2026

ClinicHub

A bilingual Arabic/English clinic management system: patient records, appointments, invoicing with a double-entry ledger, role-based access and automated off-site backups. Handed over with a cutover runbook and an Arabic staff guide.

The demo runs the same code as the clinic's production system, on a made-up clinic with a full month of activity, reset every hour. Sign in with one click as admin, reception or accountant (password demo).

ClinicHub's Arabic dashboard in the public demo, signed in as the demo accountant: the day's takings, nine appointments, stock alerts and a day grid by treatment room
In production
megadental.m-ashraf.com, the clinic's own system, staff sign-in only
My role
Built and delivered it: requirements with the staff, data migration, deployment and documentation
Users
Reception, accountant and admin, each with their own permissions
Stack
Python, Flask, SQLite, Waitress, Caddy for HTTPS
How it was built
AI-assisted, then validated against the clinic's real exported dataset (2,247 records)

The brief

The clinic was paying a monthly subscription for a hosted clinic system and wanted its own, without retraining anyone. So ClinicHub keeps the words reception already used: the same appointment statuses and colours, the same room names, Arabic first with an English toggle. Only the layout is new.

What it does

Reception

Find a patient by name, phone or file number. Book appointments by day, with a warning before anything is double-booked. Print receipts in Arabic or English.

Accounts

Invoices, payments, refunds and transfers between cash boxes. Every money movement posts its double-entry journal lines automatically, in the accountant's own chart of accounts, through to a trial balance, income statement and balance sheet.

Admin

Users and roles (reception can't open the finance pages), an audit log, inventory with low-stock and expiry alerts, and per-doctor commission tracking.

How it's put together

One Flask application on the Waitress server, behind Caddy for HTTPS. Everything lives in a single SQLite database, which keeps backups and moves simple.

  • CSRF protection on every form, login rate-limiting and 12-hour sessions.
  • A restore point on every start, a nightly server snapshot, and a daily off-site copy.
  • An audit log of who changed what.

Moving the data

The clinic's full history came out of the old system as spreadsheet exports. The export tool sometimes served a cached copy of the wrong page, so I hash-checked every chunk and verified the row ranges before merging. Then I migrated everything into SQLite and reconciled the ledger with the clinic's real cash and bank balances.

ClinicHub architecture Reception, accounts and admin users reach the app over HTTPS. One Flask application on Waitress stores everything in a single SQLite database, protected by a restore point on every start, a nightly server snapshot and a daily off-site copy. Reception Accounts Admin HTTPS ClinicHub · Flask on Waitress, behind Caddy roles · CSRF · audit log SQLite patients · visits · money · ledger On start restore point Nightly server snapshot Daily off-site copy
Dashed lines are the three backup layers.

Handover

Software that the staff can't use isn't delivered. ClinicHub was handed over with a cutover runbook (how to switch over on day one) and a step-by-step Arabic guide written for someone using it for the first time.

First page of the Arabic ClinicHub staff guide: signing in, the buttons at the top of every page, and searching for a patient
The first page of the staff guide: signing in, the buttons on every page, and finding a patient. No patient data appears anywhere on this page.

What's next

A week-view calendar for appointments, prescriptions and quotations are the next features on the list.

Live demo

Run the clinic for an hour

A made-up clinic with a month of activity: patients, appointments, invoices, stock, lab orders and a balanced ledger. Take a payment as reception, then confirm it as the accountant and watch the treasury and the double-entry ledger update.

Admin
admin / demo · everything, including the audit log
Reception
reception / demo · appointments, patients and payments
Accountant
accountant / demo · invoices, payment confirmations, the ledger, stock and labs
Open the live demo ↗