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, in 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

ClinoDesk clinic dashboard in Arabic showing today's appointments, patients seen and cash collected.
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. ClinoDesk gives each clinic its own isolated system that the front desk can actually run, with Arabic as a first-class language and RTL from the locale, not a translation layer bolted on.

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. 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 business associate 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, alongside what is only partly done and what is a disclosed gap rather than an omission. ClinoDesk is sold and operated for clinics outside the United States; we do not currently act as a HIPAA business associate and do not serve US covered entities.

As implemented in ClinoDesk 1.2.1, verified against the codebase on 22 August 2026: 12 implemented, 2 partial, 3 gaps, all three states on this page.

Implemented

  • 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

Partial

  • MFA: TOTP is built end to end and enforced for the platform-owner account, but clinic users have no enrollment entry point yet, so it protects nothing for a doctor or secretary today
  • Retention schedule: the written schedule and a candidate query for it exist; the retention periods still need confirming against dental-records law in each destination jurisdiction

Disclosed gaps

  • Erasure does not drop the tenant database: when a clinic closes, logins die but clinical rows stay on disk pending a manual ops procedure
  • Erasure runs manually, not on a schedule: the script exists, nothing calls it automatically
  • Backups sit outside the erasure path: backups are encrypted, but an erased patient can still persist in an older backup

Patient data-rights endpoints, export and erasure, ship as routes, not support tickets. Erasure has the limits listed above: it does not yet drop the tenant database, it runs manually rather than on a schedule, and it does not reach existing backups. These controls describe how this product was built; they are not a warranty or a contractual commitment. See our terms.

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

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

Talk to us →
Talk to us →