Skip to content
Product Concepts

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

  1. Host creates event

    Next.js setup form

  2. QR code generated

    unique gallery link per event

  3. Guest scans code

    browser gallery, no install

  4. Photos uploaded

    compressed to Supabase Storage

  5. Gallery updates

    per-event feed, near real time

  6. Host moderates uploads

    approve, hide, or remove

  7. 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.