Skip to content
TF
All projects
In progress2026

Cairn

A phase shell for client engagements, where every phase has one gate written as an observable fact rather than a feeling.

PythonSQLiteHTML

The previous version of this workflow was markdown files and chat transcripts. Both are write-once. There was nowhere to enter anything, so every engagement accumulated documents until the index page needed its own index page, and no two sessions agreed on what the price was or what the terms said.

Cairn inverts it. The database holds what you typed, and documents are rendered out of it on demand and never read back in, so a fact lives in exactly one place. A website build and an AI consulting job walk the same numbered path, and each phase carries a purpose, a gate, the questions you fill in, and what exists afterwards that did not before.

The gate is the part I would defend. It has to be an observable fact. "Signature and deposit cleared" is a gate. "Agreement looks good" is not, because every soft gate gets waved through on a Friday.

Two documents rather than one, as well. The FRD is long and keeps changing during the build; the agreement is two pages, references the FRD by version number, and freezes the moment it is signed. Conflating them leaves you with no defensible line for a change order.

Details worth knowing

  • 01Standard library Python with no build step, because this gets opened on a laptop in front of a client and anything with a build eventually fails to start on the one morning it matters.
  • 02Every phase is reachable in both directions, since the common case is remembering something three phases back and needing to fix it without unwinding everything in between.
  • 03Self review is its own phase, deliberately separate from discovery, so the step that produces the value proposition cannot be quietly skipped when a meeting overruns.
  • 04Notes autosave on blur, on unload and on Cmd+S, because the failure that actually happens is closing a laptop mid-sentence.
  • 05Phase questions come from field notes written before the app existed, rather than being invented to fill a form.