01 The wall nobody warns you about
People don’t get stuck at the coaching.
They get stuck at the paperwork.
Accreditation is a real credential, earned in an EMCC-aligned program: twelve documents in a fixed order, a quota of practice hours, an essay, an exam, one deadline.
The coaching is the part people are good at. The File is where the hours scatter across notebooks, the reflections get postponed, and the dread sets in.
Fear one · the clock
“Will I gather it all in time?”
A date that doesn’t move.
Fear two · the mirror
“Am I becoming the coach I need to be?”
The one no spreadsheet has ever answered.
My own year in the program, drawn honestly. A tool for this road earns its place at the low point, or nowhere.

Where everyone starts: a welcome tour. One trick, named TOUR_DEMO in the code: the tour borrows a grown coach’s state, so the road ahead is visible before yours begins.
So what already exists for this?
02 A gap shaped like one person
First I went looking for the tool that surely already existed for this. It doesn’t.
The competitor was never one of these. It was a free spreadsheet and a group chat, and nothing anywhere was built around an accreditation.
One person, the whole time
A coach-in-training partway through a serious program, phone-first, allergic to cold corporate tools and to gamified confetti alike.
The evening I designed for: the session ends at 21:40, the note is “for later,” and the File is 76 days away.
What “accreditation-native” means
Twelve documents, eight competency areas, thirty indicators, exact thresholds: encoded, not translated. That domain knowledge is the moat.
1
2
3
- 1 One honest number: the File %, computed from the entries themselves.
- 2 The deadline sits in the corner, in view and out of the way.
- 3 The 12 documents as a road of stations: start anywhere; everything grows in parallel.

The same band, at reading size: the whole road in one line. Nothing blinks, nothing scolds.
The corner is empty. What belongs in it?
03 The bet
What if progress didn’t feel like a checklist, but like a portrait of who you’re becoming?
The centerpiece is a mosaic of broken ceramic, a trencadís, grown from practice, one shard at a time.
The name sets the pattern. Each session adds a colored piece. You don’t fill a bar; you assemble a self.
Filmed from the shipped build, seeded one step at a time: first a session, then a note, then an hour of supervision. One step, one shard; the counter is the app’s own.

Nothing yet, only the invitation to begin.

Thirty-one shards later: the same person, visible.
It grows without a ceiling. There is no “complete”; only more of you.
A metaphor is cheap. What makes this one structural?
04 The shapes I broke
A good idea on a slide. A terrible design in practice, at first.
Trencadís means the act of breaking. Fitting, because the metaphor only survived by breaking the wrong versions of it.
-
✕ Rejected as centerpiece
The percentage
The ring survives for the File math, but as the centerpiece it fed the very clock-fear the product tries to calm.
-
✕ Rejected on sight
Auto-filled shards
A starter mosaic drawn from nothing: a self you didn’t earn. One render was enough.
-
✕ Shipped, then unshipped
The streak
Shipped in v153, pulled by v185. A chain you can break is pressure; what stayed is a plain count of days with the ritual.

The chip, from v153: twelve days from ship to unship.
-
✓ Kept
Name-born, practice-grown
Causal, or nothing: one piece of practice equals one shard, and the name seeds the pattern. The mosaic can only say something true.
I thought
a percentage would motivate.
But it
whispered “you’re behind”, the exact feeling I was trying to dissolve.
So I
split soul from accounting. Numbers stay honest; identity stays warm.

What survived, up close: the shipped Home. Each shard stands for something that actually happened; the gold heart is the name.
The metaphor held. Could a whole interface speak it?
05 Silk & filigree
One system, two temperatures: indigo silk for identity, cream parchment for the work. Built to escape the generic coaching-app look.
Type carries it
You build yourself from shards.
Cormorant Garamond: display, italic, the voice.
Hi, Alex — almost there — 1 attendance day left to tick.
Jost: UI and data. The greeting above is lifted verbatim from the Home header; both faces are self-hosted.
Color is an API, not decoration
Garnet only ever means “this deletes.” One color, one job.

The palette at full stretch: the emotion wheel, opened in the Atelier. Seven families, three rings, about eighty emotions, one question at the center.

The system at work: the Atelier of 39 tools from the program’s manuals, grouped by process phase.

Each tool is credited exactly as the manuals cite it: Cardon, Scharmer, Rosenberg, Whitmore.

The Atelier, pocket-size: same tools, same credits.
A beautiful shelf is still a shelf. Where does the work happen?
06 One fact, everywhere
Write a session once. It becomes five things.
1
2
3
4
- 1 A resilient timer: the session survives even a reload.
- 2 Write a line; one tap classifies it: belief, emotion, value, question.
- 3 A tool you use drops a golden line, right in the thread.
- 4 The classify row: one tap, no menus, so the client never waits.

A line per thought, each with its colored dot, written while the client is speaking, without leaving the conversation.
Where one session goes
swipe the flow →
End the session and it lands in the log. Nothing gets typed twice; the cockpit is a door into the File.

And what comes out of that door: the exported File itself. Each row filled from what was written once; initials only; totals derived.

Dated stops: the calendar and deadline, shown plainly.

Personal stops: ticked by hand, never by the calendar.

Clients, one ledger
Initials only: data minimization as the default. Each session carries its date, goal and the tools actually used. The client record is the single source of truth for the feedback requirement.
And phone-first on purpose: sessions happen in rooms and on calls, rarely at a desk.
07 The rules I wouldn’t break
A product about honesty has to stay honest when it’s inconvenient.

The strictest state in the product, on the biggest screen.
Zero means zero
With no name and no steps taken, the mosaic does not draw, anywhere. No starter shards, no simulated identity; only the invitation.
The rule lives in the render path: an empty name yields zero shards, not a decorative minimum.
Honest by construction
A date passing doesn’t mean the work happened. So dated events auto-mark; personal work never does; you tick it yourself.
A room of its own for reflection
The official reflection notes are the heart of the File, and the one thing I refused to automate. So writing one isn’t a form; it’s a full screen: Facts, Feelings, Findings, Future, prompts folded away until you ask, a draft that keeps itself.
The header says what the manual asks: ~700–800 words, first person. In the corner: “saves by itself.”

The same room, in a pocket.

The four F chapters on one golden thread. The room writes nothing for you; it holds the shape the credential requires.

The stop panel knows the credential’s required mix and still leaves every word to you.
Integrity, in motion
Late in the process, an adversarial review caught the app labeling the user with a gendered word, an easy slip in Romanian grammar. The fix shipped the same day.
The product is for anyone. A voice check now guards this on each release.

The label, today.
08 What 235 versions taught me
235
versions · six weeks · one file
I don’t hand-write production code. I specified, the AI built, I reviewed real pixels, I QA’d, and I redirected: version after version, each one a complete, shippable HTML file. Here is the same Home screen, three ages apart.
v145 · late June · the dashboard era

Progress led: a beautiful flower-wheel, still a dashboard about numbers.
v153 · 2 July · identity arrives

The mosaic takes the left column; the streak chip is twelve days from being pulled.
v201 · 7 July · the diptych

Identity | intention. The streak is gone; a plain “days with the ritual” count replaced it.
v235 · the current build
The version at the top of this page: annotated, one review gate from production. v234 is live today.
Between these frames: a security audit, an adversarial QA program, and a hundred smaller decisions.
The road: every version, one tile
- v1 a plain tracker
- v48 Silk & Filigree
- v63 EMCC alignment
- v88 the daily ritual
- v152 desktop-native
- v201 the home diptych
- v217 zero means zero
- v226 security + adversarial QA
- v235 “you attended”
Versioned by name, never overwritten. Each tile passed the same automated gate before it deployed, and the later ones something harsher. Below, what that actually means.
QA: shown, not claimed
The smoke gate is concrete: the whole file boots in a headless browser, a seeded profile walks every screen, a client is created through the real form, the app resets through its own dialog. Fourteen assertions; one red, and the deploy script refuses to publish. The output for the current build, translated from the Romanian it runs in:
$ npm run smoke --- TESTS v122 --- ✓ CSS parsed (>200 rules) ✓ :root present ✓ not onboarding (storage seeded) ✓ Home: greeting with the name “Ines” ✓ Home mosaic drawn ✓ nav, 5 zones ✓ language EN (“Home”) ✓ navigate Progress ✓ navigate Clients ✓ navigate Atelier ✓ navigate Profile ✓ client added T.E. ✓ reset cleared clients ✓ zero runtime errors Result: 14 passed, 0 failed
The gate is only the floor: a separate risk-based program runs ~205 automated cases across a dozen suites, plus ~200 fuzzed boots and ten visual goldens. The suite itself is tested: mutation kill-rate 100%.
One adversarial round, end to end
Above the gate sits an adversarial review: an independent pass with one mandate, prove the fix wrong, with a runnable proof. On the last hardening batch, self-review had declared the work done. The adversarial pass found five gaps. All five shipped fixed. The worst one:
No ordinary use produces that state; that is the point. Below, the attack itself, reproduced.

v233, the last vulnerable build: the attack lands. Nothing renders.

v234, one version later: the same save, gated. Home simply renders.
The proof, reproduced for this page: one poisoned save, two builds recovered from git, identical seeds.
On honesty
It’s a design system: most decisions were about not showing things.
On metaphor
It only works if it’s structural. Otherwise it’s wallpaper.
On voice
Cheaper than UI, and it changes more. Reframing language moved the whole feel.
Told honestly
A web preview, not a native app. Data lives on the device; the seam for a real backend already exists in the code. GDPR at scale is named openly as a gate. The limits are on the page, not under it.
And where it stands, told the same way: live, in daily use by the person it was built for. My clients and my hours live in it; my File walks toward an October deadline. What it still needs is proof from beyond me, other people’s Files. That pilot is the road ahead.
09 The whole, from broken pieces

The story, told back
The Profile is where the product says it plainly: this pattern came from your name; these shards came from your practice; the data stays on your device.
You don’t finish with a File.
You finish able to see who you’ve become.
Mosaic, the Accreditation Companion: becoming, made visible.