Design round · fictional workspace

A better investing brain, built one decision at a time

The progress page is where MoatBrain makes its own claim checkable. The hard part is not the chart work — it is that the single most natural way to show someone they are improving is a number that goes up, and this page is not allowed one. Not a score, not a grade, not a percentile, not a strength. Growth has to read as accumulation and coverage, on the user's own data, or it does not ship.

Three directions below. They are not three skins — they answer three different questions, and the page can only lead with one. Same workspace, same fixture, same chrome, same rule bar, same exclusion panel: the only variable is the organising structure and the sentence that stands where a score would stand.

Direction 2 · recommended lead

The Calibration Floor →

Am I getting better?

The 2×2 that om_calibration_quadrant already models — what you expected against what you later recorded, with process on the emphasised axis because process is the part you control. The fifth shipped value, insufficient_data, is held outside the grid rather than hidden in it. Below that, your stated confidence plotted against your own recorded outcomes.

StrengthStructurally cannot be collapsed into a rating. Average the four cells and you destroy the only thing the matrix knows.
CostNeeds resolved pairs. A five-month-old workspace has nine, and a new one has none.
ConditionOnly correct as the lead if the empty state is designed as a real screen.
Direction 3

The Spine →

What have I built?

Chronological, one decision at a time, exactly as the tagline says. Each entry carries what you recorded, what came back, and what you changed when it did — a say-do read you accepted, a disclosure diff that asked you to look again, a stop you wrote down. There is no denominator anywhere on the page, so there is nothing a reader can convert into a rating.

StrengthThe safest of the three by construction, and never empty after the first entry.
CostAnswers what you have built, not whether you are getting better. Grows unboundedly and gets hard to see.
Also herethe paused-memory state — when learning is off, nothing accumulates, and the page has to say so.
Direction 1 · argued against, drawn at full strength

The Coverage Map →

Where am I thin?

Companies down, layers of work across, plus which of the ten shipped risk categories you have ever reached for. The most immediately useful of the three, and the one I would not lead with. Its best idea is the dashed cell: a company you rejected or parked is drawn as a deliberate stop, never as a hole — because a grid of holes is a to-do list, and a to-do list here tells someone to do more research on more companies, which is activity, not judgement.

StrengthWorks from the first assessment and answers the question users actually ask.
CostClosest of the three to becoming an implicit score. Six of ten categories is one design slip away from sixty per cent.
VerdictKeep the risk-vocabulary section. Do not let the grid lead the page.
The recommendation, plainly

Lead with the Calibration Floor and put the Spine underneath it. Do not lead with the Map. The brief asks for the surface that makes the brand claim literal, and the claim is about getting better — only one of these three is about that. The Map is about work outstanding and the Spine about work done, and both are good sections of a page that the Floor should head.

The second reason is the one that matters more on a compliance-critical surface. The Floor is the only direction that cannot be collapsed into a rating without visibly losing information — averaging its four cells scores a favourable outcome from unsound work identically to an unfavourable outcome from sound work, which is the exact error the product exists to prevent. The other two rely on us choosing not to add a number. This one resists it.

The condition I would attach. The Floor is empty for months. Nine resolved records is what a genuinely active five-month workspace looks like, and a new user sees four zeroes on a page called Progress — the worst first impression this product could make. So the empty state is not polish here, it is part of the decision: if it is not designed as a real screen, lead with the Spine instead and let the Floor take over once there is something in it. I would rather that swap be planned than discovered.

Five things in the shipped schema that changed the design

Grounded on ownermind-api origin/develop before drawing anything. Each of these moved a decision:

  1. The anti-score was already built. om_calibration_quadrant is a process×outcome matrix with a fifth insufficient_data value. I did not have to invent a way to show growth without a rating — the schema had already refused to average one.
  2. The comparison is to what you wrote down. The stored values are above_recorded_expectations, near_recorded_expectations, below_recorded_expectations. Not the market, not other users. The compliance answer is in the product's own vocabulary, so the page uses it verbatim rather than paraphrasing.
  3. The banned comparison is one join away. om_flywheel_aggregates is a shipped view returning a consensus value, a dispersion and an n across users. It is the most tempting widget anyone could add to this page and it is exactly what the brief forbids. That is why the exclusion panel names it on the surface rather than in a comment — the next person to design here reads the page, not my CSS.
  4. Citations are enforced, not encouraged. om_calibration_records.source_refs is constrained to a non-empty array, and an om_saydo_outcomes row graded delivered, partial or missed cannot be written without a source document and a verbatim quote of at least eight characters. So the page states those as facts about the record, not as promises about our diligence.
  5. The service already refuses to divide by zero, and so must the chart. observedRatePct comes back null when a confidence bucket is empty. Drawing that as 0%, or as a line passing smoothly through it, would invent a data point about a person. It is drawn as an empty level that says so.
What the pages refuse to do, and how that is held

Colour is where a rating leaks in first, so there is a rule and it is testable: --pos, --neg and --warn are reserved for verdicts about a company — a management team delivered or missed its own commitment, a filing added or removed a disclosure. They are never applied to the user's own record. Nothing you did is green and nothing you did is red. Your record gets the accent for "you completed this" and neutral cream for everything else. Emphasis, not approval.

Every figure is a count of rows and says which rows. Each one carries a data-count-of naming a table that exists on origin/develop today. A figure that cannot name its table is a derived index, and an index is a rating with the arithmetic hidden. The test suite reads the attribute rather than trusting the copy.

The word "grade" appears on these pages, deliberately. om_saydo_grade is delivered, partial or missed — a verdict on an executive team's own promise, and the sharpest thing the product knows. On a page titled Progress it is also the single most dangerous word available, so every card that carries one names its subject in its own body: it grades the executive team, not you. Suppressing the word would have been easier and would have removed a real capability from the record.

There is no forty-five degree line on the calibration chart, which every calibration chart in the world has. Confidence here is an ordinal one to five from the user's own snapshot, and nothing in the product maps those steps onto probabilities. Drawing the diagonal would invent the standard and then measure the reader against it — a rating, hidden in a dotted line.

On the fixture

Every company here is invented. Two reasons, and both are specific to this surface. A real ticker on a page showing recorded risks next to a "ready for your own decision" badge reads as a view on that security. And a say-do card needs a verbatim quote from a named executive — writing one and attaching it to a real person is not a design shortcut, it is a fabricated statement. The workspace says it is fictional on every page.

The numbers are one object in fixture.js that computes its own totals, so the three directions cannot quote the same workspace and disagree by one.

Implementation is not mine

These are clickable HTML concepts on shipped tokens, for a pick. Whoever builds the chosen direction owns the build; the parts I would hold as acceptance criteria rather than taste are the colour rule, the data-count-of discipline, the null bucket, the absent diagonal, and the named subject on every grade.