Skip to content
Real-Time Streaming

Photos arrive on the guest's phone the moment the shutter clicks

Server-Sent Events stream new photos straight to the gallery and to lobby kiosk TVs. Guests see a pulsing LIVE indicator, hear a shutter sound, and watch their photos appear without refreshing — perfect for theme-park rides, water-park slides, and arrival archways.

SSE
Server-Sent Events
Live
Pulsing indicator
Heartbeat
Connection-alive ping
Feature-flag
Per-org toggle

Photos stream into the gallery the moment they upload

Connected gallery viewers subscribe to /api/gallery/[token]/stream. When the photographer's upload completes, the server publishes a new_photos event on the in-memory bus and every connected client receives it instantly. The gallery animates the new photos in, plays an optional shutter-click sound, and shows a toast naming the photographer.

  • /api/gallery/[token]/stream — guest-side SSE endpoint
  • Pulsing 'LIVE' indicator with heartbeat ping
  • Optional shutter-click sound (mute toggle)
  • Toast notification — 'Photographer Alex sent 3 photos'
  • New photos animate in without page refresh
  • Heartbeat events keep the connection alive across proxies
Photos stream into the gallery the moment they upload feature illustration

Kiosk TV display detects nearby customers and streams their photos

Set a TV running /kiosk/tv-display in the lobby or by the photo desk. It cycles attract-mode photos until a guest steps close — face recognition matches them, and the TV switches to streaming THEIR photos as they're shot. Friends gather, photographers cross-sell on the spot, the upsell almost prints itself.

  • Kiosk TV display at /kiosk/tv-display
  • Attract-mode photo carousel between matches
  • Face recognition scan triggers a switch to matched guest
  • Server-Sent Events push every new shot to the TV in real time
  • Live session count + total photos today displayed
  • Moving watermark on the TV breaks phone-camera capture
Kiosk TV display detects nearby customers and streams their photos feature illustration

Single in-memory event bus — works on a single Vercel instance

The lib/live-stream.ts singleton holds an in-memory event bus that fans events out to gallery viewers, kiosk TVs, and admin dashboards. It's deliberately simple — process-level only — so it works perfectly on a single Vercel serverless instance. For multi-region scale, swap the bus for Redis pub/sub without changing any callers.

  • lib/live-stream.ts — process-level event bus
  • notifyGallery / notifyLocation — typed publish helpers
  • Subscribe API for any new SSE consumer (admin notifications, etc.)
  • Single-instance ready, multi-instance with Redis pub/sub swap
  • Events typed: new_photos, connected, heartbeat
  • Per-gallery and per-location channel scoping
Single in-memory event bus — works on a single Vercel instance feature illustration

Feature-flagged on or off — no code change to enable or disable

FEATURE_REALTIME_STREAMING gates every notify call. When off, calls silently no-op so the upload path stays fast — Subscribe calls still accept listeners so the SSE endpoint doesn't 500, they just never receive new-photos events. Toggle via env var without touching code, ideal for staging vs production rollout.

  • FEATURE_REALTIME_STREAMING env-var gate
  • Off-state: notify* no-ops, gallery falls back to polling
  • On-state: every upload publishes immediately
  • No async/await on the env check — zero hot-path latency
  • Per-environment rollout (off in staging, on in prod, etc.)
  • Per-org plan-guard available for SaaS tier gating
Feature-flagged on or off — no code change to enable or disable feature illustration

Everything included

No feature gates. No hidden upgrades. Get the full experience from day one.

Guest-side SSE

/api/gallery/[token]/stream pushes new_photos events to the gallery.

Kiosk TV SSE

/api/location/[id]/stream pushes location-scoped events to lobby TVs.

LIVE indicator

Pulsing red badge confirms the stream is connected.

Shutter-click sound

Optional audio cue when new photos arrive (mute toggle).

Toast notifications

'Photographer Alex sent 3 photos' — toast names the photographer.

Heartbeat events

Periodic heartbeat keeps connection alive across CDN proxies.

TV face-match streaming

Lobby TV detects a guest, switches to streaming their photos.

Attract mode

TV cycles featured photos between matches.

Moving watermark on TV

Pulsing brightness defeats phone-camera capture.

In-memory event bus

Process-level singleton; swap to Redis pub/sub for multi-instance.

Feature-flag gate

FEATURE_REALTIME_STREAMING env var toggles streaming on/off.

Zero hot-path latency

Env check uses sync read, no async overhead on uploads.

Who it's for

Theme park rides

Speed camera fires as the rollercoaster crosses the loop. By the time the guest unbuckles, their photo is on their phone with a pulsing LIVE badge. They share it before they reach the next ride.

Water park slides

Wristband-tagged customer hits the splash pool. Photographer's burst of 5 shots lands in their gallery with a shutter sound. The guest dries off at the kiosk TV which is already showing those exact photos at full size.

Wedding venues

Couple's gallery shows photos arriving live during the reception. Family members back home open the gallery link and watch the wedding photos populate in real time as the photographer shoots.

Resort arrival archways

Welcome archway camera fires when the family steps under it. By the time they're at the front desk, the receptionist hands them a card and their gallery is already loading on their phone with the arrival photos.

Full feature list

Server-Sent Events for galleries
Server-Sent Events for kiosk TVs
Pulsing LIVE indicator
Shutter-click sound (mute toggle)
Toast notifications with photographer name
Heartbeat to keep connection alive
/api/gallery/[token]/stream
/api/location/[locationId]/stream
Kiosk TV display at /kiosk/tv-display
Face-match attract-mode → matched-mode switch
Attract-mode photo carousel
Moving watermark on TV display
Live session count + photos today
In-memory event bus singleton
Redis pub/sub swap path documented
FEATURE_REALTIME_STREAMING flag
Off-state no-op preserves upload speed
Subscribe API for new consumers

Pomvom and DEI charge premium tiers for real-time mobile streaming. Most photographer platforms ship gallery-after-the-fact and call it 'instant.' Fotiqo's pipeline pushes every shutter click to the gallery and the lobby TV the moment the upload completes — and the same event bus powers admin notifications and the kiosk order toast.

Compare plans

“Fotiqo has everything I need in one place. I stopped paying for four separate tools and my workflow is so much simpler now.”

Sarah Chen, Wedding Photographer

Ready to get started?

Free to start. No credit card. No monthly fees on the Starter plan.

See live streaming in action