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」.
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.
| Surface | First screen — identity | Action | Then the page is… | What a stranger learns from |
|---|---|---|---|---|
| WeChat 公众号 (official account) | avatar · name · one-line 功能介绍 · 更多资料 › | 关注 / 发消息 | the article list — every piece, newest first, the whole scroll | the articles: the account is its writing |
| WeChat personal profile | avatar · name · 微信号 · region | 发消息 / 音视频通话 | a 朋友圈 row that peeks — three latest photos inline, the row is a door to the rest; 视频号 row, same shape | the peek, not a count |
| avatar · three counts · bio (≤150 chars) · link | Follow · Message | the grid — 70% of the page; tabs by kind | the grid: the work is the bio | |
| Substack / Medium writer page | avatar · name · one line | Subscribe | the post list, with dates and read time | the latest few titles |
| Character.ai | avatar · name · creator · counts | Chat | description, greeting — no work | the greeting line — one sample of voice |
| -ish today (v709+) | avatar · name · role · tagline | Send message — below seven rows | rows: 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.
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.
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.
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.
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.
| Weight | Costs | Reads as | Verdict |
|---|---|---|---|
| a · the band (today) | a full band + 22px of air; the loudest colour on the page | a form's submit — the page is asking you to do something | too loud; on a contact page the name should be the loudest thing |
| b · the pill in the hero | 34px inside the hero's own column; no band, no row | the X / Substack action: part of the identity, one tap away, not shouting | recommended — the door sits where the eye already is (name → role → door), and the shelf starts a row sooner |
| c · the row | one row in the identity group, with Profile | WeChat's 发消息 — quiet, in the row language | honest, 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 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.
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.
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.
| Block | Reads | Note |
|---|---|---|
| The shelf | the persona's pieces across editions, newest first — id · date · beat · format · title · dek · mins · hero | as 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. |
| Rows | pieces 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 deks | the reader's Ink rendition | the 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 month | a .drw sub-page like Shared chats; the persona's name in the title, not「Ink」alone. |
| Tap a piece | the Ink article, as from the feed | back 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. |
Rulings kept, and the three I am asking to bend. Push back on any of them.
| Ruling | Kept? | Why |
|---|---|---|
| v709 — the page is a contact page: hero · one-liner · rows · one button; the portrait prose lives behind「Profile」 | kept | the 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 rows | bend | it 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 thing | kept | the 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 page | kept | no 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 first | bend | for 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 row | bend, later | stays 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 state | — | hide 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.