Snapvyn
A QR-based event photo sharing platform that lets guests upload photos and videos into one live gallery without installing an app.

Role
Founder & sole engineer — product, frontend, backend, infrastructure
Stack
- Next.js
- TypeScript
- PostgreSQL
- Object storage
- Edge image pipeline
- Stripe
The problem
Wedding and event guests will not install an app for a single evening. Every existing option forced a download, an account, or both — so the photos that mattered most stayed scattered across a hundred camera rolls and never reached the host.
Approach
- 01Reduced onboarding to a single scan: the QR resolves straight into a browser-native uploader with no account, no install and no gate in front of the camera.
- 02Built the gallery as a live surface — uploads appear for every guest in real time, so the event has a shared visual feed while it is still happening.
- 03Moved transcoding and thumbnail generation to an async pipeline so a guest on venue Wi-Fi with a 4K video never waits on a spinner.
- 04Designed multi-tenant event isolation up front — each event is its own bounded space with its own retention window and access rules.
System
Everything expensive happens after the response. The guest's upload is acknowledged the moment it lands; transcoding, thumbnails and fan-out run behind the request on venue Wi-Fi that cannot be trusted to stay up.
Guest
- QR scan
- Browser uploader
- No install, no account
Edge
- Next.js route handlers
- Per-event tenancy scope
- Stripe
Async
- Transcode pipeline
- Thumbnail generation
Data
- PostgreSQL
- Object storage
- Per-event retention window
Live gallery — every processed upload fans back out to every guest and to the host dashboard while the event is still running
Trade-offs
What was rejected, and why.
A QR that resolves straight into a browser-native uploader.
Instead ofA native app, or an account gate in front of the camera.
Guests will not install anything for a single evening. Every install prompt is a guest who photographs the night and never uploads it.
Transcoding moved off the request path entirely.
Instead ofProcessing the upload inline and returning when it is done.
A guest on venue Wi-Fi with a 4K video would sit on a spinner long enough to give up — and the one thing this product cannot afford is an abandoned upload.
Multi-tenant event isolation designed in up front.
Instead ofA shared gallery table with an event_id column and filtering in application code.
These are private events. A bounded space per event with its own retention and access rules is a structural guarantee; a WHERE clause is a promise that one missing filter breaks.
Outcome
- Guest onboarding reduced to one scan and zero installs.
- Uploads land in a single host-owned gallery instead of scattered camera rolls.
Next project
Fotovyn