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
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.
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.
A single, branded flow that just works:
- Create an event - name, date, client. It gets its own branded gallery page.
- Upload content - photos, videos, reels and stories, straight from the phone, with resumable uploads that survive a flaky venue connection.
- 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.
- 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.
| 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 |
| 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 |
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
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.
- 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.
| 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 |
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.
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