A product design story · 2026

The first tile · this page assembles a mosaic as you read

Mosaicthe Accreditation Companion

You see yourself becoming a coach.

A companion that turns a bureaucratic coaching credential into something you can watch yourself grow into, one session at a time.

Home screen: a growing ceramic mosaic labeled Who You’re Becoming on indigo silk, beside today’s intention and the card of the day on cream. 1 2 3
  1. 1 The mosaic, grown from your name and your practice.
  2. 2 The File % lives in its own ring, apart from the mosaic.
  3. 3 The daily ritual: an intention and one reflective card.

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.

energy the low point energy thinnest, work heaviest Classes First clients Hours pile up The File panic File submitted

My own year in the program, drawn honestly. A tool for this road earns its place at the low point, or nowhere.

The welcome tour on a first launch: a warm six-step overlay above the Home screen, which previews a grown coach’s demo state.

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.

generalist accreditation-native business ops personal becoming Enterprise coachingBetterUp · CoachHub Practice managementCoachAccountable · Simply.Coach Mass wellnessHeadspace · Calm LMS / courses Journaling apps quiet for a reason: there’s no business to run before the credential exists Mosaic the empty corner

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.

Reduce the two fears, and you create value. Amplify them with density or pressure, and you work against the product.

What “accreditation-native” means

PRACTICE Client Loghours · clients Supervisiongroup hours Mentoring1:1 hours Peer grouppeer hours REFLECTION & ATTENDANCE Reflectionnotes · a set mix Attendanceminimum days Signed clientfeedback forms MODEL & ASSESSMENT Coachingmodel essay Live 30-minevaluation IDs, CV,exam

Twelve documents, eight competency areas, thirty indicators, exact thresholds: encoded, not translated. That domain knowledge is the moat.

Progress screen: the 12 File documents as a vertical road with per-document progress, a 38% summary ring, and a visible 1 October deadline. 1 2 3
  1. 1 One honest number: the File %, computed from the entries themselves.
  2. 2 The deadline sits in the corner, in view and out of the way.
  3. 3 The 12 documents as a road of stations: start anywhere; everything grows in parallel.
Detail, actual size: the summary band reading You’re at 38% of the file, with the File deadline chip on the right.

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.

The one rule that governs everything after: mosaic ≠ File. The soul and the accounting never share a surface.

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.

Empty mosaic: the invitation state, no shards drawn at all.

Nothing yet, only the invitation to begin.

A grown mosaic on mobile Home, thirty-one shards around a golden heart.

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 itself, from v153: a small pill reading 5 days in a row.

    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.

Close-up of the shipped mosaic: irregular ceramic shards in violet, gold, cream and deep teal, edged in gold, around a golden heart.

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

Emerald · done Gold · active Garnet · destructive only Orchid · yours Lila · practice Azulejo · mosaic ceramic,never a status

Garnet only ever means “this deletes.” One color, one job.

The Emotions and the Wheel of Emotions tool, opened in the Atelier: a radial wheel with seven families and three rings of emotions, with the prompt How do you feel? Pick a family.

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

Atelier: 39 coaching tools grouped by process phase, with search, favorites and a read counter.

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

Detail: two tool cards crediting their sources: after Alain Cardon, and Otto Scharmer.

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

The Atelier on mobile: search, category filter, favorites, and the same credited tool cards.

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.

Live session cockpit: a timer, the client, a searchable tool list, and a notebook of lines classified as belief, emotion, value, question, tool and action. 1 2 3 4
  1. 1 A resilient timer: the session survives even a reload.
  2. 2 Write a line; one tap classifies it: belief, emotion, value, question.
  3. 3 A tool you use drops a golden line, right in the thread.
  4. 4 The classify row: one tap, no menus, so the client never waits.
Detail, actual size: seven notebook lines: a plain note, a belief in quotes, an emotion, a value, a question, a golden tool line, and an action.

A line per thought, each with its colored dot, written while the client is speaking, without leaving the conversation.

Where one session goes

▶ Live sessionthe cockpit above Saved to the logalready structured The File Export ↧ 1 · hourstoward the quota 2 · tools usedfeed Atelier stats 3 · discoveriesthe session record 4 · actionsnext steps, kept 5 · reflectionwhat I’d improve

swipe the flow →

End the session and it lands in the log. Nothing gets typed twice; the cockpit is a door into the File.

The exported File document: the official numbered order: personal documents, CV, the course attendance list as a table, and the Client Log with initials, hours and topics.

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

Mobile Progress: the File card with a completion ring, counters, and the visible deadline.

Dated stops: the calendar and deadline, shown plainly.

Mobile attendance stop: 8 of 12 days, module dots, and an Open list button, ticked by hand.

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

Clients master-detail: a list of clients by initials, and a selected client’s session thread with dates, goals and tool chips.

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.

Desktop Home with no name and no steps: the mosaic area shows only an invitation; nothing is drawn.

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.

I refused to auto-create the reflection note. The official notes have a required shape; faking one would poison the single thing this product sells.
A date passed Fixed event? → auto-mark ✓ module, deadline Personal work? → never 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 reflection room on mobile: an indigo header with the note's title, then the four F chapters with prompts folded and space to write.

The same room, in a pocket.

The reflection room on desktop: date, event and topic fields, then Facts, Feelings, Findings and Future chapters strung on a single golden thread.

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

The official composition tracker: each required note type (client sessions, supervision or feedback, book review) with its own progress.

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.

Beforeprezentă: “present,” in a form that assumes the user’s gender
Afterai participat · you attended: the fact, for anyone

The product is for anyone. A voice check now guards this on each release.

Detail: Module I with dates 29–31 January and three day toggles, each reading you attended.

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

Home in v145: a six-petal progress flower with a pillar legend: data first, identity as a subtitle.

Progress led: a beautiful flower-wheel, still a dashboard about numbers.

v153 · 2 July · identity arrives

Home in v153: the mosaic takes an indigo identity card on the left; a streak chip reading 5 days in a row sits at the top right.

The mosaic takes the left column; the streak chip is twelve days from being pulled.

v201 · 7 July · the diptych

Home in v201: identity column with the mosaic on the left, intention and card of the day on the right; the streak chip is gone.

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:

Attackpoison the saved state: point the daily card’s index past the end of the deck, then reload
Defenseboot now validates every stored value against what consumes it; an impossible index falls back to a safe one instead of taking the app down

No ordinary use produces that state; that is the point. Below, the attack itself, reproduced.

v233 booting with the poisoned save: a completely blank cream screen; nothing renders.

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

v234 booting with the exact same poisoned save: the Home screen renders normally, mosaic and all.

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

Profile: the name that seeds the mosaic, the story of the shards, and the on-device data promise.

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.