Roast My Room

The $0 stack setup, step by step. Upload a room photo, an AI roasts it, and the fix-it plan pays you twice — a $9 glow-up plan sold through Stripe, and affiliate commissions on every product in it. No inventory, no MadeThis subscription. Three accounts get you live; everything in between is paste-and-deploy, and the affiliate signups wait until the end — on purpose.

$0/mo
fixed cost to run it
~30 min
of your time to go live
1–5¢
per roast in AI calls
$8.44
kept per $9 plan sale
3
accounts needed to go live

How the money flows

The roast is free because the roast is the ad. Every step after it is where you get paid.

The hook

Free roast

A visitor uploads a room photo and gets a brutal AI roast plus a shareable roast card with your URL baked in.

Costs you ~1–5¢
The spread

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.

Costs you $0
Revenue 1

$9 Glow-Up Plan

The full fix-it plan — what to buy, in what order, room by room — sold through a Stripe payment link.

You keep $8.44 / sale
Revenue 2

Affiliate links

Every product in the plan carries your affiliate tag. They buy the lamp, you get the referral cut. You stock nothing.

~1–7% per order

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.

$0
I build it

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.

~1–5¢ / roast
You: the key

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.

$0
I write · you paste

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.

$0 + fee/sale
You: the link

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.

$0
You: signups

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.

0 of 8 steps done~30 min to go live · affiliates + launch after
Phase A — Your three accounts

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.

  1. Go to platform.openai.com and sign up (separate from a ChatGPT subscription — this is the developer side).
  2. Under Billing, add $10 of prepaid credit. At roughly 1–5¢ per roast, that's 200–1,000 roasts before you top up.
  3. Go to API keys → Create new secret key, name it roast-my-room, and create it.
  4. 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.

  1. Go to cloudflare.com → Sign up and create an account on the Free plan.
  2. No credit card is needed for what you'll use: Workers (your key-keeper) and Pages (your hosting).
  3. 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.

  1. In Stripe, go to Payment Links → New payment link.
  2. 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."
  3. On the confirmation setting, use a message like: "Payment received — your Glow-Up Plan is on its way to your inbox."
  4. 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.

Phase B — The wiring

Code is written for you below. Your job is copy, paste, and three blanks. ~15 minutes.

  1. In Cloudflare, go to Workers & Pages → Create → Worker, name it roast-api, and deploy the starter.
  2. Click Edit code, delete what's there, paste the script below, and Deploy again.
  3. Go to Settings → Variables and Secrets → Add: type Secret, name OPENAI_API_KEY, value = the key from Step 1. Save and deploy.
  4. 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-api worker.js
// 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).

site config
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.

  1. In Cloudflare, go to Workers & Pages → Create → Pages → Upload assets.
  2. Name the project roast-my-room and upload the site files. Deploy.
  3. 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.

Phase C — Stock the shelves

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.

Phase D — The money layer

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.

  1. Amazon Associates first — apply with your live pages.dev URL. They review the real site, and yours now has content on it: the seeded roasts from Step 7.
  2. Then Wayfair and Walmart affiliate programs — same pattern, generally faster approvals.
  3. 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

Roasts served3,000
AI call costs−$90.00
Plan sales (net of Stripe fees)+$506.40
Affiliate commissions+$72.00
Net on the $0 stack
$488.40
Same month on MadeThis Starter: $439.40 (after the $49 fee)

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

~3–4% on home goods

The default for lamps, rugs, shelves, and everything else. Deepest catalog, links everyone trusts — but the strictest gatekeeper of the three.

Apply: after the site is live, with content on it

Wayfair Affiliate

~5–7% typical

Furniture-first catalog, which is exactly what room plans recommend most. Rates tend to beat Amazon's on the big-ticket items.

Apply: same week as Amazon

Walmart Affiliate

~1–4% typical

The budget end of every plan — the under-$50 fixes. Lower rates, but it catches the buyers who bounce off Amazon and Wayfair prices.

Apply: same week, lowest priority

The order matters — here's the sequence

  1. 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.
  2. Seed the roasts (Step 7) so the site you'd show a reviewer is visibly alive.
  3. Apply with the live URL. A rejected Amazon application can't be reassessed, so a premature application burns your one clean shot.
  4. 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.

Day 1

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."

Day 2

The worst room you can find

Extremes travel. The most chaotic room from your seeded batch, posted with the owner's blessing.

Day 3

Roast battle #1

Two rooms, head to head, followers vote in the comments. Voting is engagement the algorithm can see.

Day 4

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.

Day 5

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.

Day 6

Open submissions

"Roasting my followers' rooms all week." Every submission is a future post and a future share.

Day 7

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.

"POV: an AI just read your living room for filth" "My room scored 23/100. Beat that." "The AI said my couch has 'given up'" "Roast battles: whose room is worse?"

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.