These parts build the roof: the one place our tools live. Client tools never look like this; they wear the client’s brand, or none. Here, nothing is decorated. A button is the word, in ink, in a box. The drawings stay at the edges.
The grammar of a control
I.Ink, paper, one hairline. Borders are 1px ink. Corners are square. There is no shadow, no gradient, no radius, no second grey.
II.Hover darkens the paper. Press moves it 1px. Focus is red. The conviction color is the only color a control may show, and only to say this is where you are.
III.One text size. 17px everywhere in a control. Labels are small caps, not smaller type.
IV.No motion. Nothing eases, slides, or bounces. The one exception is the four voice’s blob, which fades in over 150ms because it is a drawing arriving.
V.Drawings sit beside controls, never inside. A row may carry its noun at 48px on the left and its marks on the right. The button between them is words.
VI.Errors are sentences. Grown-up voice, under the field, in ink, with the red conviction stroke beneath the field. No icon, no red text, no box.
Button
i · primary, secondary, quiet, disabled
a pair: the irreversible one is filled; it goes first
Field
ii · text, with help, with error, checkbox
Table
iii · roman index, numerals right, ids in mono
Promise
Check
€
I.
Nightly export to S3
aws s3 ls … | wc -l = 1
1,800
II.
Weekly breakage report
mail arrives Mon 08:00
900
III.
Slack alert on failure
struck 12 Aug, rewritten as IV
—
IV.
Alert on failure, any channel
kill the job; alert < 5 min
1,500
Billable now
2,700
Notice
iv · plain, blocking
The export ran at 02:14 and wrote 1 file. Nothing to do.
The export did not run. The bucket key expired on 3 Sep; the client holds the new one.
a blocking notice always ends in the one thing to do
Every block of prose on the roof is a passage. Highlighting inside it offers the four voice, as in part III. That is the whole component: a wrapper, a listener, one button, one blob. It adds nothing visible until it is asked.
Tool row
vii · the roof is a list of these
Noun on the left, at 48. Name and one sentence of what it does. On the right, who assisted and whether it shipped, then Open →. Nothing else is allowed on a row: no tags, no counts, no last-updated.
Ask the appliances
viii · the machine, standing in for the three of us
One button, top right of every roof page. The words are the control; the three appliances sit beside it, because the answer comes from them, standing in for us. Each appliance answers for one of us. A router reads the question first and hands it to the right one. If it cannot tell, all three answer, and you get three answers.
Toaster · Garcia
Sales. What we offer, who it is for, how an engagement starts.
Thermostat · McIntosh
Features and problem solving. What a tool does, how to get something done with it.
Roomba · Scoz
Tech and service. How it runs, what broke, who to call at 03:00.
I.Grown-up voice, never four. The four voice is for a sentence you highlighted; this is for a question you have.
II.Haiku routes; Sonnet answers. The router says one word: sales, features, tech, or unclear. Unclear means all three appliances answer, in charter order.
III.Each appliance knows the roof and its own domain. Nothing about a specific client’s money or promises; those are people’s to answer.
IV.Not human level yet, and says so under every answer. An appliance that cannot answer replies That one needs a human and offers Ask a human →, which goes to the founder it stands for.
V.Each answer carries its appliance, not the shield: you know which of us it is imitating. Every answer can be highlighted, so the four voice is one step away.
It is live on the roof below.
Scoz · McIntosh · Garcia
Log reader
Reads a client's logs and lists the three things that broke this week.
← tool names are placeholders. swap in the real ones.
Eight parts, no more
Button · Field · Table · Notice · Mark · Passage · Tool row · Ask the appliances. The eighth was added 4 Sep 2026. A ninth needs all three of us in writing. V. Ten atoms. Any idea. →