RelayCTX™Print concept v1 · tokens v3.6 · Aug 27 2026
Hand someone a Code, the context travels.
An early-access invite card for print at Jukebox. The card is the product's own gesture in physical form — Relay exists so a Code moves context between sessions and people, and this is that gesture on 20pt stock. Generated from canon by scripts/make_invite_card.py; the QR is real and decodes to a live URL.
01 — The card
Square 2.5" — front
Dark theme, full bleed. The mark in the light-mode teal — the press-safe one (see §5) — the wordmark carrying the ™ (first use on the surface), and the Cormorant line. Nothing else earns the space.
Light theme. QR at 0.96", then the Code under an ACCESS CODE label — the label sits on the Code, not on the QR, so it reads as an instruction rather than a category. URL below as the no-camera fallback.
The live register page reads three URL params — ?code= prefills and validates the access code, ?email= prefills the address, ?ref= attributes the referral. A valid code unlocks immediately; without one the submission lands as a pending waitlist registration.
Link
What happens on scan
relayctx.com/register
Register form, no code. Lands as pending — works today, nothing to mint.
relayctx.com/register?code=CODE
Code prefilled and validated on arrival; unlocks immediately. The code must exist first.
relayctx.com/register?code=CODE&ref=erik
Same, plus referral attribution on the registration record.
The printed card commits the URL permanently. Mint the access code in the admin console before the run, then regenerate — a card whose code was never created is a dead card, and there is no fixing it after 100 of them are in a box.
One code per event is what makes a print run attributable — the code itself says which event the signup came from, with no extra tracking. --event slugs the name and appends the year (SaaS North → SAAS-NORTH-2026); a name that already ends in a year is not given a second one. Codes are validated against ^[A-Z0-9][A-Z0-9-]{0,30}[A-Z0-9]$ — the same rule the server and the register page enforce — so a code the card prints can never be one the server rejects. The script also refuses to run without Outfit, Cormorant Garamond and JetBrains Mono installed, so the type can never silently fall back.
04 — Print specification
Item
Value
Note
Trim size
2.5 × 2.5" · 3.5 × 2"
Square matches the Jukebox option priced at 100 for $69
File size (with bleed)
2.75 × 2.75" · 3.75 × 2.25"
0.125" bleed on all four sides
Safe margin
0.125" inside trim
No type crosses it
Resolution
600 DPI
1650×1650 px square · 2250×1350 px standard
Colour
sRGB
Mark ships at the light-mode accent, which is inside coated CMYK gamut — see §5
Stock / finish
20pt, matte
Matte suits the dark front — gloss shows fingerprints on a full-bleed dark field
Geometry follows standard print tolerance. Confirm against Jukebox's own downloadable template before ordering — their spec page was not reachable from the build environment, so these are industry-standard values rather than values read off their site.
05 — Two things that will bite
The card prints the light-mode teal, on purpose. Measured in CIELAB, the light-mode accent is L* 55 / C* 35 — inside coated four-colour gamut, so it prints as designed. The dark-mode accent is L* 77 / C* 46, beyond what process ink reaches at that lightness; it is a screen affordance and comes back duller and greyer on paper. On the dark card the light-mode value still reads 5.19:1 against the ground, well past the 3:1 a graphic mark needs. No new brand green is required — the system already contains a print-safe one. --mark vivid forces the screen value if you ever want it; --mark white removes the question entirely.
The QR must stay dark-on-light. It is on the light side for that reason. Inverted QR codes fail on a meaningful share of scanners. Decoded from the rendered 600 DPI raster at every step, and it still resolves at 150 DPI (square) and 100 DPI (standard) — a phone framing a card delivers far more than that.
PNG is the print file, not the SVG. The SVGs carry live text and need all three brand faces installed. The 600 DPI PNGs have no font dependency and are what goes to Jukebox. Keep the SVG for editing.
The code is printed as text too. Not just encoded in the QR. A camera fails, a lens is dirty, someone is on a laptop — the Code and the URL are both readable without scanning anything.