Guides

The studio composes keepsakes; these guides explain the rules it composes by. Every behaviour described here is a rule written into the studio's own engine, and every figure on these pages is produced at build time by that engine on fictional inputs, as the methodology page describes. The guides offer no advice about occasions, and the only printing advice they repeat is the methodology's: test a proof print. They describe what the studio does, why it does it, where it stops, and how to read what it tells you.

How the studio composes a keepsake

A project is one serialisable state: a title, one of 6 occasions (Wedding, Memorial, Anniversary, Graduation, New arrival, Celebration), a payload that is either a link or a text message, one of 5 frame templates (heart, floral, ring, classic, confetti) or no frame, a 3-colour palette, a caption, a module style of classic squares or hearts, and a photo-woven flag. An occasion only suggests a template — a fresh wedding project opens on the floral frame — and every template stays available for every occasion. The guide walks through each field, each template's proposed palette, and the rule that makes recolouring safe: palette colours recolour only the frame art, the panel's border stroke and the caption — never a module — while the code is nested verbatim on an opaque panel above the frame art. Module colour is the renderer's, not the palette's: classic modules render black by default, which the renderer measures at 21.00:1 on white, and the heart-module renderer's own default foreground measures 9.57:1 on white — both clear the engine's 4.5:1 floor.

Error correction, chosen for print

The artistic engine's first rule is that every decorated style encodes at error-correction level H: decoration spends decode margin, and only the “~30% recovery of EC-H” leaves enough. The cost is density. At that level a fictional short link (https://example.com/album) becomes a version 4 symbol of 33 × 33 modules, while a fictional long one (https://example.com/albums/2027/06/ella-and-sam/shared-photos?guest=table-12) needs version 8 at 49 × 49 — more, smaller cells in the same printed square, plus the 4-module quiet zone the renderer never omits. The guide pairs those symbol sizes with the readouts the engine computes at 300 DPI — a 2048-pixel PNG prints at 6.83 in × 6.83 in (173.4 mm × 173.4 mm) at 300 DPI — which is why long destinations may need larger prints.

Composition stays in your browser

Framing, captions, styling and photos are processed by JavaScript on your own device, and nothing you type or place on the canvas is transmitted in order to render a preview or produce a download. The guide lists what that covers, then takes the methodology's statement about saving — “the saved record contains the project's settings and the composed design — the working photos themselves are not uploaded” — down to the state shape itself: the photo in photo-woven mode is deliberately not part of the project state, so it cannot be serialised. It closes with how to confirm this in your browser's network tab.

How the 30-day retention works

Saved projects carry an expiry timestamp set 30 days ahead at save time, and the database's row-level security policy makes expired rows invisible to every client — the policy that grants you access to your own projects also requires them to be unexpired. The guide explains why that differs from a scheduled cleanup job or a client-side filter, what the background purge does afterwards, how to read a project's “kept until” label, and why a downloaded file is independent of all of it.

How Live Keepsakes reveal

A live keepsake is hosted by design, unlike a downloaded file, and both of its screens are driven by small state machines that never move backwards. On the sender's screen a tap on the photo moves the card from photo to dissolving, and the end of the dissolve lands on qr; with reduced motion on, the same tap goes straight to qr. On the recipient's screen a loaded reveal moves from loading to revealing and then open, while a missing or expired one lands on gone. The reveal burst draws 120 particles, or 0 under reduced motion. The guide also covers the draft rules — 5 occasions and a message of at most 500 characters; a fictional draft one character over returns “The message can be at most 500 characters.” — and the allowlisted public read path, which returns only occasion, message and style.

Decode verification in the studio

Every artistic render is rasterised at 3 sizes — 800, 1200, 1600 pixels — and decoded by a real QR decoder in your browser; the badge is earned when at least 2 rasters decode to an exact byte match. A fictional render that decodes at every size but 1600 pixels reads: “Verified scannable at 800, 1200 px (2 of 3 rasters) — decoded back to your exact content.” The guide shows the failing verdicts, explains sampling resonance — why one raster can miss while the others decode — the order in which mismatch, undecodable and error verdicts are reported, and what verification cannot promise about a physical print.

What the studio does not model

Three limits, stated as the methodology states them. Destination longevity: the studio verifies the format of what you encode, not the future of the service it points to, so for the longest-lived keepsakes point codes at destinations you control. Print-shop colour fidelity: contrast and sizing guidance follows scanning practice, but printers, papers and inks vary, so test a proof print before a large run. Scan counting or analytics: static codes cannot report scans and the studio adds no tracking to your destinations; if you need scan counts, that is a different product. The guide gives each limit its reason and its alternative.

Where to go next

Open the studio to compose a keepsake, read the methodology page for the vetted summary these guides expand, or the about page for what the studio is and who publishes it.

A note on the figures: every number on this page was computed at build time by the studio's own engine on fictional inputs, so it cannot disagree with the editor. Test a proof print before a large run. Composition and verification happen in your browser — the methodology page states what is and is not modeled.