Skip to content
ARZ Labs

Work / ClinoDesk

ClinoDesk

In production with paying clinics

Multi-tenant practice management for dental clinics: patients, appointments, tooth-by-tooth charting, billing, inventory and lab work in one application — Arabic and English, on phone, tablet, desktop and web. Built for the small independent clinic priced out of hospital-grade software.

1,768

Blocking Flutter tests

23

Feature modules

36

Screens

5

Platform targets

1,419

Localized keys, AR + EN

Clinic dashboard — Arabic interface, sample data only.

The problem

A small clinic runs on a doctor, a secretary and a paper diary. Appointments live in a notebook, balances in the doctor's head, X-rays on WhatsApp. Hospital-grade practice software is priced for hospitals — and almost none of it treats Arabic as a first language. ClinoDesk gives each clinic its own isolated system that the front desk can actually run.

What it does

Clinical record

Patient registry, medical flags, per-visit history, the interactive tooth chart, treatment records and clinical imaging.

Scheduling

Calendar booking, a clinic dashboard and four derived work lists — follow-ups, overdue, tasks.

Money

Per-procedure price list, payments against visits, patient balances, clinic costs, revenue and procedure-mix reporting.

Supply chain & lab

Inventory with reorder thresholds, multi-supplier sourcing, lab orders tracked sent → returned.

Practice admin

Four staff roles, clinic settings and timezone, subscription and licensing, platform-owner console.

Arabic + English

1,419 keys maintained in both languages, right-to-left from the locale — not a translation layer.

Engineering notes

A database per clinic

Each tenant is a physically separate PostgreSQL database, not a shared table with a tenant column — and tenant identity comes from verified JWT claims only, never from request input.

The tooth chart is ours

The tooth-by-tooth chart — the thing dentists judge dental software by — is built in-house, wired to treatments and visit history, not licensed from a component vendor.

Cloud-only, by decision

The offline build was deliberately retired so no clinical data rests on a device. Credentials live in the platform keychain; web sessions use HttpOnly cookies with zero JavaScript reach.

Four states, all rendered

Strict MVVM across 27 repositories and 14 view models; every screen models loading, success, empty and error explicitly — enforced by 1,768 tests that block every push.

Compliance & security

Built to HIPAA and GDPR requirements. Not certified — and we say so.

HIPAA compliance is a property of an organisation and its signed agreements, and nobody certifies GDPR compliance at all. So instead of a badge, here is what is actually implemented — each control traceable to a file in the codebase.

  • One physically isolated database per clinic
  • Tenant identity from verified JWT claims only
  • No clinical data at rest on devices
  • Credentials in Keychain / Keystore; HttpOnly cookies on web
  • 15-minute idle auto-logoff, app-wide
  • argon2id password hashing + login rate limiting
  • Role-based access enforced server-side, four roles
  • Session refresh distinguishes revoked from offline
  • Append-only audit log that never stores full PHI
  • Audit records survive account deletion
  • No patient data in application logs
  • TLS + HSTS + hardened headers, verified live; locked CSP

Patient data-rights endpoints — export and erasure — ship as routes, not support tickets.

Stack

Client
Flutter · Riverpod · go_router · dio
Backend
Next.js 16 · TypeScript · Zod
Data
PostgreSQL · Drizzle ORM · one database per clinic
Security
argon2id · secure storage · locked CSP
Hosting
Self-hosted VPS · Docker Compose · Caddy · GitHub Actions

Status: version 1.2.1, in production with paying clinics. Cloud-only by design.

Start a project →