Normally this wouldn’t make it into my project portfolio, but I love the idea (especially considering how quickly it came together) and I’ve had numerous friends ask how we built it and if they could use it for their own parties. So I want to share this quick project — maybe it’ll inspire someone for their next celebration! 🎉
The Backstory
For my 25th birthday, I wanted to do something special that would make the party more interactive and memorable. My brother and I spent 1.5 days hacking together to build this. The idea was simple but effective: project a continuous slideshow of photos onto the side of our house. But I wanted to make it participatory — guests should be able to contribute their own photos in real-time.
The concept was straightforward:
- Set up a projector pointing at a white wall of the house
- Place QR codes around the party venue
- When guests scanned a QR code, they could upload photos from their phones
- Photos would be added to a queue and displayed for at least 1 minute each
- This would create a living, ever-changing backdrop for the party
The bonus? We’d end up with a great collection of party photos without having to manually collect them from everyone afterward.
Technical Requirements & Implementation
I chose Next.js for the frontend and Supabase for the backend — a stack that let us move fast without infrastructure headaches. The system needed real-time photo uploads from multiple guests, smart queue management with minimum display times, a dead-simple mobile interface (no app required) and all built in just 1.5 days (these where the days before vibe coding was a thing 😅).
Software Architecture of PartyWallImages uploaded by the party guests where uploaded directly to the Supabase storage with URLs stored in the database. The mobile web page was really simple with a button to upload or take a picture and get instant feedback on queue position with built-in spam protection.
To keep the energy high and encourage ongoing participation, we also implemented hard-coded challenges that appeared every 30 minutes. These included fun prompts like “take a photo in a yoga pose,” “capture someone making a funny face,” or “get a group shot with everyone jumping” — little gamification elements that motivated guests to keep taking and uploading photos throughout the night.
The projector was connected to an old PC that had a browser open in fullscreen showing a second website with the image slideshow. This was done with a simple pull-based architecture that made an API call every 2 seconds to fetch new images. We also implemented a simple queue that ensured each photo got at least a minute of screen time while preventing spam.
Conclusion
The system worked beautifully during the actual party and ended up being requested by multiple friends for their own events. Several months later, people were still asking about it and wanting to “borrow” the setup. The genuine delight on people’s faces when they saw their photos appear on the wall made all the late-night coding worthwhile. This project also sparked my interest in minimalistic full-stack setups to achieve rapid development and fast POCs.