One permanent, claim-aware doozer.link + QR per site — the printed asset that flips from the claim page to the real site on claim.
Every Doozer site gets one permanent shortlink and QR — a real, printable asset. It lives at doozer.link/<slug> and is claim-aware, so the same printed code changes where it points the moment the business is claimed. Engine: includes/shortlinks.php (host doozer.link → shortlinkHandleRequest from index.php). Table: shortlinks (self-heals).
kind='site' marks the canonical per-business link (campaign = static per-campaign,the old default). is_primary marks THE current one (the Doozer+ vanity, once set).
shortlinkForSite($bizId) get-or-creates the primary site link (idempotent).shortlinkSiteDestination): if thebusiness is claimed (admin_email set) and has an active domain → the real site; else → the redeem page (?page=redeem&b=<id> — business identified, the code is NEVER in the URL, see implicit verification). So the flip needs no destination edit and no chasing every claim path.
make_shortlink), so amailed QR switches to the site on claim. Newly-claimed businesses get the link created at redeem time.
?e=qr (in api-endpoints.php) — a same-origin QR image, proxied + cached from api.qrserver.com to cache/qr/. Params: slug|data, size, fg, bg, format (png|jpg). Same-origin (with Access-Control-Allow-Origin:*) is required so the owner panel can export a transparent PNG on a canvas (a cross-origin image would taint it) and any surface can copy the QR image to the clipboard (siteQrCopyScript(), [data-qr-copy], a fetch → ClipboardItem → toast).
?page=manage (manage-business.php, owner-gated) → the "Link & QR" panel: thedoozer.link big with one-click copy, live QR preview, color picker, high-res downloads (PNG transparent / PNG white / JPG white), scan-prompt copy, and a switch to show the QR on the site.
includes/site-qr.php draws a muse-hardened footer QR card("Scan to keep us handy"). Setting = businesses.custom_settings.qr_display (off|footer|header|both); on by default for claimed (siteQrShouldShowFooter). Header/hero placement is a future muse/design pass.
shortlinkSetVanity($bizId, $slug) sets a friendly slug (e.g. doozer.link/powell-flooring) as the new primary; old slugs stay active and keep resolving (old printed QR still works — "use the new one going forward"). Doozer+ gated (businessIsPremiumOwned), owner-gated (?ajax=manage_vanity). Postcards auto-print the primary, so they pick up the vanity with no extra wiring.
See also: claim codes, the flywheel, postcards.