Skip to content
Writing

Building ClinicalNote

5 September 2026 buildingtools

End-of-day notes were the thing keeping me at work. The dentistry was (mostly) done by five; the writing-up wasn’t. So I built the tool I actually wanted, and now I walk out with the notes finished. This is what it is and why it’s built the way it is.

The problem

Notes are repetitive. The same appointment types, phrasing and structure, typed fresh every time at the end of a day when I’ve got the least patience (plus no patients) for it. Every off-the-shelf option I looked at wanted another login or subscription, or wanted patient detail to leave the room and sit on someone else’s server. None of them shaped a note the way I write one.

So the brief was narrow: keep my notes in the same shape every time, get them out of my head fast, and don’t make me trust anyone else with the contents.

What it is

ClinicalNote is a single HTML file. There’s no server, account or install. You open the file in a browser and everything you type stays on your device. That’s the whole privacy model: nothing leaves, because there’s nowhere for it to go. It works offline, and it works the same on any machine I open it on.

That sounds basic. It’s the point. The less infrastructure a tool has, the less there is to break, to pay for, or to explain to a compliance team.

The part I care about most

It’s built to be changed. Paste the file into Claude and ask it to add a tab, change your default text, or reskin it. No coding. It’s yours to bend to your own workflow, which is how I think clinical software should work. Most tools make you fit their shape. This one fits mine, and it can fit yours differently.

The AI layer

There’s an optional AI layer for drafting referral letters and filling procedure blocks, but it’s an add-on, not the engine. ClinicalNote works fully without it. If you want it, it runs on your own API key, and the request is built only from the clinical fields, never the patient’s name or date of birth. As a backstop it strips identifiers that creep into free text before anything sends.

I’ll say the honest version: that’s a backstop, not a guarantee. You still shouldn’t type patient identifiers into the clinical fields. AI is a convenience bolted onto a tool that stands on its own. I’d rather it be useful and boring than clever and risky.

Why I’m sharing it

It’s the tool I use between patients, and it costs me nothing to give away. If it saves another dentist the 5pm backlog, that’s a good trade.

It’s free. Take a copy.