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.

fresh
fading
endangered
ghost
fossil
typography
typography at fresh; telemetry warms up over the first week.
typography at fading; telemetry warms up over the first week.
typography at endangered; telemetry warms up over the first week.
typography at ghost; telemetry warms up over the first week.
typography at fossil; telemetry warms up over the first week.
border
border at fresh; telemetry warms up over the first week.
border at fading; telemetry warms up over the first week.
border at endangered; telemetry warms up over the first week.
border at ghost; telemetry warms up over the first week.
border at fossil; telemetry warms up over the first week.
tempo
tempo at fresh; telemetry warms up over the first week.
tempo at fading; telemetry warms up over the first week.
tempo at endangered; telemetry warms up over the first week.
tempo at ghost; telemetry warms up over the first week.
tempo at fossil; telemetry warms up over the first week.
selection
selection at fresh; telemetry warms up over the first week.
selection at fading; telemetry warms up over the first week.
selection at endangered; telemetry warms up over the first week.
selection at ghost; telemetry warms up over the first week.
selection at fossil; telemetry warms up over the first week.
drag-highlight
drag-highlight at fresh; telemetry warms up over the first week.
drag-highlight at fading; telemetry warms up over the first week.
drag-highlight at endangered; telemetry warms up over the first week.
drag-highlight at ghost; telemetry warms up over the first week.
drag-highlight at fossil; telemetry warms up over the first week.
focus
focus at fresh; telemetry warms up over the first week.
focus at fading; telemetry warms up over the first week.
focus at endangered; telemetry warms up over the first week.
focus at ghost; telemetry warms up over the first week.
focus at fossil; telemetry warms up over the first week.
underline

link

underline at fresh; telemetry warms up over the first week.

link

underline at fading; telemetry warms up over the first week.

link

underline at endangered; telemetry warms up over the first week.

link

underline at ghost; telemetry warms up over the first week.

link

underline at fossil; telemetry warms up over the first week.

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

pointer
typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh
keyboard
typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh
curl
typography × fresh · https://a.getsven.com/api/docs#axis-typography-stage-fresh

0 bytes · pointer ≡ keyboard ≡ curl

jump to focused cell

Three 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 as text/plain (default) or application/json (via Accept). Byte-identical to what the click and keystroke mouths place on the clipboard.
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.

API parity: passing 7 rows · 3 channels · build-enforced

7 actions · 3 mouths each · build-enforced parity.

cite-cell
pointer c|Enter|Space GET /api/docs/cite
cite-cell has pointer, keyboard, and curl mouths.
submit-post
pointer ⌘↩|Ctrl+Enter POST /api/submit-post
submit-post has pointer, keyboard, and curl mouths.
keep-post
pointer K POST /api/keep
keep-post has pointer, keyboard, and curl mouths.
revive
pointer R POST /api/revive
revive has pointer, keyboard, and curl mouths.
stance
pointer 1|2|3 POST /api/stance
stance has pointer, keyboard, and curl mouths.
revive-citable
pointer n GET /api/docs/journey?step=revive
revive-citable has pointer, keyboard, and curl mouths.
verdict-resolve-citable
pointer u GET /api/docs/journey?step=verdict-resolve
verdict-resolve-citable has pointer, keyboard, and curl mouths.

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