TanStack Start · Cloudinary

Build a community photo wall — the right way.

Users upload anything. Your app resizes it, watermarks it, and only shows approved photos. Cloudinary handles the hard part — you handle the experience.

The problem

Managing user-generated content is scary. Users upload huge files, wrong formats, or portraits that crop terribly. You need to resize, watermark, and moderate — before anything hits your storage.

The solution

Cloudinary incoming transformations fire the moment a file arrives — not at request time. The stored image is already resized, watermarked, and face-cropped.

Cloudinary powers every upload

Four features, zero effort on your part

🔄

Incoming Transformations

transformation: [...]

Resize, crop, and optimise the moment the file lands — before it is stored. No per-request cost.

👤

Face Detection Crop

g_auto:faces

Gravity set to auto:faces so the crop always centres on the most prominent detected face.

💧

Logo Watermark

l_logo / text overlay

Your brand stamp is baked into the stored file at upload time — not rendered at delivery.

Auto Format & Quality

f_auto, q_auto

Serve WebP or AVIF based on browser support. Cloudinary picks the smallest file with good fidelity.

Incoming transformations

Applied once, at upload time

Unlike eager or on-the-fly transforms, incoming transformations run before the file is stored. The result is baked in — delivery is instant and there are no per-request compute costs.

📁User file
🛡️Client checktype + size
Cloudinaryupload_stream
Resizec_fill, w_800
👤Face cropg_auto:faces
💧Watermarkl_logo
Optimisef_auto, q_auto
🗄️Storedpending
pending

Awaiting review

Every upload starts here. The photo is stored and processed but not yet public.

approved

Visible in gallery

Moderator approved it. The photo appears on the public wall for everyone to see.

🚫rejected

Hidden from gallery

Moderator rejected it. The photo stays stored but never appears publicly.