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.
The parts clients actually touch, in the order they touch them.
Their logo, their colors, a photo from their shoot in the background, one password. The login sticks for 30 days per device.
Sets sorted newest first with cover images, grouped by year once there is history. Videos play right in the browser with a preview frame.
Per file, select a batch, or Download All. On a phone it drops straight into the camera roll. Always the original file.
Plain-language version. The nerd version is in the prompt below.
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.
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.
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.
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.
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.