Camelback Creative
hub.camelbackagency.com
The link from the video

The client portal, and how it got built.

Every client gets a password page with their logo, their photos and videos sorted into sets, and one-tap downloads of the full-size originals. It runs on the Google Drive I already pay for and a free Cloudflare account. I did not write the code. I described it to Claude and we built it over a few sessions.

$0per month. Drive storage I already had, Cloudflare free tier.
100%original files. No compression, no "download in HD" upsell.
1 commandto publish a new set once the edits are done.
What the client sees

Looks like software. Costs like a folder.

The parts clients actually touch, in the order they touch them.

01

Their login page

Their logo, their colors, a photo from their shoot in the background, one password. The login sticks for 30 days per device.

02

Photos and Videos

Sets sorted newest first with cover images, grouped by year once there is history. Videos play right in the browser with a preview frame.

03

Download that just works

Per file, select a batch, or Download All. On a phone it drops straight into the camera roll. Always the original file.

How it's built

Four pieces. Two of them are free.

Plain-language version. The nerd version is in the prompt below.

  1. 01

    Google Drive holds the files. Originals get copied into one "Hub" folder per client. Drive already stores and serves them, so there is no second storage bill.

  2. 02

    A small script builds the pages. One command: client name, set title, folder. It uploads, lists the files, grabs a preview frame from each video, writes the HTML, and deploys.

  3. 03

    Cloudflare serves it and checks the password. A Cloudflare Worker (free tier) hosts the pages, handles login with a signed cookie, and streams video so it plays natively instead of inside a Drive iframe.

  4. 04

    Claude wrote all of it. I described what I wanted, tested it on a real delivery, said what was wrong, and it fixed it. Every feature on this page came from "a client asked for X" followed by one more session.

The prompt

Here is the brief I gave Claude.

Cleaned up into one paste. Open Claude Code in an empty folder, paste this, and answer its questions. You will need a Google account, a free Cloudflare account, and about an hour the first time.

Build me a client delivery portal for photos and videos. I am a photographer and I deliver full-size originals. Requirements:

1. Files live in my Google Drive. Use rclone to upload a local folder into "Hub/<client>/<set>" and share it anyone-with-link. Never compress anything.
2. One Python script, hub.py: `python3 hub.py <client-slug> "<Set Title>" <local-folder>`. It uploads, lists the files, builds static HTML for the set and the client's home page, and deploys. Keep a clients.json (name, password, logo, accent color, background photo) and a galleries.json registry.
3. Host on Cloudflare Workers with static assets, free tier, at a subdomain I own. A worker.js in front checks a per-client password, sets a signed 30-day cookie, and gates everything under /<client>/.
4. Client home page: their logo, Photos and Videos sections, sets newest first with cover images. Set page: grid of tiles, fullscreen swipe viewer, per-file download, multi-select batch download, Download All.
5. Videos must play natively in the browser on iPhone. Make a 1080p preview per video with ffmpeg, store it next to the set on Drive, and stream it through the worker with Range support. Downloads stay the original file.
6. Thumbnails come straight from Drive (lh3.googleusercontent.com/d/<id>=w800). Add retry on image load, Drive is flaky for fresh files.
7. Dark design, system font or Geist, one accent color per client. No em-dashes anywhere in client-facing copy.
8. Start by shipping the smallest version that delivers one set to one client with a password. We will add features after the first real delivery.

Ask me for anything you need (domain, Cloudflare login, rclone setup) one step at a time.
Expect to go back and forth. First real client delivery went out two days after the first prompt. The polish took a few more sessions.