Print it once.
Change where it goes, forever.
A rii.link QR encodes your short link — never the destination. The ink is permanent; the pointer behind it stays yours to edit. That one fact is the whole feature.
Demonstration: the printed flyer’s QR code never changes — matrix 4f00d9, zero reprints — while the destination it resolves to changed three times over one summer: a menu in May, a waitlist in July, an event recap in September.
ONE SUMMER, THREE DESTINATIONS, ZERO REPRINTS — THE LEFT PANE IS THE POINT
The difference is what’s in the ink.
“Dynamic”, “tracked” and “routed” aren’t three features. They’re one architectural fact with three consequences.
The full destination URL, turned into modules. It works — until the URL changes. Then every printed copy is wrong, and ink doesn’t take edits.
A short link, turned into modules once. The destination is a database row you edit; every printed copy follows instantly. The code on the shelf never knows.
No reprints, ever.
Know what you’re printing.
Four parts, one budget. Worth two minutes before it goes on ten thousand boxes.
Finder eyes
Three 7×7 anchors a camera uses to find and orient the code. They stay square here — styled eyes look distinctive and scan worse.
Data modules
The payload, bit by bit — your short link, not your destination. Shorter slug, coarser modules, scans from farther away. Another reason the URL doesn’t belong in the ink.
Quiet zone
Four modules of empty margin, part of the spec. Most “it won’t scan” complaints are a layout crowding this line.
Error correction
Redundancy woven through the matrix: up to 30% can be scuffed, torn or covered and the code still resolves. This is the budget your logo spends — next section.
Three real levers. No fake ones.
Exactly what the dashboard gives you: a logo, your colors, a module shape. When a generator promises gradients and custom eyes, ask what they cost in scans.
The logo spends the same budget damage does.
error correction × the same logo, honestlyA centered logo covers roughly 10–12% of the matrix. On anything that gets handled, shipped or weathered, print H — it keeps the rest in reserve.
One code, every surface.
It’s the same pointer whether it’s lacquered onto packaging or forty feet wide in a station. Print the size the surface needs; the link underneath doesn’t care.
A scan is a click.
Same table, same dashboard, same export. There’s no separate “QR analytics” product because there’s no separate pipeline — a scan arrives as a click.
And no hidden fingerprinting: codes arrive tagged only because the generator appends utm_source=qr to the link — visible in the settings, yours to change or drop.
Synthetic sample of the scan feed: time, city, device, the utm_source=qr tag and destination for each scan — the live analytics table has this exact shape.
SYNTHETIC SAMPLE — THE LIVE TABLE HAS THIS EXACT SHAPERouting rules ride along. Unbundling them is impossible.
A scan resolves through the same single path as a click, so every rule on the link — geo, device, time, language — already applies to the printed code. Elsewhere this is the paid add-on tier. Here there’s nothing to unbundle, so there’s nothing to bill.
Print it once. We’ll keep it pointed at the right place.
Codes are on the free tier — export a PNG in the next five minutes, reprint it never.
Codes look better on your own domain → /custom-domains