QR-Based Event Photo Sharing Platform
Event photos scatter across dozens of phones and group chats, and most never get shared. Hosts have no easy way to collect everything while the event is still happening.
Industry
Consumer events / photo sharing — self-initiated product concept
Role
Design & full build — self-initiated product concept
Impact
Photo collection goes from chasing guests in a group chat for weeks to scanning a code at the table — and the build shows how far a small, well-structured stack can go.
01 - Problem
The problem
Host a wedding, birthday, or company offsite and the pattern repeats: hundreds of photos get taken, and almost none make it back to the host. They sit on guests' phones, get dumped into a group chat that ruins them with compression, or land in a cloud folder half the guests were never added to. By the time the host starts chasing people a week later, the moment has passed. The real problem is timing — if collecting photos takes any effort beyond the moment itself, it doesn't happen.
I built this concept to test the thinnest possible fix: a QR code on the table or invitation. Scan it and you're in a shared gallery for that event — upload from your camera roll, browse what everyone added, done. No app, no account. It was also an exercise in the discipline I bring to client systems work: get the data structure right before features, and design for the messy cases — bad venue wifi, links leaking past the guest list, the uncle who uploads something the couple would rather not keep — from day one.
02 - System Flow
How the system moves
Host creates event
Next.js setup form
QR code generated
unique gallery link per event
Guest scans code
browser gallery, no install
Photos uploaded
compressed to Supabase Storage
Gallery updates
per-event feed, near real time
Host moderates uploads
approve, hide, or remove
Upload window closes
gallery archived for download
03 - Build
What I built
Per-event galleries with QR access
A Next.js app on Vercel where a host creates an event in under a minute and gets a unique gallery URL plus a printable QR code. Scanning it drops guests into a mobile-first gallery built with Tailwind CSS, where they upload from their camera roll and browse everyone else's photos — no install, no account. The whole thesis was removing every step between 'scan' and 'upload', so I cut anything that added guest friction.
Data model and upload pipeline on Supabase
Before any interface code, I modeled events, uploads, moderation states, and upload windows as first-class records in Supabase Postgres, with row-level security so each gallery only reads its own event's photos. Files go to Supabase Storage after client-side compression, keeping uploads workable on crowded venue wifi. Structure before features is the same rule I apply to client workflow automation — it's why moderation and gallery expiry slotted in later without rework.
Host moderation and event lifecycle
Hosts get one simple moderation view: switch a gallery to approve-first mode for formal events, hide or remove individual photos, and close the upload window when the event ends. Closing it archives the gallery into a browse-and-download state, so the link keeps circulating without new content appearing. Deliberately minimal — one screen a non-technical host can read at a glance during their own party.
04 - Impact
Business impact
Shows I can take a product from idea to a deployed, working build end to end — design, data model, front end, and hosting — not just automate processes that already exist.
Demonstrates the structure-before-features discipline from my client systems work: because events, uploads, and moderation states were modeled up front, adding host controls later broke nothing.
Proves out a deliberately small stack — Next.js, Supabase, Tailwind CSS, Vercel — that costs almost nothing at low volume, exactly how I advise founders to validate an idea before heavier infrastructure.
Reflects real-user judgment: the no-install, no-account QR flow exists because event guests won't download an app, and any concept that ignores that fails no matter how well it's built.
05 - Edge Cases
What had to be handled
A guest uploads something inappropriate — hosts can flip the gallery to approve-first mode, and any photo can be hidden from the moderation view without deleting the original.
Venue wifi is slow or drops mid-upload — photos compress client-side before sending and failed uploads retry, so a flaky connection doesn't silently lose photos.
The QR link spreads beyond the guest list — every gallery has a host-controlled upload window, so uploads close when the event ends even as the link circulates.
iPhone guests upload HEIC files — these convert in the upload pipeline so every photo displays for every guest, whatever device took it.
06 - Improvements
What I would improve next
One-click bulk download after the event — a single zip of full-resolution originals is the first thing every host asks for, and the data model already supports it.
An automated image-screening pass that pre-flags questionable uploads before they hit the gallery, keeping the host's review queue short at larger events.
A dashboard for repeat organizers — venues and planners running many events — with event templates and per-event storage limits, which is also the natural shape of a paid tier.
Related capabilities