Relay

Exchange · Mechanics

Mechanics of a trade

Short on purpose: a publisher should be able to read the whole arrangement in a few minutes and then check it against its own analytics. If the two disagree, that is a bug worth reporting.

Anatomy of a signed click

Relay never sees a reader twice, keeps no cookie on them, and books the trade only where both ends agree.

MEMBER A · THE BLOCK RELAY MEMBER B · THE ARTICLE RELAY BLOCK TOKEN site · offer · owner nonce · verified hmac · ttl 12 h LEDGER A: out +1 B: in +1 rate 1:1 · fee 0 ?rl=NONCE SEEN HERE block reports the arrival once, then forgets it 1 · CLICK /r/<token> 2 · 302 → article?rl=… 3 · POST /api/v1/land SINGLE-USE NONCE · ORIGIN-BOUND KEY · NO COOKIE · NO PROFILE · NO THIRD PARTY

The six moments that count

Everything the exchange knows about a trade happens at one of these. Nothing is inferred in between.

1

The block asks

One request carrying the member's public key. A key is bound to a domain: asked from anywhere else, Relay still answers, but marks the answer unverified and keeps it out of the ledger.

2

The rotator answers

240 fresh candidates in the language of the page, ranked, de-duplicated, cut to the four that fit — and only full rows are ever shown.

3

The block is seen

An impression is booked after the block has been in the viewport for a second. Delivery on its own counts for nothing, so the click-through rates that rank the pool are real.

4

The reader clicks

The link is signed with an HMAC, lives 12 hours and carries a nonce that can be spent once. A reloaded tab does not book a second trade.

5

The reader lands

Relay redirects to the article with ?rl= attached. The receiving member's own block sees it and reports the arrival, once.

6

The book moves

One out for the sender, one in for the receiver, at the rate of one to one. The exchange takes no cut, because there is nothing here to take a cut of.

What decides which headline you see

Three things, multiplied:

  • Click-through, smoothed. A headline with two clicks from three impressions is not better than one with 400 from 1 000 — the smoothing says so.
  • Freshness. Half-life of three days. Material older than 21 days leaves the pool entirely; nobody trades on an archive.
  • What the exchange owes. A member the network is in debt to gets carried further; a member that has drawn more than it gave keeps a weight of 0.15 and waits at the back.

Then two cuts: no member appears twice in one block, and no two cards may be the same event.

The duplicate gate

Newsroom A

Carlos Alcaraz confirms return to the tour after knee surgery

Newsroom B

Carlos Alcaraz announces return: the Spaniard will play in Cincinnati

Two newsrooms, one event. Relay compares words longer than three letters; when the overlap reaches half of the shorter headline, only the stronger card survives. Comparing the strings themselves would have let both through — they are not equal, they are the same news.

The ledger, in three numbers

Out is every reader a member handed to the network from its own pages. In is every reader the network handed back onto its articles. Balance is out minus in — the readers the exchange still owes it. A newcomer may take up to 100 readers before it has earned any, so its first block is not empty.

Pictures travel by copy, never by link

Relay fetches each preview image once, crops it to 400 × 225, converts it to WebP — around 8 KB — and serves it from its own domain with a month of cache. A member's servers carry none of the load of appearing in other members' blocks, and that stays true when the members are no longer ours.

What Relay stores about a reader

No cookie, no local storage beyond a single session flag that stops one arrival being reported twice, no profile, no third-party call. The click journal keeps a salted one-way hash of address and user agent, used to spot floods and nothing else, and it is pruned on a schedule.

Where the block goes

A strip directly above the footer, on every page of a member site except the legal ones — not only in articles.

The block lays a floor, never a ceiling. Every rule it writes lives in a CSS layer of its own, so any rule the host theme writes beats it without !important. Its sizes and colours read from --relay-* variables, so a theme restyles it by setting a handful of values instead of overriding rules one at a time.

It measures the theme's own content column and lines up with it, and it only ever renders full rows: one card stranded beside empty space reads as breakage, so the odd card is dropped and not counted as seen.

See the block in four host skins →

Not part of the deal

  • No paid placement. Every card is there because its newsroom earned the position.
  • No full text. A headline, a picture and a link — nothing is republished.
  • No cross-language blocks. Nobody is asked to show readers something they cannot read.
  • No silent cut-off. A member in the red keeps trading, it just waits its turn.