Case study N° 09 · Tools

Party Photo Wall

A live QR-to-projector photo wall for a Buc-ee's-themed pool party, designed, built and shipped in one day.

Idea to live
1day
Under a “working beats pretty” rule: plain HTML, CSS and JS, no build step.
Projector refresh
3s
New photos join the rotating show seconds after they are uploaded.
And no SDK
0frameworks
Uploads go straight to Supabase Storage and REST with fetch.
Phone upload page (demo version): name and billboard caption fields, a Snap a Photo button and an I Just Cannonballed counter
Fig. 1|The phone page guests reach from the QR code (demo version). One button uploads a photo, the other counts cannonballs.

What it is

Guests scan a QR code on the projector screen, which opens a phone page where they upload photos and tap an “I just cannonballed” button. A laptop by the pool projects a rotating full-screen show that updates as photos arrive.

Highlights

  • Shipped the same day under a strict “working beats pretty” rule: plain HTML/CSS/JS, one file per page, no build step.
  • Supabase without the SDK: uploads go straight to the Storage and REST APIs with fetch. Row-level security means guests can only insert and read, never update or delete.
  • QR generated in the browser from the live URL, with the library inlined by a 10-line build script so nothing depends on a CDN at the party.
  • Photos are resized on the phone before upload so the pool Wi-Fi keeps up.

Methods

Stack
HTML, CSS, Vanilla JS, Supabase Storage, Supabase REST, Postgres RLS, Vercel.
Data
The demo runs in your browser on sample data; nothing is sent anywhere.
Status
Shipped Oct 2026. Party guests, one afternoon.