SnapCache
The photos from an event end up scattered across a hundred phones. SnapCache gives the event one gallery: guests scan a QR code and upload straight from the browser — no app, no account — and the organizer downloads the whole album as a ZIP when it's over.

what we delivered
The hard part of an event gallery isn't storing photos — it's removing every reason a guest might not bother. No download, no sign-up, no password. Scan, upload, done. The product is built around that one constraint.

frictionless guest upload
Guests identify themselves with a name and join by QR code — no account to create. Uploads run through a dedicated service with drag-and-drop and an in-browser camera, so a phone at a wedding reception is a first-class client rather than an afterthought.
galleries that expire by plan
Free and starter galleries carry an expiry date; business galleries don't. A nightly job expires what's due, warns organizers before it happens, and the plan's photo cap is enforced as guests upload rather than discovered later.
moderation and engagement
Photos can be flagged, moderated, and filtered to approved-only for public view. Guests like images, and galleries sort by newest, oldest, or most-liked — which surfaces the good shots without anyone curating by hand.
billing and plan movement
Stripe checkout, portal, upgrades, downgrades, cancellations, and webhooks — with the awkward paths handled: what happens to a gallery that exceeds the cap of the plan its owner just downgraded to.
a referral loop
Galleries on the free plan carry a Powered-by banner and a conversion prompt; referral codes credit the organizer who brought someone in. The product's growth path is built into the artifact guests already see.
what this demonstrates
SnapCache is a consumer product with a real business model attached — media handling, plan enforcement, billing edge cases, and the growth mechanics around them.
Consumer-grade UX
A flow designed for someone holding a drink at a party — QR to upload in seconds, on a phone browser, with nothing to install and nothing to remember.
Media at volume
Active Storage variants, infinite-scroll galleries, in-browser capture, and ZIP export of a full album — handled as a pipeline rather than a form with a file field.
Plan limits as a system
Caps, expiry windows, and gates expressed in one place and enforced across uploads, jobs, and billing transitions — including the downgrade paths most products skip.
Scheduled background work
Sidekiq jobs for gallery expiry, reminder emails, sitemap generation, referral credits, and SMS — the recurring work that keeps a live product honest.
Rails + React on Rails
Server-rendered pages with React mounted where interactivity earns it, on Shakapacker — a pragmatic split instead of an SPA for its own sake.
Growth instrumentation
Gallery views, upload events, and analytics tracked as first-class records, so engagement is a queryable fact rather than a guess.