/// case study 024
AI / ML
Project 024

PracticeSync

A clinic running on two systems pays for it twice: visits live in Practice Fusion, billing and scheduling in SimplePractice, and someone re-keys every patient by hand daily. PracticeSync drives a dedicated Chrome profile — the operator's logins stay put, no passwords stored — reads each visit, decides the appointment from a doctor roster, and creates it under the correct doctor, with a dry-run mode that plans without booking. The operator teaches each screen once by pointing at elements; a visible cursor then narrates every run. The only AI runs on-device via a three-tier fallback (local Gemma via Ollama → Apple Intelligence → deterministic matcher), and every model output is re-validated so the AI can never invent a billing code.

v1.3.6 · CI-built
Release
~4.5k LOC
Code
Client · Shipped
Status
AI / ML
Category
The Problem

What Wasn't Working

A mental-health clinic's visits live in Practice Fusion while billing and scheduling live in SimplePractice, so staff re-key every patient by hand daily — slow, error-prone admin work.

The Solution

How I Fixed It

Playwright drives the operator's own Chrome to read visits, map each to the right doctor and billing codes via on-device AI with deterministic re-validation, and book the coded appointment — narrated by a visible cursor the clinic can watch.

Stack

Technologies Used

Electron 31
Playwright
Node.js
Ollama (Gemma)
Apple Intelligence
electron-builder
Results

Key Outcomes

Shipped to a mental-health practice; v1.3.6 built and published automatically by GitHub Actions
Three-tier on-device AI fallback that structurally cannot invent a billing code
Teach-once selector recording replaces brittle hard-coded selectors
Self-updating distribution: tag → CI builds the .dmg → app hands over the new installer

Want something like this?

Let's build it. I ship fast and I ship clean.