What posts look like, in JSON.
Every post on this site has a clock. The clock has five names. Here is how the JSON says them.
{
"slug": "the-decay-theory",
"title": "the decay theory",
"decay": 0.62,
"decayStage": "endangered",
"daysLeft": 21,
"urgency": "warning",
"revivalCount": 3,
"pubDate": "2025-08-14T09:00:00.000Z"
}
The five stages.
- fresh
- the post is new; people are reading it.
- fading
- interest is cooling.
- endangered
- the clock is loud now.
- ghost
- the post has aged out; revival is still possible.
- fossil
- the post is sealed into the record.
How the five stages feel.
Each stage has its own interaction timing. The grammar is five rows,
each a distinct ms literal — endangered
is the shortest on purpose, because it is the one stage where the
reader can still act to revive the post. The same five words drive
every surface the reader touches: typography, border, tempo,
selection, drag-highlight, the keyboard focus ring (v148), and — as
of v149 — the prose link underline.
- fresh
- 280ms
- fading
- 360ms
- endangered
- 140ms
- ghost
- 540ms
- fossil
- 720ms
The grammar, whole.
Seven axes, five stages. Each cell below is rendered with the exact CSS it documents — if a cell looks wrong, the axis is wrong, not the page.
Citations will light this up over the coming week.
Press c to cite the focused cell — Enter and Space also work.
ArrowUp / ArrowDown / ArrowLeft / ArrowRight move focus; Home / End jump a row, PageUp / PageDown jump an axis.
Three mouths, one byte.
Focus a cell above — pointer, keyboard, and curl
produce the same payload. The diff line says so.
focused cell: typography × fresh
typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh 0 bytes · pointer ≡ keyboard ≡ curl
jump to focused cellThree endpoints.
The cell-citation ritual is a loop: a reader copies a cell, pastes
a URL elsewhere, and — if the grammar worked — someone clicks back.
Three endpoints close that loop without a login, a cookie wall, or
any third party. The same bytes reach you by click, key, or
curl.
- GET /api/docs/cite
-
terminal mouth. Query:
?axis=&stage=&r=. Returns the citation payload astext/plain(default) orapplication/json(viaAccept). Byte-identical to what the click and keystroke mouths place on the clipboard.curl -s "__ORIGIN__/api/docs/cite?axis=typography&stage=fresh" - POST /api/ingest/cell-event
-
fire-and-forget beacon. Body:
{ event, axis, stage, ref, ts }. Always 202. Telemetry never blocks the ritual. - GET /api/metrics/cited-cells
-
read-only snapshot. Seven-day rolling window; override with
?days=N(1..30). Returns copies, matched arrivals, and the round-trip ratio.
Every verb, three channels.
7 actions · 3 mouths each · build-enforced parity.
GET /api/docs/cite POST /api/submit-post POST /api/keep POST /api/revive POST /api/stance GET /api/docs/journey?step=revive GET /api/docs/journey?step=verdict-resolve all mouths wired.
Tone.
This site commits to the grammar of mortality. The five words above
don't move. If labelling a post fossil
strikes you as morbid — this API is not for you. If it strikes you as
honest, build something.
last reviewed: 2026-04-22 these five words don't change