How the money flows
The roast is free because the roast is the ad. Every step after it is where you get paid.
Free roast
A visitor uploads a room photo and gets a brutal AI roast plus a shareable roast card with your URL baked in.
Shares do the marketing
Funny travels. Every shared card is a free ad pointing back at your site — no ad budget, no posting grind required.
$9 Glow-Up Plan
The full fix-it plan — what to buy, in what order, room by room — sold through a Stripe payment link.
Affiliate links
Every product in the plan carries your affiliate tag. They buy the lamp, you get the referral cut. You stock nothing.
The stack, piece by piece
Five pieces. Four are free, one charges pennies per use. Compare that to MadeThis Starter at $49/mo for 1 business — before you've made a cent.
The site
One page: upload flow, roast display, glow-up plan layout, share card, checkout button. Hosted free on Cloudflare Pages or Netlify. A custom domain is the only optional spend, ~$12/yr.
The AI brain
Your own LLM API key (OpenAI). A vision-model call reads the photo and writes the roast — roughly $0.01–0.05 each, so $10 of credit buys hundreds of roasts.
The key-keeper
A tiny Cloudflare Worker holds your API key as an encrypted secret and makes the AI calls, so the key never appears in the page where anyone could steal it. Free tier: 100,000 requests/day.
The checkout
A Stripe payment link for the $9 plan. Free to create; Stripe takes 2.9% + 30¢ per sale ($0.56 on $9). Gumroad would eat roughly $2 of the same sale — nearly 4× more.
The affiliate tags
Free to join the programs. You paste your tags into the site config once, and every product link in every plan carries them from then on.
The setup walkthrough
Eight steps, in order. Steps 1–6 get you live, step 7 stocks the site with seeded roasts, and step 8 — the affiliate signups — waits until there's a real site with content for the programs to review. Open a step, do it, mark it done.
These three accounts can only be issued to you — a payment account and an API key aren't things anyone can create on your behalf. (The affiliate signups in Step 8 are also yours personally; they come later, on purpose.) ~15 minutes.
- Go to platform.openai.com and sign up (separate from a ChatGPT subscription — this is the developer side).
- Under Billing, add $10 of prepaid credit. At roughly 1–5¢ per roast, that's 200–1,000 roasts before you top up.
- Go to API keys → Create new secret key, name it
roast-my-room, and create it. - Copy the key into a temporary note. You'll paste it into Cloudflare in Step 4 — that's the only place it ever goes.
Never paste this key into the website itself. Anything in a web page is visible to every visitor, and a leaked key means strangers running up your AI bill. Step 4 exists specifically to keep it hidden.
- Go to cloudflare.com → Sign up and create an account on the Free plan.
- No credit card is needed for what you'll use: Workers (your key-keeper) and Pages (your hosting).
- Verify your email when the confirmation arrives — Workers won't deploy until you do.
Why Cloudflare for both jobs: the Worker's free tier allows 100,000 requests a day and Pages hosting is unlimited-bandwidth free. One account, both pieces, $0.
- In Stripe, go to Payment Links → New payment link.
- Create a product: "The Glow-Up Plan", one-time price $9.00. Description: "Your full room fix-it plan — what to buy, in what order, with links."
- On the confirmation setting, use a message like: "Payment received — your Glow-Up Plan is on its way to your inbox."
- Copy the
buy.stripe.com/…link and keep it with your API key note. It goes into the site config in Step 5.
The fee math: Stripe takes 2.9% + 30¢ = $0.56 per sale, so you keep $8.44 of every $9. The same sale on Gumroad costs roughly $2 in combined fees.
Code is written for you below. Your job is copy, paste, and three blanks. ~15 minutes.
- In Cloudflare, go to Workers & Pages → Create → Worker, name it
roast-api, and deploy the starter. - Click Edit code, delete what's there, paste the script below, and Deploy again.
- Go to Settings → Variables and Secrets → Add: type Secret, name
OPENAI_API_KEY, value = the key from Step 1. Save and deploy. - Copy your Worker URL — it looks like
https://roast-api.<your-name>.workers.dev. That's the third thing for the Step 5 config.
What this script does: it receives the room photo from your site, sends it to the vision model with your hidden key, and returns the roast (a savagery score, the roast text, and the top fixes that become the free teaser for the paid plan).
// Roast My Room — key-keeper Worker
// Holds your OpenAI key as a secret so it never appears in the web page.
// Set the secret in: Worker → Settings → Variables and Secrets → OPENAI_API_KEY
const SYSTEM_PROMPT = `You are the Roast My Room engine: a brutally funny,
affectionate interior-design critic. You roast the room in the photo like a
stand-up comic who secretly wants it to succeed. Never be cruel about the
person, only the room. Return ONLY valid JSON in exactly this shape:
{
"score": 0-100 (100 = magazine-perfect, 0 = crime scene),
"headline": "one savage one-liner about the room",
"roast": "3-4 sentences of comedy roasting specific visible details",
"fixes": ["fix 1", "fix 2", "fix 3"] // the 3 highest-impact fixes
}`;
export default {
async fetch(request, env) {
const cors = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
};
if (request.method === "OPTIONS") return new Response(null, { headers: cors });
if (request.method !== "POST") return new Response("POST only", { status: 405, headers: cors });
const { image } = await request.json(); // base64 data URL of the room photo
if (!image) return new Response(JSON.stringify({ error: "No image provided" }),
{ status: 400, headers: { ...cors, "Content-Type": "application/json" } });
const res = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${env.OPENAI_API_KEY}`,
},
body: JSON.stringify({
model: "gpt-4o-mini",
response_format: { type: "json_object" },
messages: [
{ role: "system", content: SYSTEM_PROMPT },
{ role: "user", content: [
{ type: "text", text: "Roast this room." },
{ type: "image_url", image_url: { url: image } },
]},
],
}),
});
const data = await res.json();
const roast = JSON.parse(data.choices[0].message.content);
return new Response(JSON.stringify(roast),
{ headers: { ...cors, "Content-Type": "application/json" } });
},
};
The site reads everything it needs from one small config. Fill in the three values you've collected — your affiliate tag stays PENDING until Step 8, and the plan works fine without it (links just don't pay you yet).
const CONFIG = {
// Step 4: your key-keeper Worker URL
workerUrl: "https://roast-api.YOUR-NAME.workers.dev",
// Step 3: your $9 Glow-Up Plan payment link
stripeLink: "https://buy.stripe.com/YOUR-LINK",
// Step 8: affiliate tags — fill in as each program approves you
affiliateTags: {
amazon: "PENDING",
wayfair: "PENDING",
walmart: "PENDING"
}
};
Send the filled-in config back and the site gets wired to your accounts — or drop it into the site build directly if you're deploying it yourself in Step 6.
- In Cloudflare, go to Workers & Pages → Create → Pages → Upload assets.
- Name the project
roast-my-roomand upload the site files. Deploy. - Your site is live at
roast-my-room.pages.dev— open it, upload a photo of your own room, and take the first roast yourself.
Optional, later: a custom domain (~$12/yr) looks more legit on a share card. The free subdomain works fine for launch — don't let a domain purchase delay you.
Before you announce anything — and before the affiliate applications in Step 8, because reviewers judge the site they can see. An afternoon of generating, not building.
Never launch — or apply for affiliates — with an empty site. Generate 20–30 roasts yourself first: your rooms, friends' rooms, volunteers from r/malelivingspace and roast-me communities, who will happily hand you content. This batch does double duty: it's the content Amazon's reviewers need to see in Step 8, and it's your first week of posts when the launch comes.
Deliberately last. Amazon reviews your actual site before approving you, and a rejected application can't be reassessed — applying before the site had content would be the one unforced error in this whole setup. With Steps 1–7 done, you're applying at exactly the right moment.
- Amazon Associates first — apply with your live
pages.devURL. They review the real site, and yours now has content on it: the seeded roasts from Step 7. - Then Wayfair and Walmart affiliate programs — same pattern, generally faster approvals.
- As each approval lands, paste the tag into the config (Step 5) and redeploy. From that moment, plan links pay you — and then you run the 7-day launch below.
Amazon's clock: you must drive 3 qualifying sales within 180 days of joining or the account closes. The 7-day launch push below is what clears that bar — don't start this clock until the audience is ready.
Run your own numbers
The $0 stack's only real cost is per-roast AI calls, and its only real question is whether free roasts convert. Drag the sliders to your honest guesses — then compare against paying MadeThis $49/mo for the same experiment.
Your assumptions
Fixed assumptions: 30-day month · average affiliate basket $60 at a 4% blended commission · Stripe keeps $0.56 of each $9 sale · MadeThis Starter = $49/mo with 5,000 monthly credits.
Your month, both ways
The affiliate shortlist
Three programs cover nearly every product a glow-up plan will ever recommend. Join in this order, all after the site is live and seeded (Step 8).
Amazon Associates
The default for lamps, rugs, shelves, and everything else. Deepest catalog, links everyone trusts — but the strictest gatekeeper of the three.
Wayfair Affiliate
Furniture-first catalog, which is exactly what room plans recommend most. Rates tend to beat Amazon's on the big-ticket items.
Walmart Affiliate
The budget end of every plan — the under-$50 fixes. Lower rates, but it catches the buyers who bounce off Amazon and Wayfair prices.
The order matters — here's the sequence
- Build and launch the site first (Steps 1–6). Amazon reviews a live property with real, original content — their rule of thumb is around 10 posts' worth.
- Seed the roasts (Step 7) so the site you'd show a reviewer is visibly alive.
- Apply with the live URL. A rejected Amazon application can't be reassessed, so a premature application burns your one clean shot.
- Beat the clock: 3 qualifying sales inside 180 days keeps the Amazon account open. Your launch push exists to clear this bar early.
The 7-day launch
One post a day, all built from roasts you already generated in Step 7. The proven format: room photo → dramatic pause → text-to-speech roast reveal.
Roast your own living room
Lead with yourself — it gives everyone else permission to play. "I built an AI that roasts rooms. I went first."
The worst room you can find
Extremes travel. The most chaotic room from your seeded batch, posted with the owner's blessing.
Roast battle #1
Two rooms, head to head, followers vote in the comments. Voting is engagement the algorithm can see.
The glow-up reveal
Redo your Day 1 room using your own $9 plan. Before/after is the product demo and the sales pitch in one post.
Stitch a decor creator
Roast a room tour from a home-decor TikTok (with credit). Send free premium roasts to micro-creators — one share from a 50k-follower account beats a month of solo posting.
Open submissions
"Roasting my followers' rooms all week." Every submission is a future post and a future share.
Most Roasted Room of the Week
Crown the leaderboard winner; they get a free glow-up plan. A weekly crown gives people a reason to come back — and to bring friends.
When the $49 starts making sense
The $0 stack is for finding out whether this works. MadeThis sells the thing you need after it works: an AI team doing support, content, and ads while you're at your day job. Graduate the week one of these is true:
- Plan sales clear $49/mo with room to spare — the fee becomes noise instead of a gamble.
- Your bottleneck is time, not money — roasts are selling but nobody's answering comments, posting, or running the loop.
- You're pushing real volume — though note the trap: MadeThis Starter's 5,000 monthly credits and daily safety cap can pause the business mid-spike, so a viral moment may mean jumping straight past Starter.
Until then, every dollar of the $49 is better spent on AI credits and your own seeded content. Validate on $0. Buy the team when there's something to run.