Proofloft: client proofing galleries for a wedding and portrait photographer

Proofloft: client proofing galleries for a wedding and portrait photographer

00 Markdown

Private photo galleries where clients heart favorites and comment live, and the photographer downloads the chosen file names.

Agent specs

Agent
Claude Code, Opus 5.5 Medium
Time
26 min
Cost
$7.73*

Agents work faster and more accurately on Elements.

* Cost at API rates, September 2026.

Run it yourself

Paste this prompt into your AI agent. You get the finished app on your own machine, ready to change however you like.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app from the elementscode/demo-proofloft scaffold:
cd ~/elements/projects
elements create proofloft -scaffold=elementscode/demo-proofloft
cd proofloft

Start the app.

Need an AI agent?

In AI desktop apps, paste into the Code tab, not the general chat.

How it's built

Proofloft needed private galleries a client opens from a link, photo uploads, hearts and comments that both sides see as they happen, emails at each handoff and a file of the chosen names for the photographer. Each of those is a part of Elements, so the agent spent its 26 minutes on the galleries themselves.

What Elements gave the app

  • Live hearts and comments. Favorites and comments are LiveTables. A client hearts a photo and the photographer's open gallery shows it at once, and a reply lands under the client's comment the same way. Once a gallery is final, the client's picks are locked in. A channel tells the photographer the moment a client submits.
  • Client access from a link. A client opens their gallery from the private link in their email and enters its password once; a cookie for that gallery keeps them in.
  • Uploads into the database. The photographer uploads photos straight from a form, the bytes are stored in the database, and each photo is served at a url made from its id and a hash of its bytes.
  • Emails at each handoff. Sharing a gallery emails the client the link, and submitting selections emails the photographer the picks.
  • Server calls as function calls. Creating a gallery, uploading, inviting the client and marking selections final call server functions straight from the page with @rpc, and the photographer downloads the chosen file names as a text file.
  • Data from SQL files. Migrations define the studio and seed one photographer, three galleries with 82 photos, and one client's hearts and comments.

What the project server gave the agent

The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building.

What shipped

The app type-checks with zero errors and all 26 tests pass. Every page works on desktop and phone.

The code

Build it from scratch

To watch your agent build this app from an empty project, use the prompt we used instead. It takes longer than starting from the finished app above.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app:
cd ~/elements/projects
elements create proofloft
cd proofloft

Start the app, then build this:

Build a client proofing app named proofloft for a wedding and portrait
photographer.

PHOTOGRAPHER (admin account)
- Create a gallery for a client: name, date, upload photos in bulk.
- Share it with a private link and optional password, emailed to the client.
- See which photos the client favorited, and their comments.
- Mark a gallery's selections final and download the list of chosen file
  names.

CLIENT (no account, from the link)
- A full-screen gallery grid with a lightbox.
- Heart favorites, leave a comment on a photo, and submit selections when
  done. The photographer gets an email.

Seed the photographer and three galleries of 20 to 30 photos each, one with
favorites and comments. Show the admin login on the sign-in page.

Favorites and comments appear to the photographer in real time.

The weekly digest

New lessons, demos and posts from elements.dev, in one email a week.

Comments· 0