Dentacares
All Projects
Full-Stack 2026 ongoing 1 engineers

Dentacares

A full dental clinic SaaS I built solo — multi-tenant NestJS backend, React 19 web app, mobile, and an Electron tray app that auto-imports X-rays. Multi-session billing, insurance claims, queues, and real-time chat, all held together end-to-end.

Live Site
Scroll to read
Category
Full-Stack
Year
2026
Duration
ongoing
Team
1 engineers
01 — Overview
01

Built and shipped Dentacares end-to-end — a multi-tenant dental clinic SaaS with 56 backend modules, a React 19 web app, a mobile app, and a desktop companion. The kind of project where the hard part isn't any single feature, it's keeping them all coherent

02

Designed the multi-session treatment billing engine — splitting a treatment plan's cost across sessions, locking session costs at plan creation, and reserving them against appointments so money couldn't drift between what was quoted and what was charged. Rounding edge cases ate more time than the happy path

03

Wrote the insurance layer from scratch: companies, plans, per-procedure pricing, patient coverage, and claim lifecycle. Pricing had to fall back cleanly across plan → company → list price without surprising anyone at the front desk

04

Built an Electron Windows tray app that watches the X-ray sensor's output folder with chokidar and auto-uploads new scans to the right patient and reservation — no manual import step, which is exactly the friction clinics hate

05

Stood up the infra side too: Redis-backed Bull queues for CSV imports (patients, invoices, expenses), Socket.IO gateways for live chat and notifications, and Sentry + Prometheus so I could actually see what production was doing instead of guessing

02 — The Problem
01

Clinics were running on a patchwork of spreadsheets, paper, and separate tools that didn't talk to each other — billing in one place, the patient chart in another, X-rays on a sensor's local disk

02

Multi-session treatments had no honest way to split cost across visits, so what a patient was quoted and what they were eventually charged would quietly diverge

03

Insurance was manual and error-prone: no structured plans, no per-procedure pricing, no claim tracking

04

Importing X-rays meant a staff member manually finding the file and attaching it to the right patient — slow, and easy to attach to the wrong one

05

Bulk data (patients, invoices, expenses) had to be entered by hand because there was no import path

03 — The Solution
01

Built a multi-tenant NestJS backend (56 modules) with branch/organization scoping threaded through everything, serving a React 19 web app, a mobile app, and an Electron desktop tool from one API

02

Designed the billing engine to lock per-session cost at plan creation and reserve it against reservations, with splitEqually() handling the rounding so totals always reconcile to the cent

03

Modeled insurance as companies → plans → per-procedure prices → patient coverage → claims, with pricing that falls back across layers predictably

04

Wrote an Electron tray app that watches the sensor folder with chokidar and posts new scans straight to the matching patient and reservation — the import step just disappears

05

Added Redis-backed Bull queues for CSV imports with background processing, Socket.IO gateways for live chat and notifications, and wired Sentry + Prometheus so failures and latency are visible instead of inferred

04 — Key Outcomes
01

56-module NestJS backend powering web, mobile, and a desktop importer from one API||Multi-session billing engine with session-cost locking and reservation reservations — quoted cost and charged cost stay in sync||Full insurance stack: companies, plans, per-procedure pricing, coverage, and claims with clean price fallback||Electron tray app auto-imports X-rays to the correct patient + reservation with zero manual steps||Redis/Bull import queues, Socket.IO real-time chat & notifications, Sentry + Prometheus observability in production

05 — Gallery
Dentacares — screenshot 1
Expand
01 / 07
Dentacares — screenshot 2
Expand
02 / 07
Dentacares — screenshot 3
Expand
03 / 07
Dentacares — screenshot 4
Expand
04 / 07
Dentacares — screenshot 5
Expand
05 / 07
Dentacares — screenshot 6
Expand
06 / 07
Dentacares — screenshot 7
Expand
07 / 07