Skip to content

About

Case study: Snapilio - branded, no-login event galleries for social photographers (Next.js, Neon, GCS, Cloud Run).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

Snapilio - Case Study

The professional, fast, and beautiful way for social photographers to deliver event content - photos, videos, reels and stories - as a branded, no-login gallery shared in one tap over WhatsApp.

Live product: snapilio.com · Language/UI: Hebrew, full RTL · Status: Live, in soft launch


Overview

Snapilio is a SaaS platform built for צלמות וצלמי סושיאל (Israeli social/event photographers). It turns the messy, unbranded "here's a Google Drive folder" hand-off into a polished, on-brand delivery experience that clients open with a single tap - no app, no login, no password.

This repository is a case study / write-up. The application source code is kept in a separate private repository.


The problem

For event photographers, the delivery is the last impression a client gets - and it's usually the weakest:

  • Content is scattered across Drive, WeTransfer, and Stories that vanish after 24 hours.
  • A grey folder of files communicates none of the brand or quality the photographer actually delivers.
  • Every hand-off burns 30+ minutes of uploading and "can you resend the link?" back-and-forth.
  • Clients are on WhatsApp - but files get compressed and lost there.

The solution

A single, branded flow that just works:

  1. Create an event - name, date, client. It gets its own branded gallery page.
  2. Upload content - photos, videos, reels and stories, straight from the phone, with resumable uploads that survive a flaky venue connection.
  3. Share a link - a secure, no-login gallery that opens on any device, with a built-in WhatsApp share button.

The result feels like the photographer built a custom app - logo, colors, and all - in five minutes.


Key features

  • Branded, no-login galleries - a secure share link; guests just open it.
  • WhatsApp-first sharing - one tap sends a clean, link-included message.
  • Multi-format media - photos, videos, reels and stories, with an Instagram-style story ring.
  • Direct-to-cloud uploads - the browser uploads straight to object storage via signed resumable URLs; the server never proxies bytes. Now with auto-retry, stall detection, and "skip already-uploaded" de-duplication.
  • 3-tier media pipeline - a small thumbnail for the grid, a high-quality preview for viewing, and the original reserved for download (keeps galleries fast and egress cheap).
  • Client-side image processing - HEIC to JPEG conversion in the browser, with EXIF (capture date, camera, GPS) re-injected so downloads keep their metadata.
  • Albums - organise media into sections (chuppah, dancing, etc.), during or after upload.
  • Guest favorites - clients heart their picks and send the selection back over WhatsApp.
  • Download to Photos on iPhone - uses the native share sheet so images land in the camera roll, not Files.
  • Password-protected galleries, custom branding, and "remove Snapilio badge" on paid tiers.
  • Save to home screen (PWA) - installable, app-like, with an offline fallback.
  • Referral program + coupons - earn free months per paying invite, with automatic credit and clawback.
  • Subscription billing - free Starter tier plus paid Pro/Studio tiers.
  • Admin console - photographers, events, storage, plans, and coupon management.

Tech stack

Layer Choice
Framework Next.js (App Router, React Server Components, Server Actions), TypeScript
Auth Auth.js (Credentials + Google OAuth), JWT sessions, edge-safe split config
Database Neon serverless Postgres + Prisma ORM
Storage Google Cloud Storage (private bucket, V4 signed upload/read URLs, lifecycle + soft-delete)
Hosting Google Cloud Run (containerised, scale-to-zero), Cloud DNS, managed SSL
Email Resend (transactional: password reset)
Billing PayPal Subscriptions API + verified webhooks
Media/marketing video Remotion (programmatic React-to-MP4)
Monitoring Cloud Monitoring uptime checks + alerts, Cloud Error Reporting
CI/CD GitHub Actions -> build + deploy to Cloud Run

Architecture

flowchart LR
    Photographer["Photographer (browser / PWA)"]
    Guest["Client / guest (no login)"]
    App["Next.js on Cloud Run"]
    DB[("Neon Postgres")]
    GCS[("Google Cloud Storage")]
    PayPal["PayPal"]
    Resend["Resend (email)"]

    Photographer -->|"signed resumable URL"| GCS
    Photographer -->|"app + server actions"| App
    Guest -->|"share link /g/:slug"| App
    App --> DB
    App -->|"mint signed URLs"| GCS
    Guest -->|"signed read URL"| GCS
    PayPal -->|"webhooks"| App
    App --> Resend
Loading

The key architectural decision: media bytes never flow through the server. Uploads go browser -> GCS directly (resumable signed URLs), and reads are served via short-lived signed URLs minted per request. This keeps the bucket fully private while keeping latency and egress costs low.


Engineering highlights

  • Direct, resilient uploads at scale. Galleries can hold 1,000+ items. Uploads are chunked, prepared (HEIC convert + thumbnail + EXIF) and pushed with bounded concurrency, plus per-file auto-retry, a no-progress stall watchdog, and filename de-duplication so re-uploading a folder only sends what's missing.
  • Cost-aware media delivery. Generating thumbnail + preview renditions client-side from a single decoded bitmap, serving previews for viewing and reserving originals for download, and lifecycle rules that tier old media to cheaper storage classes.
  • Secure-by-default sharing. Private bucket, unguessable share slugs, optional bcrypt-hashed gallery PINs (with an HMAC unlock cookie), and signed-URL access gated by the PIN even at the asset level.
  • Edge-safe auth. Auth.js split into an edge-compatible config (route protection in middleware) and a Node config (Prisma + bcrypt), so the middleware stays lightweight.
  • Growth built into the product. A credit engine powers both referrals and coupons: earned free months auto-apply as comped access, pausing/resuming PayPal billing as needed, reconciled by a daily job.
  • Hardening pass. Security headers (HSTS, frame/MIME protections), rate limiting on auth-sensitive endpoints, object-key namespacing, and encrypted-at-rest gallery PINs for admin support.
  • SEO + shareability. Dynamic Open Graph preview images, sitemap, robots, and JSON-LD structured data; rich WhatsApp/Instagram link previews per gallery.

Plans

Plan Price For
Starter Free Getting started
Pro Monthly Photographers working at volume - full branding, password galleries
Studio Monthly Studios and high volume - everything in Pro, unlimited active events, priority support

Status & roadmap

Shipped: live domain + SSL, email/password + Google login, password reset, branded galleries, WhatsApp sharing, albums, guest favorites, downloads (incl. Save-to-Photos on iOS), PWA, live subscriptions, referrals + coupons, admin console, security hardening, SEO, monitoring, and a marketing site with code-generated promo videos.

Next: native mobile app (Capacitor) for photographers, cross-instance rate limiting, optional video transcoding for older-browser playback, and content/SEO growth.


About

Snapilio is an independent product designed and built end to end - product, full-stack engineering, infrastructure, branding, and go-to-market.

The live application: snapilio.com

About

Case study: Snapilio - branded, no-login event galleries for social photographers (Next.js, Neon, GCS, Cloud Run).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors