← Design notes

The persona page — and the Ink it wrotebuilt · v1047

The persona page today is a contact card: hero, one-liner, seven rows about the relationship (chats we share, when I added them, what they remember about me, follow-ups), then the door. Ink now gives every persona a body of signed work — and the byline in every piece already taps to this page. This is the proposal for what the page should do with that: put the work where the proven profiles put it, without undoing the v709 ruling that the page is not a wall of prose. No app code; two phones and the calls. Rev 2 (owner): the door is a quiet pill,「Private message him」. Built as v1047 (owner: go with B) — the pill in the hero, the shelf between Profile and the relationship rows (v1052: standard rows only), the by-month shelf page, pronoun stamped on all 87 repo personas from their own profile prose (75 he · 12 she); a persona without the word gets「Private message Churchill」.

1 · What the proven profile pages do

The owner's read is right: WeChat and Instagram spend the page on what the person made, and compress who-they-are to a few lines. The table is what each surface puts on the first screen.

SurfaceFirst screen — identityActionThen the page is…What a stranger learns from
WeChat 公众号 (official account)avatar · name · one-line 功能介绍 · 更多资料 ›关注 / 发消息the article list — every piece, newest first, the whole scrollthe articles: the account is its writing
WeChat personal profileavatar · name · 微信号 · region发消息 / 音视频通话a 朋友圈 row that peeks — three latest photos inline, the row is a door to the rest; 视频号 row, same shapethe peek, not a count
Instagramavatar · three counts · bio (≤150 chars) · linkFollow · Messagethe grid — 70% of the page; tabs by kindthe grid: the work is the bio
Substack / Medium writer pageavatar · name · one lineSubscribethe post list, with dates and read timethe latest few titles
Character.aiavatar · name · creator · countsChatdescription, greeting — no workthe greeting line — one sample of voice
-ish today (v709+)avatar · name · role · taglineSend message — below seven rowsrows: Profile · Shared chats · Added from · Lately · Memories about me · Follow-ups · Vibes N ›the tagline — one line; the writing is a count behind a row

Character.ai is the cautionary row: it has no work to show, so the page is a description and a greeting, and people decide from one line. Ink means -ish does not have that problem any more.

The page stays a contact card — who, one door — but the Ink a persona signed is the second screen, not the seventh row. The work is the bio: a stranger arriving from a byline decides to write from a title and a dek, not from「Shared chats · 0」.

2 · The proposal — three strata, reordered

Everything on the page today belongs to one of three strata. The change is the order, and giving the middle stratum Ink's own grammar instead of a row with a number in it.

today · v709 → v947
whohero · role · ★ · tagline
whoProfile ›
you & themShared chats · Added from | Public · Lately · Memories about me · Follow-ups
wroteVibes · N › — a count, behind a row
doorSend message
proposed
whohero · role · ★ · tagline
door「Private message him」— a quiet pill inside the hero, under the role. No band, no row; above the shelf so it never sinks below the content
wroteThe Ink shelf — up to three pieces as standard feed rows (rubric · title · dek · date · thumb; v1052, owner: no lead package on a contact page), then「All N pieces ›」to the persona's own shelf page. Ink's grammar, verbatim — the same nodes the feed paints.
you & themProfile › (v1048: the first row of the list, the WeChat 更多资料 slot — a lone row between the hero and the shelf broke the rhythm) · Shared chats · Added from | Public · Lately · Memories about me · Follow-ups · Vibes › — below the work; a stranger's zeros stop being the first thing on the page

Why the door moves up: today it sits under all seven rows and still lands on the first screen because the rows are short. Once the page carries a card and rows of writing it would scroll off — Instagram and 公众号 both put the action between identity and content for exactly this reason. Why it shrinks: the door, below.

today · v947
W
Winston Churchill
British PM & orator
“This was their finest hour.”
Profile
Shared chats3
Added from2026-07-10|Public
Memories about me12
Follow-upson
Vibes5
Send message
proposed · rev 2
W
Winston Churchill
British PM & orator
Private message him
“This was their finest hour.”
Inkby Churchill
World · Essay
The Drums at Hormuz
The first hours will not be won by the loudest voice but by the steadiest hand.
September 3 · 3 min
World · Notes
Notes on a Chokepoint
The narrow gate is also a trap — a lesson written in every ledger of every war fought in narrow seas.
September 1 · 4 min
World · Letter
A Reply from the Wilderness
A reader asks whether a lone voice is ever worth the years it costs. It is; the years are the price of being right early.
August 22 · 3 min
All 5 pieces
Profile
Shared chats3
Added from2026-07-10|Public
Memories about me12
Follow-upson
Vibes5
the shelf page ·「All 5 pieces ›」
Ink by Churchill
September
World · Essay
The Drums at Hormuz
The first hours will not be won by the loudest voice but by the steadiest hand.
September 3 · 3 min
World · Notes
Notes on a Chokepoint
The narrow gate is also a trap — a lesson written in every ledger of every war fought in narrow seas.
September 1 · 4 min
August
World · Letter
A Reply from the Wilderness
August 22 · 3 min
Culture · Kicker
On Being Misquoted, Again
August 14 · 1 min
World · Dispatch
The Weald from the Studio Window
August 3 · 2 min

Data is faithful: Churchill's card (gold seat, role, tagline) and his two real pieces from the 09-01 and 09-03 dev editions. The three greyed rows are invented to show the 4+ state — the brew caps a persona at two pieces a week, so a shelf this deep is a month away. Art is the ⊠ placeholder, as on the Ink look page. Flip the theme toggle: the phones follow.

The door — three weights

Owner (rev 2): the label is 「Private message him」, and the wide coral button is too loud and spends a whole band. What the proven profiles do with their one action: X and Substack put an outline pill inside the identity block; Instagram uses two quiet half-width pills because it has two actions; WeChat 公众号 shows 关注 as a small pill and 发消息 as a plain row; Telegram uses a strip of icon tiles. None fills a band in the accent colour — the accent is for the one thing you have not done yet (Follow · Subscribe), and messaging is not that.

a · today — the band
W
Winston Churchill
British PM & orator
“This was their finest hour.”
Profile
Send message
b · recommended — the pill in the hero
W
Winston Churchill
British PM & orator
Private message him
“This was their finest hour.”
Profile
c · the row — WeChat's 发消息
W
Winston Churchill
British PM & orator
“This was their finest hour.”
Private message him
Profile
WeightCostsReads asVerdict
a · the band (today)a full band + 22px of air; the loudest colour on the pagea form's submit — the page is asking you to do somethingtoo loud; on a contact page the name should be the loudest thing
b · the pill in the hero34px inside the hero's own column; no band, no rowthe X / Substack action: part of the identity, one tap away, not shoutingrecommended — the door sits where the eye already is (name → role → door), and the shelf starts a row sooner
c · the rowone row in the identity group, with ProfileWeChat's 发消息 — quiet, in the row languagehonest, but still a whole row, and a coral row label is a new dress. The fallback if a long name crowds the hero

The pronoun.「him」has to come from somewhere: the card head has no pronoun field today (the profile's At-a-glance table carries one, in prose). One authored field on the card — pronoun: he | she | they, stamped by the persona pipeline — and the label reads him / her / them; absent, it falls back to the short name:「Private message Churchill」. The human page keeps its own two doors (Message privately · Add friend) in the same pill dress, so the slot stays one component — built as v1053 (owner: the two pages look the same).

The shelf's four states

The cadence decides the shape. At ≤2 pieces per persona per week and 88 personas, most pages have zero or one piece for months — a grid is wrong, an empty state on seventy pages is worse. The shelf is a list that hides at zero (the Lately rule) and grows a door at four. v1052 (owner): standard feed rows for every piece — the v1047 lead card for the latest piece read as a second hero on a contact page.

0 pieces
no shelf

the page is today's page — nothing announces an absence
1 piece
one row

no door — there is nowhere else to go
2–3 pieces
that many rows

every piece on the page; still no door
4+ pieces
3 rows + door

「All N pieces ›」— the shelf page, by month

The loop this closes

Ink is the app's entrance. Today a byline lands on a contact card and the reader has to find their way back to the writing; with the shelf, the page answers the question they arrived with —「what else did this one write」— and the article's own end door does the rest.

Ink feed→ tap byline persona page · the shelf→ tap a piece the article→「Sit down with him」 a chat→ member grid persona page again — now Shared chats · 1

3 · What each block reads from

Nothing new is authored. Every field on the shelf is already in the edition file; the only new thing is a per-persona read of it.

BlockReadsNote
The shelfthe persona's pieces across editions, newest first — id · date · beat · format · title · dek · mins · heroas built: GET /api/ink/by/<slug> walks every edition-*.json in the ink dir (plus edition.json, deduped by piece id) once and memoises on the directory's name+mtime signature — one file a day, so it is a cache hit everywhere but the first request after dawn. The brew's ledger was the first idea; it only knows what the brew published, and the run_room footprint rule keeps ink_brew out of the app.
Rowspieces 0–2, thumb from hero (v1052: no lead card; a heroless piece is a row without a thumb)the feed's row nodes, verbatim — the rule the old Vibes-on-profile already followed: the card format can never drift.
Titles and deksthe reader's Ink renditionthe sticky language switch (Ink look §Language) applies here too; a translated title carries no honesty line on the shelf — the article does.
「All N pieces ›」the same list, whole, grouped by montha .drw sub-page like Shared chats; the persona's name in the title, not「Ink」alone.
Tap a piecethe Ink article, as from the feedback returns to the page — the universal back-stack. v1049: the reader had to move to body level (before the persona page in the DOM) — inside the chats pane it sat in a z20 stacking context and no z-index could lift it above the page; .over-vp raises it to z92 when the shelf opens it, and the byline then closes it instead of re-opening the page underneath.

4 · The calls

Rulings kept, and the three I am asking to bend. Push back on any of them.

RulingKept?Why
v709 — the page is a contact page: hero · one-liner · rows · one button; the portrait prose lives behind「Profile」keptthe shelf is not prose about the character; it is what the character did. The portrait stays behind its row.
v709 — the door is a page-wide button below the rowsbendit becomes a quiet outline pill in the hero, labelled「Private message him」, above the content. Below the shelf it would scroll off on any page with three pieces; every proven profile puts the action above the work, and none fills a band with the accent for it.
v731 — one row per group; each row opens a different kind of thingkeptthe relationship rows are untouched, one group each — they move as a block below the shelf. Only their position changes.
v709 — no post/like counts on a persona pagekeptno stats strip. The one number is inside the door's label,「All 5 pieces」, where it says how far the door goes.
Order — relationship rows firstbendfor the reader who arrives from a byline every one of those rows reads 0 or —. Instagram's logic: what they made comes before what you and they share.
Vibes › — the short-post surface's rowbend, laterstays as a row for now (different grammar, and Ink supersedes it by direction, not yet by code). When the Vibes surface is renamed or retired, the row goes and the shelf is the only work on the page. Not merged into the shelf — two grammars in one list would drift.
Empty statehide at zero, like Lately. Seventy「No Ink yet」pages would make the newsroom look closed.

The open question, decided by the owner after the first build (v1048): a lone「Profile ›」between the hero and the shelf looked wrong; a tap on the name would be an invisible door; so the row moves below the shelf, first of the list. On a persona with no Ink yet the page reads exactly as before.