Design system

What this is
Every atom and block a page is built from, rendered once
The manual
KNW_BR_MC_Block-Library.md, in the brand plugin
The stylesheet
/shared/client-site.css and the brand overlay

The block library

Every page is assembled.

A page uses what is here, and only what is here. Every entry reads the same way: its name, one line on what it is, a sample, and its parts.

Atoms

Three typefaces, one job each.

Ponomar sets the headlines, Inter titles and says things, JetBrains Mono labels things. The atoms are the smallest pieces a block is made of.

Type

Every text size a page may use, largest first. Each one has one job.

Name and classSampleTreatment, and when to use it
H1 · page title
h1

One company, one system.

Ponomar 400. Once per page: the page’s headline. On a private overview the cover is the page title, so the H1 takes the section size, clamp(32, 4.8vw, 48); elsewhere clamp(40, 8vw, 64).
H2 · section title
h2

A section opens here.

Ponomar 400, clamp(32, 4.8vw, 48). Opens every section. The green words are .accent.
H3 · sub-section title
h3

A step inside a section

Inter 600, clamp(20, 2.6vw, 24). A titled part inside a section, on report pages.
Subhead
.body

The line under a section title, two rendered lines at most.

Inter 400, clamp(16, 1.8vw, 18), gray, two rendered lines at most, in a 720px column. About a third of its title, the ratio Anthropic uses.
Box title
.nm

System

Inter 600, 16, gray. Names the thing a white box holds, in four words or fewer: a point title in a box.
Point title
.phrase

Knowledge compounds

Inter 600, 16, gray. The bold first line of a point.
Body text
p

Every correction makes the whole system better.

Inter 400, 16. Running text.
Box text
.ln

Text inside a box sits one step smaller.

Inter 400, 15, gray. Any text inside a white box.
Section label
.eyebrow

The problem

JetBrains Mono 500, 12, capitals, green. Names the section’s topic, above its title, in plain words.
Diagram label
.wflow .nm

Your agent

JetBrains Mono 500, 12, capitals, black. Names a step inside a diagram. A diagram labels its steps; a card titles its thing.
Row label
.lk

Business intelligence

JetBrains Mono, 11, capitals, gray. Names a row, a field or a column.
Step number
.nmark
3JetBrains Mono 500, 12, in a 24px square. Takes an icon’s place when the order matters.
Figure
.sv
300+
People
JetBrains Mono, clamp(26, 4vw, 34). A number that is the point.

Icon

A 24px line drawing that stands for one idea. It marks a point or a box so the eye has somewhere to land. Every icon comes from one registry and keeps one meaning.

IconNameThe one idea it stands for

grid

The functions of a company, the whole company

doc

What people know, written down

step

Getting better, one step at a time

person

Expertise, what one person knows

bolt

Getting the work done

check

Quality, done right

cycle

Learning, the loop that repeats

archive

Kept by the company

moon

Outside the working day

sun

During the working day

compass

Direction, people direct

play

Execution, agents run the work

layers

Compounding, knowledge that builds on itself

chat

A conversation, a message

key

Ownership, the permission to change

sliders

Control, deciding what runs on its own

scale

Parity, as good as your person

shield

Verification, work that has been checked

search

Evidence, the sources behind an answer

globe

The website, and being found in search

wave

Voice

calendar

Time, how soon

dash

General management

trend

Sales, growth

megaphone

Marketing

package

Operations, the goods that move

banknote

Finance

people

People and HR, the team

plus

More of the same kind

quote

Someone else's words

chip

The system the work runs on

cap

Training, people learning the work

pause

Waiting for a person

book

The rules the system runs by

lock

Private, data that stays yours

addperson

Adding a person to the system

badge

A person's own access

segments

Customers, grouped by what they do

film

Content, the series a studio makes

app

The app, the product people use

agent

An agent, one role the system runs (every agent card carries it)

delivery

Delivery, the client work the firm sells

data

Data, the systems it is read from

harp

Holding and passing on knowledge, the harper (the name's origin)

arrow

Direction of travel: the diagram arrow and the next step
PartWhat it is
.icothe icon
data-iconthe registry name it is drawn from (content/brand/icons.mjs)

Arrow

The one direction mark. It joins the steps of a diagram, pointing right, down or up.

PartWhat it is
.arwthe arrow, pointing right
.downturned to point down
.upturned to point up

White box

The container: a white fill inside a hairline border. Anything that is not running text sits in one. A white box holds a card, a diagram, a logo panel or a product screen. A card’s box has three parts: the box title line, the box text, and sometimes a box footer.

Box title

Box text: what the thing is, one step smaller than body text.
Box footer
PartWhat it is
.ta white box holding a card
.wnodea white box holding one step of a diagram
.figboxa white box holding a picture: a diagram, a logo panel or a product screen

Box footer

A small green label under a hairline at the bottom of a card. It ties the card to an idea named elsewhere on the page. It is a line inside a white box, never a box of its own.

System

The operating system all the work runs on.
Knowledge compounds
PartWhat it is
.tagthe box footer

Blocks

Atoms, assembled the same way every time.

A section is a lockup and the blocks under it. Each block has a name, one job and one treatment. The samples below are drawn by the renderer that builds the pages.

Lockup

The top of every section, always in this order: section label, section title, subhead. The label and the subhead sit in a 720px column; the title may run to 816px.

What we build

We rewire entire functions to run on AI.

Three things have to run together: your expertise, your data and the model.

PartWhat it is
.eyebrowthe section label
h2the section title; its green words are .accent
.bodythe subhead

Cover

The first thing in a private overview, between two rules: who it is for, who prepared it, and when. It is what makes the page a document sent to someone rather than a web page. A cover naming its reader says what the document is by naming them, so it carries "Prepared for" and not "What this is"; the generic line is for the overview prepared for no one (MC, Sep 22, 2026).

Prepared for
The reader’s company
The reader’s name and role
Prepared by
Michael Chauliac · harperOS
Date
September 2026
PartWhat it is
dl.meta-gridthe cover
dta row label
ddits value
.namethe company’s name, set larger

Point row

Two or three ideas side by side, with no box. Each point is a marker (an icon, or a step number when the order matters), a point title, and its text.

People direct

You are the one thinking and deciding what comes next.

Agents execute

A person plus their own agent, and one plus one makes three.

Knowledge compounds

What your best person knows, captured once, for everyone.

1

First, parity

The agent does the task as well as your person did.

2

Then, verification

A second agent checks the work.

1

Deploy the operating system

We set up your workspace in your own environment and connect your systems.

2

Capture and codify the knowledge

We capture what your team knows and how it works.

PartWhat it is
.pointrowthe row
.pointone point
.phrasethe point title
.detailthe point’s text
.twotwo points instead of three
.stackkeeps the points stacked at every width, for the text side of a split
.inlinestacked, with the marker beside the title: a long list read in order, such as the seven pillars, each title linking to its section

Card grid · parts

Three cards that name the things a company buys. Each card has its icon and box title on one line, its box text, and a box footer. Where the cards run in an order, a step number takes the icon’s place.

System

The operating system all the work runs on, in your environment.
Knowledge compounds

Functions

Every function you choose, built end to end.
Agents execute

People

Your team, trained to run their work through agents.
People direct
PartWhat it is
.triothe card grid: three white boxes in a row
.tone card
.cardheadthe line that holds the icon and the box title
.nmthe box title
.lnthe box text
.tagthe box footer

Card grid · compare

A before and after, one card per aspect. Inside each card: the word From and what it was, then the word To and what it becomes, both in the same gray.

Expertise

FromLiving in a few key people’s headsToCaptured from your best people

Getting the work done

FromBy hand, or in each person’s own AI chatToAgents running the encoded way

Quality

FromNot always predictableToYour best way every time
PartWhat it is
.triothe card grid: three white boxes in a row
.tone card
.cardheadthe line that holds the icon and the box title
.nmthe box title
.fromtothe From-and-To pair
.frkthe word From or To
.frvthe sentence after it

Card grid · shift

The compare cards as one line each, for a page that tells the before and after in less height: the aspect, the old way in gray, a green arrow, the new way in ink. Stacked on a phone.

Expertise

From Living in a few key people’s heads

To Captured from your best people

Getting the work done

From By hand, or in each person’s own AI chat

To Agents running the encoded way

Quality

From Not always predictable

To Your best way every time

PartWhat it is
.shiftthe list
.srowone aspect
.sfromthe old way, in gray
.sarrthe arrow
.stothe new way

Card grid · org

The functions as a line-drawn org chart: the company node on top, a line to each function's node, and under each function a spine with a tick to each agent. Nodes are the only boxes; every line is a 1px rule, drawn orthogonally. Six columns from 1024px, stacked below.

Your company
Sales
  • Sales representative
  • Account manager
  • Sales operations
Marketing
  • Growth marketer
  • Social media manager
  • Content strategist
Finance
  • Controller
  • Financial analyst
  • Accounts receivable
PartWhat it is
.orgthe chart
.onodethe top node
.ocolone function
.ofnthe function's head
.rolelist.oagentsits agents

Card grid · roster

The function cards as one line each, for a page that names the functions and their agents in little height: the function with its icon, then its agents in equal cells, each with the agent icon. Stacked on a phone.

Sales

  • Sales representative
  • Account manager
  • Sales operations

Marketing

  • Growth marketer
  • Social media manager
  • Content strategist

Finance

  • Controller
  • Financial analyst
  • Accounts receivable
PartWhat it is
.rosterthe list
.rrowone function
.rolelist.ragentsits agents, equal cells

Card grid · function

One card per business function, each agent it holds a box carrying the agent icon, and an optional line on what they would do first. The agent names come from the role library. Every page draws them the same way: on an overview the boxes are plain, since nothing below them to link to; on an approach or proposal the scope sets two cards across, each box links to its agent's card, and an odd last card spans its row.

Sales

  • Sales representative
  • Account manager
  • Sales operations

Marketing

  • Growth marketer
  • Social media manager
  • Content strategist

Finance

  • Controller
  • Financial analyst
  • Accounts receivable

Sales

Win new clients, and grow the ones you already have.

Marketing

Make the people you want to reach know you before they need you.

Finance

Keep the books, the forecast and the billing current.
PartWhat it is
.triothe card grid: three white boxes in a row
.tone card
.cardheadthe line that holds the icon and the box title
.nmthe box title
.lnthe optional line
.rolelist.boxesthe agents, one box each
.bxia plain box, on an overview
aa linked box, on an approach or proposal
.trio.two.filltwo across, the odd last card spanning the row

Card grid · quote

Someone else’s words in a card: a quote mark, the words, and who said them. Never the words of the company the page is written for.

Six weeks of work, done in three hours.

Viral Shah · CFO, Advanced DRI

1,400 companies — no one’s doing it. Not even close.

Matt Lipman · CEO, Capstone

Things that used to take days now take five or ten minutes.

Greg Boatwright · CEO, ADRI

Six weeks of work, done in three hours.

Viral Shah · CFO, Advanced DRI

PartWhat it is
.trio.twoa card grid of two
.tone card
.saidthe quoted words
.saidbywho said them, and their role
.withavthe speaker’s line when it carries their photo, the byline’s 44px avatar

Split

The text on the left and the picture that shows it on the right. On a phone the picture follows its text.

During your day

You direct the work and approve it.

Outside your day

What you set to run keeps going, and waits for you in the morning.

PartWhat it is
.textfigthe split
.pointrow.stackthe text side
.figboxthe picture side
.flipputs the picture on the left; kept for a page that needs it

Product screen

A simplified picture of what the system shows you, such as the morning review. It is always marked as an example: the renderer refuses a screen whose header does not open with “Example”. The split above carries one.

PartWhat it is
.pviewthe product screen
.pvhits header line
.pvrone row
.pvnthe row’s name
.pvsthe row’s status
.statethe tag at the right of a row
.goa tag that needs you, in green

Logo panel

Other companies’ products, shown by their own logos in their own colors, one category to a row. It shows which systems we connect.

Communication

GmailGoogle CalendarMicrosoft TeamsSlackGranola

Email and SMS

KlaviyoMailchimpAttentive
PartWhat it is
.logorowsthe logo panel
.lrowone category
.lkthe row label
.marksthe logos

Logo panel · clients

The companies that run on harperOS, by their logos in their own colors, with no row label.

AltruistRTB HouseInstoneAdvanced DRISiren Creative
PartWhat it is
.lrow.brandsthe clients’ row

Stats

A few short numbers, each over a label. The number is the point.

10
Industries
25+
Functions running on it
150+
Agents built for clients
300+
People with their own agent
10
Industries
150+
Agents built
300+
People with an agent
60
Days to go live
6
Months to a complete build
PartWhat it is
.statsthe row of stats
.stone stat
.svthe figure
.slits label
.heldkeeps three across on a phone
.stats4four across from the tablet up

Type specimen

The type scale shown at size. Each row names its rung, states its value and draws a sample with the real rule: a real heading, or the real block’s own renderer. The design-system page builds the rows from the canon’s scale table, so a sample cannot drift from what pages set.

Section title (H2)

Ponomar clamp(36px, 6vw, 60px)

Body

Inter 16px

Body text carries the argument, one idea to a sentence.

Labels

JetBrains Mono 12px

Section label
PartWhat it is
.tspecthe set of rows
.tsrone rung
.tsnits name
.tssits value
.tsxthe sample, drawn by the real rule

Space scale

The ten spacing steps, each drawn as a bar at its own token’s width. Every distance on a page is one of these steps.

--s28px
--s524px
--s864px
--s10128px
PartWhat it is
.spscalethe scale
.sprone step
.spbarthe bar, at the step’s own width

Marks

The brand’s own assets, each on the ground it is made for, with what it is for and its file. A mark whose file is not in public/ is refused, so a page cannot show a dead asset.

PartWhat it is
.marksthe set, in whole rows
.mkone mark
.mkimgthe ground it sits on
.swnits name
.swvits file

Actions

Buttons in a row outside the hero: one primary at most, one ghost at most, and a text link. The renderer refuses a second primary.

PartWhat it is
.ctasthe row
.btnthe primary button
.btn.ghostthe ghost button
.tlinkthe text link

Swatches

A design system’s colors, each chip filled from its own token, with the value and what the color is for. The design-system page builds them from the canon and refuses a value that differs from the brand overlay. They fill whole rows, like any set.

Field

--field #F7F7F6

The page on a screen

Ink

--ink #181428

Headlines, strong text, the footer

Accent

--accent #00AF7B

The one mark that carries the signal

PartWhat it is
.swatchesthe set, in whole rows
.swone color
.chipthe color itself, filled from its token
.swnits name
.swvits token and value
.swuwhat it is for

Buttons

The primary button carries the page’s one main action. A ghost button beside it is the quieter way to read further; a hero carries one primary and at most one ghost.

PartWhat it is
.ctasthe row that holds them
.btnthe primary button
.btn.ghostthe ghost button

Next step

The page’s one action, at the end of its section: a label, the action, and one line on what happens next.

The next stepBook a demo→We show you the system at work, and what it would look like in your company.
PartWhat it is
a.continuethe next step
.ckits label
.cnthe action
.clthe line under it

Workflows

Boxes and arrows, four ways.

Every workflow is numbered steps in white boxes, joined by arrows. A step is labeled in JetBrains Mono; a sentence belongs in a box, never under the diagram.

Workflow · across

Steps left to right, joined by arrows. Use it for a sequence of three to five steps. On a phone it stacks.

1

Parity

The agent does the task as well as your person did.

2

Verification

A second agent checks the work.

3

Evidence

The sources come back with the work.

PartWhat it is
.wflowthe workflow
.wnodeone step: a white box
.cardheadthe line that holds the step number and the diagram label
.nmarkthe step number
.nmthe diagram label
.lnthe box text
.wjointhe arrow between two steps

Workflow · branch

One step hands the work to several boxes at once, and they hand it back. The column of boxes is a numbered step of its own, held together by a thin rule. On a phone it becomes a tree.

PartWhat it is
.wfanthe column of boxes that share one step
.wfan .cardheadthe column’s step number and label
.wtiethe lines into and out of the column

Workflow · stacked

Steps top to bottom at every width. Use it when the steps carry long text.

1

You

Ask for what you need.

2

Your agent

It routes the work to the function it belongs to.

3

Back to you

It comes back done.

Workflow · returns

Steps left to right where the last one feeds back into the first: a loop, drawn as boxes.

1

Run

The agent runs the task.

2

Review

You read what came back.

3

Calibrate

Your correction is kept.

Back to 1

PartWhat it is
.returnsthe return path under the row
.wreturnthe “back to 1” note shown when the steps stack

The client pages’ blocks

The blocks the renderer already builds.

Every generated client page is made of these. Each one carries the type name a content file uses.

List

Points inside running text, each behind a small green square.

  • We needed growth and could not add the headcount.
  • We built the system, and the method that fills it.
PartWhat it is
ul.blistthe list
lione point, a whole sentence; on a private overview a point with a title is a point row or a card grid, never a bold lead
.catlabelan optional label above the list

Cards

The portal’s card: a small label, a name, and its text, in pairs.

Phase one
Problem mapping
One problem in one function, mapped for an hour.
Phase two
The build
The function, encoded end to end.
Fixed fee
PartWhat it is
.grid.cols-2two cards in a row
.cardone card
.kickthe small label
.nmthe card’s name
.lnits text
.cmetaa line of detail at the foot

Cards · agent

One card per agent: its function, its name, what it does, and who owns it.

Sales

Account manager

  • Keeps every account current
  • Drafts the follow-ups

Sales operations

Finance

Controller

  • Closes the month
  • Flags what does not reconcile

Financial analyst

PartWhat it is
.acardsthe agent cards
.acardone agent
.akits function
.anmits name
.aownwho owns it, from the role library

Cards · people

One card per person: the portrait, the role, the name, what they have done, and a link to their profile. On a public page only; the founders on About.

Pierre Merzeau
Co-Founder & CTO
Pierre Merzeau
Director of Engineering at XBTO. CTO and co-founder at Ouro Capital.
Patrick Adams
Co-Founder, President & CMO
Patrick Adams
Led marketing organizations at PayPal, Victoria’s Secret, Chase and Citibank.
PartWhat it is
.photothe portrait, a 160px square on the off-white field
.kickthe role
.nmthe name
.lnwhat they have done
.cmetathe profile link

Table

A comparison that has to be read across, row by row.

AspectTodayOn the system
LearningIsolated to one personEvery correction improves the whole
Dedicated knowledgeEach agent reads from a defined slice of the knowledge layer.
Tool accessScoped access to the systems the function needs.
PartWhat it is
table.ptablethe table
tr.headthe header row
td.termthe row’s name
td.desca cell the renderer draws after the name

Assessment table

The comparison grid of an assessment: one subject held against its competitors, a column per company, a verdict per row. The subject's column carries the accent; the best value in a row is bold. A cell holds a line, a line with its source, or stacked marks. The numeric variant sets the figures in mono.

AttributeExample CoCompetitor AVerdict
Audit-log retentionadmin documentation15 months365 daysBetter (vs Competitor A) — a longer window, stated on both pages
Platform listExtensioniOSAndroidDesktopiOSAndroidCLIWorse on breadth — no desktop app
PartWhat it is
.tblthe table, scrolling sideways on a phone
th.dl / td.dlthe subject’s column
.srcthe source under a dimension
.cbone mark inside a cell
strong.vgooda verdict that goes the subject’s way

Compare rows

A long before and after, read as rows rather than cards.

TodayOn the system
When someone leaves
What they know goes with them
The company keeps it
PartWhat it is
.vsthe comparison
.vs-rowone row
.kthe row’s name
.onetoday
.os-von the system

Sequence

Numbered steps with a title and a line each. The inline view puts the title and its line on one row.

1
Problem mapping
One problem, one function, one hour.
2
Proposal
The build, priced.
01Capture. We sit with your best person.
02Encode. The way they work becomes the agent’s.
PartWhat it is
.agendathe sequence
.d-stepone step
.snits number
.stits title
.sdits line
.howsteps .hstepthe inline view

Flow

The older vertical diagram on live client pages. New pages use a workflow.

You
Ask for what you need.
Your agent
It sends the work to the function it belongs to.
PartWhat it is
.flowvthe flow
.fnodeone step
.fkits label
.fjointhe line between steps

Function panel

The older list of functions and their agents on live client pages. New pages use the function cards.

A company, function by function

01Sales

Account managerSales operations
PartWhat it is
.fnbthe panel
.fgroupone function
.glits name and number
.agents .chipits agents

Function head

Opens one function inside a longer section: its icon and its name. A head may also carry a number and one line where nothing above has said what the function covers.

Sales

PartWhat it is
.fnheadthe function head
.fnn.withiconits icon and its name
.fnkits number, optional
.fnlits line, optional

Agent spec

One agent, as a proposal or delivery plan specifies it: the agent icon every agent shares beside the role, the purpose in bold, then one question a row, label left and answer right. The workflow row is the hero, Today muted, Tomorrow in ink on an accent rule. The entities it names are boxes carrying their icon. A company-wide build sets the cards under their function heads.

Account manager

Keep every account current, so no client goes a week without a touch.

Pain point

Each client’s history lives with the person who holds the relationship.

Workflow
Today

Follow-ups live in one person’s inbox.

Tomorrow

Every follow-up arrives drafted and tracked in the morning queue.

Adversary agents
Source verifier
Systems it connects to
GmailAirtable account store
Proposed owner

Sales operations

PartWhat it is
.enc.railthe spec
.eheadthe agent icon, the role and the purpose
.erowone row
.elthe row label
.erow.hero .flowthe workflow, Today to Tomorrow
.ecap .chipa system or an adversary agent, with its icon

Agent card · light

An approach’s agent: the full card’s head alone, the agent icon, the role and its purpose, three across under each function head. Turning the approach into a proposal adds the rows under each card; nothing above them changes. The build refuses a full card on an approach and a light card on a proposal.

Account manager

Hold each client’s history, intelligence and next step in one record.

Growth marketer

Make the companies in your target universe know you before they need you.

Controller

Close the books and track spend against the plan.

PartWhat it is
.fx.lightgridthe row of light cards
.enc.lightone agent
.enm.withiconthe agent icon and the role
.egoalits purpose, verb first

Proof list

Rows of evidence, each with a label, the proof, and its source.

Speed
Six weeks of work, done in three hours.Advanced DRI
PartWhat it is
.plistthe list
.prone row
.pkits label
.pqthe proof
.pwits source

Price

The proposal’s price: the figure, one line on it, and its terms.

One feefor the build

The build is fixed, never hourly.

TermTwelve months
PartWhat it is
.pricethe price
.pnumthe figure
.pledethe line under it
.prowone term

Boxes

Quiet boxes that each hold a name and a value.

License

Yours, in your repository.

Subscription

The expertise, kept current.

PartWhat it is
.tboxthe boxes
.bxone box
.bkits name
.bvits value

Ops

Short name-and-value rows, such as a schedule or an approval rule.

Schedule

Every weekday at 7:30

Approval

Waits for your yes

PartWhat it is
.opsthe rows
.opone row
.onits name
.ovits value

Caveat

A strip that tells the reader what to know before reading on.

Read this first

This page describes the system; the proposal prices it.

PartWhat it is
.caveatthe strip
.cvkits label
.cvtits text

Note

A short qualifier, under the thing it qualifies.

The figures are counted across every deployment.

PartWhat it is
p.notethe note

Chips

Small labels in a row. They are never buttons.

KnowledgeSkillsRoutines
PartWhat it is
.chipsthe row
.chipone label
.toolrowthe tools view
.ecapthe caption view

Quote

The portal’s boxed quote. The overview uses the quote card instead.

“Things that used to take days now take minutes.”

A client CEO
PartWhat it is
blockquote.quotethe quote
.qbywho said it
.qpairtwo quotes side by side

Pull

One large sentence that carries the page’s voice, used once at most.

The model is not the hard part. The wiring is.

PartWhat it is
p.pullthe pull

Entries

An index: each entry one link, its kicker (a date, or a date and the source), its title and a line under it. An entry that leaves the site opens in a new tab and names its source.

Everyone

01
Orient

The complete picture: the machine, what it can do, how to work it.

  1. 01How the system works
  2. 02What I can do for you
Start course2 modules

Weekly operators

02
Operate

The craft on top of the operating model.

  1. 01The power moves
  2. 02Writing well in the system
Start course2 modules
PartWhat it is
.entriesthe index
a.entryone entry, the whole of it a link
.ekthe kicker, on the mono label rung
.etthe title
.exthe line under it, 16px
.earrthe arrow atom, which moves on hover
.featurethe view an index leads with: the same entries as white cards, two or three to a row
.n2 / .n3how many cards the row holds, so every row is full
.openthe feature row opened: three items under a hairline, no box, titles medium
.etablethe table view: a dated index as rows, date, optional category, title
.ccardthe course view: one card per course, its numbered lessons, a start link
.leadthe lead view: the one post a blog index opens on, open on the field between two hairlines, its title on the display face
.tabsthe tabs view: posts by kind, in the phase-tab idiom, over a hairline list
.etr / .etlabelsthe tabs: radio inputs and their labels, in the text face
.etpanel / .elistone group's panel and its list
a.erow / .edate / .etl / .esrcone row: the date, the title, the source, the go-arrow
.emorethe rest of a group past nine, behind More
.elaban entry's category label, in the text face like the tabs, so the kind of piece reads at a glance

Product shot

The real product in an app window, never a mock-up: a registered shot copied from our own OS with its commit, its lines numbered, one caption under it.

session/communication-safety.md
1# communication-safety2 3Customer communications require coordinator review. Draft first, never auto-send.4 5The pipeline for any outbound communication (email, Slack, Teams): produce a draft → present it in chat for review → wait for explicit approval → send only after approval.6 7"APPROVED" is the only valid approval signal. Silence, nodding, or implicit consent are not approval.8 9Never send a communication that has not been explicitly approved by the user. Never send a communication from a tool call in the same step as drafting it.
A rule from our own OS, word for word: no message leaves until a person approves it.
PartWhat it is
.pshotthe shot and its caption
.pwinthe app window
.pbarits title bar, with the file's name
.ptitlethe file's name
.pcodethe file's real lines
.pna line number
figcaptionthe one line under it

Demo

The product at work, one use case at a time: a menu of two to four use cases beside a session in the app it runs in, a row of tabs above it on a phone. It switches without a script.

In Claude Code, the person runs /ea-morning-brief; the executive assistant agent reads the calendar, ranks the inbox, pulls the action plate and checks the scorecard, then shows two figures below their line with the action for each, the day's meetings, and a draft to review.
In Claude Code, the person runs /bi-variance; the BI agent pulls yesterday's topline by brand and channel, compares it to last year and budget, and shows the variance table with the two lines that need attention and a draft to review.

Shown on example data, with every name and figure changed.

  • Morning briefAsk for your day, and get what needs you with the action for each.
  • Actuals to budgetSee every line against its budget, and the two that need you.
PartWhat it is
.demothe menu and the session
.dmenuthe use cases
.dtone use case: its name and one line
.dpanesthe sessions
.dpone session, phone and desktop sizes
.dcapthe one line under it

Story

A narrative in two to five short paragraphs, at reading size: the one block on a marketing page that carries running text, because a story is running text.

At a global digital assets firm, our founder wore three hats. Hiring wasn’t an option, so he became his own Chief AI Officer.

Over 24 months, he studied, tested, and built. That work became harperOS.

PartWhat it is
.storythe narrative, in the reading measure
.story pa paragraph, 18px

Byline

Who wrote a piece and when: the author’s photograph, name and role, and the date. At the foot of the piece the sign-off view names the same person.

Written by

Michael ChauliacCo-Founder & CEO

PartWhat it is
.bylinethe line under an article’s title
img.avatarthe author’s photograph, 44px
.whothe name
.rolethe role
.whenthe date, in the short form
.signoffthe sign-off at the foot
.labelits label

Collapse

A card grid behind a labeled toggle, closed until the reader opens it, for a page that points at the detail without spending its length on it.

See every part

System

The operating system all the work runs on.

Functions

Every function you choose, built end to end.

People

Your team, trained to run their work through agents.
PartWhat it is
details.collapsethe toggle and what it holds
summarythe label, on the mono rung in green, with a plus that turns to a minus

Closer

The page’s last line and its one action on a single row, tight: a heading and one row of actions, no subhead.

Your agents. Your OS.

PartWhat it is
section.closerthe closing row

Band

A section drawn as a strip, ruled above and below, carrying one block and no words of its own: the homepage’s client logos. The section after it drops its own rule.

One block, ruled above and below.

PartWhat it is
section.bandthe strip

Sub-label

A label over a hairline that divides a section into parts. On a client document it is the ladder’s fourth step, an H4: a bold line in the body face, sentence case, numbered by its pillar first (1.1, 3.2). Elsewhere it is the green label every entry name on this page uses.

What the agent reads

Your policies, your past work and your data.

PartWhat it is
p.sublabthe sub-label

H3 block

The renderer’s type named subhead. It emits an H3, the sub-section title in the type table above; the name is the renderer’s, kept so content files still read.

PartWhat it is
h3the sub-section title

Severity

The report’s high and medium markers.

High

Medium

PartWhat it is
p.sevhigh
.medmedium

Logos

The gray logo strip on older client pages. New pages use the clients’ logo panel, in color.

AltruistInstoneRTB House
PartWhat it is
.logosthe strip
.logowallthe wall, on older hand-built pages; the renderer does not emit it

Embed

A registered visual with its own styles, built from the brand tokens. It is shown on the pages that register it.

PartWhat it is
.emthe embed
.em-{name}one registered visual (content/embeds/)

Page chrome

Every client page shares one frame.

The renderer draws the banner, the menu and the footer on every page.

Banner

The strip above the menu that names who the page was prepared for. A family with a client carries it on every page.

PartWhat it is
.bannerthe strip: the client’s name and the word Confidential

Menu

The numbered steps of the family, from the family’s own declaration. The current page is marked, and above 768px the menu stays at the top as the page scrolls.

PartWhat it is
nav.ringthe menu
.wordmarkthe harperOS mark, linking home
.stepsthe numbered pages of the family

Site menu

The public site’s menu: the wordmark, its links and one action, folding into a menu button on a phone. The site family declares its links and its action, so every site page carries the same menu.

PartWhat it is
nav.sitethe site menu
.nav-ctaits one action
.m-menuthe menu button on a phone
.m-panelthe panel it opens

Footer

The dark band that closes every page: the mark, the line, and the copyright. A public page adds a row of links under the copyright; a client page has none. This page’s own footer, at the bottom, is the sample, because a page carries one footer.

PartWhat it is
footerthe band
.markthe harperOS mark
.linethe line under it
.confthe copyright
.flinksthe links, on a client family that declares them
.fcols / .fcol / .fhthe site's directory: every public page one click away, in short columns under a mono heading

Templates

A page is a template, filled in.

A template fixes which sections a page has, in which order, and the blocks each one uses.

Private overview

The document sent to a named reader. It is rendered from blocks: content/clients/overview/ builds the staging overview at /staging/overview, the page that goes public when it is approved.

SectionBlocks
Cover and visionsection label · cover · lockup with H1 · point row
The problemlockup · card grid, compare (six)
What we’re forlockup · point row
What we buildlockup · card grid, parts
Your systemslockup · logo panel
How it workslockup · workflow, branch
When the work happenslockup · split with a product screen · card grid, quote (one)
At team levellockup · point row
Why you can trust itlockup · workflow, across
The functionslockup · card grid, function (six)
The peoplelockup · point row
The prooflockup · stats (four) · logo panel, clients · card grid, quote (two) · next step
PartWhat it is
body.overview-docturns a page into this template: the cover, the 720px lockup column, the smaller headings

Approach and proposal

What we would build for a named reader, and how it gets built: one template at two depths. An approach is a proposal before the price and before the detail, so turning one into the other fills fields and rebuilds nothing. The standard sections live in content/templates/approach.mjs; a client fills only its slots: its functions, once, which feed both the scope and the agents.

SectionBlocks
Opening (H1)scopeHero(): section label · the standard title · one paragraph, the scope formula then the timing (a proposal adds the price) · card grid, function, boxed, two across
Parts (H2)numbered: the engagement, the sequence, pricing, referrals; each a lockup with the full section break
The engagementlockup · point row, inline, one linked numbered point a pillar
A pillar (H3)a chapter inside the engagement: grey label, subheading · numbered H4 sub-labels (1.1), each over a card grid or a point row
The agents, pillar 4caveat · per function: function head (icon and name) · on an approach, light agent cards; on a proposal, the full agent card for each agent
The sequencelockup · workflow, stacked, one step a stage; a proposal may carry its quoted deal’s own stages
Pricinglockup · boxes · H4 sub-label · proof list, the terms; a proposal adds the figure (price)
Referralslockup, the ask in the subhead · stats: one introduction, 10%, and on a proposal the figure for their size · next step

Company read

A page about the reader's own company before anything about us: their world from their own published figures, each function today beside on agents, the workflow they described, what their companies could do together, the plan on their calendar, and the questions only they can answer. Step 02 of a warm family, before the approach.

SectionBlocks
Opening (H1)section label · cover · label · the standard title · one line
Your companylockup, a dated fact in the heading · stats (four) · card grid, parts, one card per company
How the work runslockup · compare, one row per function
One workflowlockup · workflow, across, three to five steps, no caption
Togetherlockup · card grid, parts (optional)
The planlockup · workflow, across
What we would confirmlockup · list of questions · next step

Public page

The homepage, About and Articles. They are moving onto these blocks one page at a time: each renders first as a staging draft, and its live page switches once the two have been compared side by side.