QR stickers
The shortest path from “this thing is broken” to a filed incident is a QR code on the thing itself. CondoPulse generates a printable sticker sheet with one code per asset; a resident scans the sticker on the broken treadmill and lands on the report form with that treadmill already selected.
How the codes work
Section titled “How the codes work”Each asset gets a short public URL:
GET /r/[assetId]It’s a public redirect to /incidents/new?assetId=... - the report form
with that asset pre-selected. Two details worth knowing:
- Scanning is public; submitting is not. Anyone can follow the link, but the report form still requires login. A visitor who scans without an account hits the sign-in step; residents who are already signed in go straight to a half-completed form.
- The QR encodes your deployment’s base URL (taken from
BETTER_AUTH_URL, or the request host) - so set that env variable to your real public URL before printing, or the stickers will point at the wrong host. Reprinting fifty laminated labels because the codes embedhttp://localhost:3000is a rite of passage you can skip.
The redirect carries only the asset ID. Severity, title, description, photos, and the anonymous option are all chosen by the reporter on the form, exactly as in the normal flow (see Reporting an issue).
The sticker sheet - /admin/qr
Section titled “The sticker sheet - /admin/qr”/admin/qr (staff) renders a printable sheet with one card per
asset. Each card contains:
- the QR code (crisp SVG - scales to any label size without pixelation),
- the asset name (“Elevator A2”), so a human can confirm they’re scanning the right sticker,
- the call to action - “Scan to report an issue”,
- and the property name.
The sheet is laid out as a CSS grid sized for label sheets: print it onto adhesive label stock from a normal printer, peel, and stick. Printing is just the browser’s print dialog - the same print-first approach as the /report page.
Printing tips
Section titled “Printing tips”- Print at 100% scale - disable “fit to page”, which can shrink codes and misalign label boundaries.
- Do a plain-paper test first, scan a couple of codes from the page with a phone, and check each lands on the right asset’s form.
- Laminate (or use weatherproof stock) for harsh spots - the parking garage door and pool-area stickers live outdoors-adjacent lives.
- A new asset means one new card - re-open
/admin/qrand print the one sticker you need.
Where to put stickers
Section titled “Where to put stickers”The rule: at the point of failure, at eye height.
| Asset | Spot |
|---|---|
| Elevators | Inside the car, next to the panel - where the stuck person is |
| Gym | On each major machine, plus one at the door |
| Pool | At the entrance gate (where “it’s closed/green water” gets noticed) |
| Parking garage door | On the wall beside the door, driver’s-window height |
| Laundry | One per machine |
| Fire alarm panel, HVAC | At the panel - useful to staff and contractors too |
Why this moves the needle
Section titled “Why this moves the needle”The friction it removes is real: without the sticker, reporting means remember the URL → sign in → find the asset in a picker → describe it. With it: scan → describe → submit. In practice that’s the difference between “I kept meaning to report that treadmill” and a timestamped incident with a photo - filed by the person standing in front of the problem at the moment it’s a problem.
It also improves data quality where it matters most for the building’s record: reports arrive attached to the right asset, which is exactly what drives the uptime bars, the digest’s downtime hours, and the asset health ranking in Insights. An asset-less report has to be triaged by hand; a scanned one is born triaged.
Pair the stickers with the lobby kiosk and the loop closes in public: scan the sticker on the dead treadmill, and the incident is scrolling across the lobby screen - with the gym’s slat turning amber - before you’ve finished your workout.