ask them to show you.

A photo prompt is a question your visitors answer with a picture. You choose a cover on your site and one word, like home. When someone clicks that cover, it asks them to upload a photo that represents home. Their photo takes the cover's place for them, the prompt counts as done, and you see every answer in one place.

A visitorClicks a cover with a prompt on it
Your siteOpens the prompt: "upload a photo that represents home"
A visitorSigns in and picks a photo
Your siteStores the photo in your Vercel Blob store
A visitorSees their photo on the cover, marked completed
Your siteMarks the prompt done for them in your database
A visitorFinds all their photos under MY PHOTOS.
Your siteShows you everyone's under UPLOADED PHOTOS.
BUILD.

✓ Success: a visitor can answer your prompt with a photo.

this is a work in progress

  • Your own cover — from Your first cover. The prompt sits on it
  • An article — from Your first article, to show the cover in
  • Your site deployed — from Deploy. The photos are stored with Vercel, next to your site

1️⃣ Give the Photos a Place to Live

Your database remembers who answered which prompt. The photos themselves are files, and files go in Vercel Blob, a storage space that sits next to your site on Vercel. You create it once.

  1. In Vercel, open your project, then Storage in the sidebar
  2. Click Create Storage and choose Blob, then Continue
  3. Choose Public. Your site shows the photos with a plain link, which needs a public store, and a store cannot be switched later
  4. Name it photos and create it
  5. When it asks for environments, keep Production and Preview, and tick Development as well, so your computer can use it too

Vercel gives your live site the key to this store by itself, as BLOB_READ_WRITE_TOKEN. Your computer needs a copy. In your project, open Settings → Environment Variables, find BLOB_READ_WRITE_TOKEN, reveal it, and copy it into .env:

bash
# .env
BLOB_READ_WRITE_TOKEN="vercel_blob_rw_…"
  • Photos only — the prompt accepts pictures, nothing else
  • 4.5 MB each — every photo passes through your site on its way to the store, and Vercel caps that at 4.5 MB. A bigger photo gets a message asking for a smaller one. Most phone photos fit; a very large one can be shared as a smaller copy
  • Anyone with a photo's link can see it — that is what Public means. Ask for photos you would be happy to show

2️⃣ Make a Prompt

A prompt is a step, the same kind as the setup steps you have been ticking off, with one difference: it is completed by a photo. Start your site with npm run dev, then:

  1. Open localhost:3000/admin/steps and click + New Step
  2. Title and Description: what the prompt is about, like "Home" and "Show us where you feel at home"
  3. Step Type: choose Photo Upload
  4. Upload Word: the one word the prompt asks for, like home
  5. Cover (Optional): the name of your cover, bare, like cover-052. No folder, no ending
  6. Visibility: leave it on All Users, so everyone who sees the cover can open the prompt
  7. Click Create Step

cover-052 works. /covers/cover-052.jpg does not: the prompt matches the cover by its bare name only.

🖼️ Put the Cover Where People Will See It

The prompt appears wherever that cover appears in a row of covers. Your /covers page already has one: open localhost:3000/covers, and your cover now opens the prompt. To ask inside an article, open your article's file. In its menu of switched-off sections is a SCROLL ROW line. Delete the // in front of it and list your cover:

typescript
    { id: 'row-1', type: 'scrollRow', metadata: { scrollRowType: 'covers', title: 'SHOW US HOME.', coverIds: ['cover-052'], maxItems: 5, moreLink: '/covers' } },
  • A prompt takes over its cover — in rows of covers, clicking that cover opens the prompt instead of its story. Put prompts on covers whose story can wait, or on a cover made for the prompt
  • One prompt per cover — for a second question, use a second cover
  • /covers shows five per row — only the first five covers in each row appear there, which is why your first cover went at the top of the list

3️⃣ Answer It, Then Collect the Answers

  1. Open the page with your cover and click it. The prompt opens with your word in large letters
  2. Signed out, it offers sign in to upload. Sign in
  3. Click choose a photo and pick one. A moment later your photo appears in a circle, marked completed
  4. Close the prompt. The cover shows a completed mark, and for you it now shows your photo
Where/admin, under UPLOADED PHOTOS.
Who sees whatYou: every photo from every visitor, with who sent it
Where/party, under MY PHOTOS.
Who sees whatEach visitor: only their own photos
WhereThe cover itself
Who sees whatEach visitor who answered: their own photo
WhereVercel, Storage, your store's Browser
Who sees whatYou: the files themselves, to download or delete

/party is behind your waitlist. You are an admin, so you get in. Your visitors see their MY PHOTOS. once you let them in, which the waitlist step covers. They can answer prompts before that; the photos wait for them.

The prompt lives in your database, so your live site has it already. Push your article change in GitHub Desktop (a summary like "Ask for photos", then Commit to main and Push origin), and answer your prompt once on your live address to see it work there too.

“One word, one cover. The answers are pictures.”

— unparty-app

📎 For You: Put Any File Online

The same store can hold files you want to share: a PDF menu, a price list, a press photo. Open localhost:3000/blobupload, choose a file, and click Upload. You get a link you can put in any article. Only admins can use it, and the 4.5 MB limit applies here too.

🧯 If Something Is Off

  • Clicking the cover opens its story, not the prompt — the Cover on the step must be the bare name, like cover-052, and match the name in coverIds exactly. Also check that Step Type is Photo Upload and Visibility is All Users
  • upload failed. — BLOB_READ_WRITE_TOKEN is missing from .env, or npm run dev was not restarted after adding it. On your live site, check the store is connected to your project
  • photos up to 4.5 MB. — the photo is too large. Share a smaller copy
  • only photos can be uploaded here. — the file is not a picture
  • /blobupload says Admin access required — you are signed out, or your admin role is missing. See Make yourself admin

🤖 Ask Your LLM

prompt
My site is about [describe it]. Suggest five one-word photo
prompts my visitors would enjoy answering, each with a one-line
description that says what kind of photo to send.

(In Claude Code, inside your copy)
In my article src/app/constants/editorial-articles/articles/[file].ts,
switch on the scroll row of covers and list cover-052 in it, then
run npx tsc --noEmit until it prints nothing.

✅ You Are Done When

  • Your Vercel project has a Public Blob store, and .env has its BLOB_READ_WRITE_TOKEN
  • A Photo Upload step with your word and your cover is in /admin/steps
  • Clicking your cover opens the prompt, on /covers and in your article
  • Your own answer shows in /admin under UPLOADED PHOTOS.

Your site used to only show. Now it can ask. Every cover you own can hold a question, and every answer is a photo you did not have to take.

“Ask a better question. Get a better picture.”

— unparty-app
#Photo Prompts#Uploads#Vercel Blob#Steps#Setup#Non-Technical Founders#Software You Own

🧗🏾‍♂️ in progress

THOUGHTS.

…