Exchange · Mechanics
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.
Relay never sees a reader twice, keeps no cookie on them, and books the trade only where both ends agree.
Everything the exchange knows about a trade happens at one of these. Nothing is inferred in between.
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.
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.
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.
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.
Relay redirects to the article with ?rl= attached. The receiving member's own block sees it and reports the arrival, once.
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.
Three things, multiplied:
Then two cuts: no member appears twice in one block, and no two cards may be the same event.
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.
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.