DDP Hunt turned RBC's Digital Developer Practice event into a scavenger hunt: attendees scanned hidden QR codes around the venue, earned points, unlocked achievements, and redeemed prizes from a shop — all while a leaderboard tracked the standings live.
The brief
Developer events live or die on engagement — will people actually visit the sponsor booths, sit through the talks, and talk to each other, or just drift off to their phones? The ask was a lightweight game layer that made moving around the event worth it, plus tooling organizers could trust to run live, mid-event, without needing a developer on standby.
How the hunt works
- Each hunt item — a talk, a booth, a sponsor table — gets a unique identifier and a QR code, generated per-environment (localhost, staging, production) from the admin panel.
- Attendees scan with the in-app camera scanner (react-zxing); the identifier is validated and matched against the item's active window and claim cap.
- A successful claim credits points, checks whether it unlocks a collectible or achievement, and logs the attempt — successful or not — for auditing.
- Points move on the leaderboard immediately and can be spent in the shop for prizes, some limited-quantity and time-boxed.
Designing the points economy
Everything claimable — hunt items, shop prizes, collectibles, achievements — shares the same shape: an activation window, an optional claim cap, and a point cost or reward. That consistency meant one admin form pattern could create and schedule all of it ahead of time, so items could go live automatically as the event's schedule unfolded instead of someone manually flipping switches between sessions.
Achievements layer on top as a second, derived reward: some unlock from a specific hunt item, others from hitting a claim-count threshold. Both are computed off the same claim history, so adding a new achievement never means touching the claiming logic itself.
Role-gated admin tooling
Auth0 issues a custom roles claim (Admin, Volunteer, Hunter) that gates everything server-side. Admins get full CRUD over hunt items, shop prizes, collectibles, and achievements, plus a live claim-attempts monitor to catch anything that looks like abuse in real time. Volunteers get a scoped-down panel for redeeming points at the shop table without touching the rest of the system.
Every admin mutation — editing a hunt item, adjusting a user's points, redeeming a prize — writes to an audit log with the before/after state, who made the change, and when. For a tool running live across a multi-day event with several admins on shift at once, that trail mattered more than almost anything else in the app.
On-site
Shipping it was only half the job — the other half was standing in the room explaining how it worked, onboarding attendees on the first scan, and watching the claim-attempts monitor during the busiest windows to make sure nothing broke.



