Event SaaS202601 / 06

Snapvyn

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

The Snapvyn home page: the headline “Every guest is your photographer” beside two phones showing the in-browser camera and a live wedding gallery of guest uploads.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

  1. Guest

    • QR scan
    • Browser uploader
    • No install, no account
  2. Edge

    • Next.js route handlers
    • Per-event tenancy scope
    • Stripe
  3. Async

    • Transcode pipeline
    • Thumbnail generation
  4. 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