The compass
The compass: Deviation0°
32 of 32 laws holding true
A ship keeps a deviation card beside its compass: how far the needle errs from true, heading by heading, so a navigator knows how far to trust the instrument. This is that card for this site. Each point on the rose is one law the build enforces. If one breaks, the build stops, so a card with a deviation on it is never published.
Computed by the build that made this pagecommit 8b3d4a4
The source is private; this card is what it reported.
- true
- The site does what the law promises.
- variation
- What the law points at has moved. The law needs rewriting, not the site.
- deviation
- The site is doing the forbidden thing. The build stops, and a card with one on it is never published.
A classic compass rose has 32 points. This one has 32 laws. That is a coincidence, not a design: the rose is drawn from the count, so the next law adds a point.
The card
Truth
What the site says, it derived. A number it could count is counted, never typed.
Every count is counted by the code, never typed by hand.
A number typed by hand is right on the day it is written and wrong after. Counts here are read from the collection itself, so they move when the work does.
Back to the roseEvidence
10 derived count(s)
src/data/career.ts:107src/pages/compass.astro:126src/pages/compass.astro:143src/pages/compass.astro:174
law counts are derived from the collection
Every date range is computed from real start and end dates, never written out.
A case study's displayed dates come from the same fields the timeline uses, through one function. It cannot claim a date its own data does not support.
Back to the roseEvidence
spanLabel() present; no authored display dates
law date strings are derived by spanLabel(), never written
A bare year is a legal date, and the site never invents a month it does not know.
Turning 2021 into January 2021 would state something nobody verified. The date format still accepts a year on its own, on purpose.
Back to the roseEvidence
regex still admits year-only dates
law YYYY and YYYY-MM both stay legal
Every number in the hero links to the page that proves it.
A headline number nobody can check is a slogan. Each one carries the case study that states it, one click away.
Back to the roseEvidence
1 proof point(s), all linked
law every hero proof point links to the page that proves it
An availability claim appears only while one hand-kept flag says so.
A badge written into a page keeps asserting long after it stops being true. This one sits behind a single flag, and the build refuses any page that states it without checking the flag.
Back to the roseEvidence
the claim is gated by one owned flag
law an availability claim is rendered only while it is true
A career era is exactly as long as the work inside it.
Era dates are computed from the spans of the case studies under them, so the timeline and the cards cannot disagree about when something began.
Back to the roseEvidence
arc periods come from member spans
law an arc's period is derived from the work inside it
No era appears on the site without real work beneath it.
An era heading with nothing under it is a resume line pretending to be a section. Every era names case studies, and every name has to be a real file.
Back to the roseEvidence
12 case studies, every mapped slug real
law no arc is shown without work under it
Failing loudly
A broken promise stops the build. It never ships quietly.
A finished project has an end date and a live one does not. A mismatch stops the build.
A case study marked live cannot quietly carry an end date, and one with an end date cannot call itself live. The schema refuses the combination before the page exists.
Back to the roseEvidence
superRefine present
law status and end are a biconditional, enforced at build time
A typo in a callout breaks the build instead of printing an empty box.
Case studies use named blocks for asides. If a name is not one the site knows, the build throws, so no page ships with a silent gap where a note should be.
Back to the roseEvidence
throws on unknown directive
law an unknown callout throws rather than rendering empty
A chapter's parent is its folder and nothing else.
Writing the parent into the chapter's own frontmatter as well would make two sources for one fact, and one of them would drift. The path is the only link.
Back to the roseEvidence
filesystem path is the only parent link
law a chapter never repeats its parent slug in frontmatter
No page is reachable at two addresses.
The flat case-study route leaves out items that have chapters, so a project cannot exist as both a single page and a chaptered one.
Back to the roseEvidence
flat route filters chaptered items out
law nothing is reachable by two route templates
The compass never states a count it did not compute.
It once typed its own law count and was off by one: nineteen against twenty. Now the count in the document is compared with the count in the checker, and a mismatch stops the build.
Back to the roseEvidence
32 laws claimed and registered
law the compass states no number it does not derive
The index never claims a length it did not measure.
The compass index tells you what each document costs to read. Those numbers are measured against the files, so they cannot go stale unnoticed.
Back to the roseEvidence
every stated length matches the file
law the compass index states no length it does not measure
Every document in the compass is listed in its index.
A standard nobody is routed to still looks like coverage. If a file is added and not indexed, the build says so.
Back to the roseEvidence
every compass file is routed from INDEX.md
law every compass file is reachable from the index
Every file the compass cites exists and is tracked.
A citation to a file that moved is a claim that quietly became false. Every path in the compass is checked against what version control holds, and every cited line has to exist.
Back to the roseEvidence
every cited path exists and is tracked
law the compass cites nothing it cannot prove
Colour
Every colour has a source, lives as data, and follows the page's theme.
Colours are stored as red-green-blue triples, so opacity and theming work everywhere.
A triple can take any opacity where it is used and a hex value cannot. Hex still appears in comments, where each brand colour cites the value it came from.
Back to the roseEvidence
30 stylesheet(s); hex only in comments and static scales
law colors are RGB triples in CSS, never hex
No gradient or shadow token exists that nothing uses.
A token nobody reads is a suggestion that outlived its use, and the next person to touch the file has to guess whether it matters. The check covers gradients and shadows; colour and spacing scales stay complete on purpose.
Back to the roseEvidence
all 5 gradient/shadow tokens referenced
law no dead design tokens
The site's own background is never pure white.
Its atmosphere and doodle layer disappear on white. A brand's own pages may use white when that brand's spec says so, because a brand's written rules outrank the site's defaults.
Back to the roseEvidence
site canvas is warm (1 brand(s) declare white by their own spec)
law the site's own canvas is never pure white
Every named accent colour is always defined: beacon, compass, horizon, fathom and tide.
A missing accent means a page silently falls back to another colour. The check names which one is gone.
Back to the roseEvidence
beacon, compass, horizon, fathom, tide
law the five accents are all declared
A brand's own colour always wins over a borrowed accent.
A page with its own identity is never overridden by the site's generic accent. The accent attribute is dropped whenever a brand is set.
Back to the roseEvidence
data-accent suppressed whenever brand is set
law a brand always beats a borrowed accent
Every stylesheet is imported by name, never by pattern.
A pattern import loses source order, and whichever stylesheet loads last wins by accident. Naming each import keeps the cascade in the order it was written.
Back to the roseEvidence
every brand imported by its own line
law CSS partials are imported explicitly, never globbed
Every brand palette says where its colours came from.
A plausible invented colour survives a glance. So each brand kit has to cite the original hex in a comment or say plainly that the colour is derived.
Back to the roseEvidence
12 kit(s) cite a source hex or declare derived
law a converted palette cites the value it was converted from
A brand's colour file that nothing imports fails the build.
An unimported kit renders the page in the default colour and looks like it works until you measure it. The wiring is checked, not remembered.
Back to the roseEvidence
12 brand kit(s), all wired into global.css
law every brand kit is imported, or it is not a kit
A brand's dark theme reaches its cards, not only its own page.
A dark rule that matches only when both attributes sit on one element works on a case study and fails on every card in the index. A kit with a dark block has to match cards under a dark page too.
Back to the roseEvidence
every dark block also matches a card under .dark
law a brand's dark block reaches the cards inside a dark page
Case-study drawings take their colour from the page's theme, not from one mode.
Hardcoded colour looks perfect in exactly the mode its author is looking at. Components draw from live tokens; the few literals left belong to a third party's own identity, and each says why.
Back to the roseEvidence
13 case component(s) take their colour from the page
law a case component reads the page's theme, not one mode's colours
Motion & reach
Motion answers to the visitor, and every way in stays open.
Every file that animates also answers a request for less motion.
Motion is a courtesy a visitor can withdraw. A file that defines keyframes and has no reduced-motion rule fails the check.
Back to the roseEvidence
every keyframe-defining file answers it
law every animating file answers prefers-reduced-motion
Content is visible by default. Scroll reveals are added on top and never required.
If a script fails, nothing may stay hidden. Hidden states exist only behind a class the script adds, so a JavaScript failure costs an animation and nothing else.
Back to the roseEvidence
.reveal-ready gates the hidden state
law content is visible by default; reveal is additive
Keyboard focus is always drawn, and no component turns it off.
A page that hides where the keyboard is has failed everyone who navigates by it. There is one global focus ring, and the check fails if a component opts out.
Back to the roseEvidence
global outline present, no opt-outs
law focus-visible always draws
The first thing a keyboard reaches on every page is the skip link.
It is checked against the HTML the build produced, not against the template, because a layout is not a document and only the built page says what a browser receives.
Back to the roseEvidence
read from the finished build; a build where this fails is never published
law the skip link is the first focusable element
No emoji, anywhere in the source or the content.
Icons here are drawn as marks the site owns, in one colour and with no font dependency, so they look the same on every device.
Back to the roseEvidence
139 file(s) scanned, zero emoji
law no emoji anywhere in source or content
There is always a way to ask a question and get an answer, not only somewhere to read more.
GitHub and LinkedIn are places to read, so they do not count. The check passes only while a direct channel exists on the site: email, WhatsApp or Telegram.
Back to the roseEvidence
2 direct channel(s): email, whatsapp
law the primary segment has a channel that reaches him
Every contact channel says who it is for.
A row of identical icons is a menu, and it asks the visitor to work out which door is theirs. Each channel carries one clause saying what it is for, and none may be blank.
Back to the roseEvidence
4 channel(s), each says who for
law no channel is shown without saying who it is for
Headings refused
A navigator also keeps the courses considered and not taken. Each of these was proposed, and each has a reason it is not on this site.
- ARIA tab panels for chapters
- Hid three-quarters of the document's headings inside
[hidden]. Real routes removed the problem. - Tool logos as glyphs
- Breaks the background-less
currentColorrule and regresses into a skills-badge resume. - Inventing a chapter to round out a number
- Six proposed, four in the source, four shipped.
import.meta.globfor CSS- Lost the source-order race.
- A fixed card height
- The sixth lane landed on the proof line.
- Terms, prices, or a support policy on the site
- Prices depend on the deal, and the site is an identity, not a sales page.
- An availability badge
- It keeps saying "available" after it stops being true, so it went. One owned flag still guards the claim, and a law checks it.
- A for-hire pitch
- The site shows what each stop added; it does not ask for work.
For machines
There is no separate version for machines. This page is drawn from the same data.
/compass.jsonThe card as data: every law with its family, bearing, reading and evidence, and the commit it was computed at./llms.txtA plain-text map of the site, for language models, pointing here for the standard.