QR CODES

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.

THE PRINTNEVER CHANGES
printed MAY 12 · matrix 4f00d9today · still 4f00d9 ✓ verified · reprints 0
WHAT SCANNING IT RESOLVES TOSEP 21
302 · go.acme.com/menu → acme.com/event-recap · 11 ms at the edge

ONE SUMMER, THREE DESTINATIONS, ZERO REPRINTS — THE LEFT PANE IS THE POINT

DYNAMIC VS STATIC

The difference is what’s in the ink.

“Dynamic”, “tracked” and “routed” aren’t three features. They’re one architectural fact with three consequences.

STATIC — URL IN THE INK

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.

encodes: https://acme.com/menu/summerEDIT = REPRINT EVERYTHING
DYNAMIC — POINTER IN THE INK

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.

encodes: go.acme.com/menuEDIT = ONE FIELD
DESTINATION SWAP — LAST TUESDAY
PRINTEDgo.acme.com/menuunchangedDESTINATIONacme.com/menu/summeracme.com/menu/autumn
edited 2 days ago · 1,204 scans since · reprints 0

No reprints, ever.

ANATOMY

Know what you’re printing.

Four parts, one budget. Worth two minutes before it goes on ten thousand boxes.

ENCODES go.acme.com/menu · VERSION 2 · 25×25 MODULES · EC M · MATRIX 4f00d9

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.

BRANDING STUDIO

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.

DASHBOARD · QR SETTINGS — AS SHIPPED
Logo — acme-mark.pngsits on a white chip; contrast is scanability
FOREGROUND#101028
BACKGROUND#FFFFFF
MODULE SHAPE
Module shape applies to data modules only; the three finder squares always stay standard squares.
CORNER RADIUS12 px
params: utm_source=qr (editable, per code) · export: PNG · 1024 px
PREVIEWgo.acme.com/menu · EC M

The logo spends the same budget damage does.

error correction × the same logo, honestly
L · 7% toleranceThe logo alone spends most of it. Screens only.
M · 15% toleranceThe default. Logo fits — barely.
Q · 25% toleranceLogo plus a scuff or a fold.
H · 30% toleranceLogo plus shelf life. Print this.

A 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.

PLACEMENTS

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.

Per-surface size variants — in build
PACKAGING
MENU
EVENT BADGE
FLYER
TV / OOH
SCAN ANALYTICS

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.

EXPORT CSVEXPORT JSONSAME p50 · 11 MS

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 SHAPE
QR × SMART ROUTING

Routing 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.

scan · Berlin · Android · 19:42acme.de/karteGEO + LANGUAGE
scan · Austin · iPhone · 08:15apps.apple.com · Acme appDEVICE

All four rule types, in depth → /smart-routing

START NOW

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