Event photography · In active build

Turn the crowd into the camera crew.

One photographer can only stand in one place. Crowdtography hands a disposable camera to everyone already sitting in the seats you can't reach — and every shot lands in your folder, with your brand on it.

In active build Standalone product Next.js · Prisma · R2

The whole loop

Five steps, and the guest never installs anything.

The codes go where a photographer physically cannot be — odd angles, back rows, the moment happening at the other end of the room. That reach is the product.

  1. Coordinator creates the eventSets the window, the shot limit, and the branding.
  2. QR codes and NFC tags get generatedPlaced at seats, angles, and moments — wherever coverage is thin.
  3. A guest scans inTheir phone becomes a camera-only session. No install, no account to make.
  4. The limit and the clock do the workA hard shot count and a portal that expires on the coordinator's schedule.
  5. Shots land in a branded folderWatermarked with the organizer's brand first, then delivered on to Google Drive.

What it refuses to be

The constraints are the design.

Most of what makes this work is what it will not do. These are hard rules in the build spec, not preferences.

Not an uploader

It's a camera

No file picker, no gallery import, no drag-and-drop. Live capture only. A guest cannot dump their camera roll into your event.

Server-authoritative

The shot limit is the product

The count decrements on the server, atomically. Discarding a shot does not refund it — the same discipline a disposable camera enforces.

Your brand first

Organizer branding outranks ours

The watermark leads with the organizer's brand. Crowdtography is the secondary badge, never the headline.

Narrow scope

Drive access stays minimal

Google OAuth uses drive.file and nothing broader — access to the files it creates, not to a customer's Drive.

Direct to storage

Photo bytes skip our server

Uploads go straight to object storage with presigned URLs. The application server never handles the image data.

Not v1

No filters, no feed

No editing, no social layer, no billing in the first version. It captures and delivers; everything else is a later argument.

Why it works

Reach beats resolution.

A hired photographer produces better individual frames. They cannot produce the frame from the third row, at the exact second it happened, from the angle only the person sitting there had. Fifty phones already in the room can.

The shot limit is what keeps that from becoming noise. A guest with five shots takes five deliberate photographs. A guest with unlimited shots hands you four hundred near-identical ones and a sorting problem.

“The differentiator is reach. Codes go at angles, seats, and moments no single photographer can physically cover.”

Crowdtography build spec

Under it

What it's built on.

FrameworkNext.js App Router, TypeScript
HostingVercel
AuthAuth.js
DatabasePostgreSQL + Prisma
Object storageCloudflare R2
Image pipelineCloudflare Images
Background jobsTrigger.dev
DeliveryGoogle Drive, drive.file scope