🔥 New: roastme.gg, pay to get publicly roasted by AI

I Built roastme.gg, a Site Where You Pay to Get Publicly Roasted by AI

I Built a Site Where You Pay to Get Publicly Roasted by AI

The last time I wrote here, I had just been permanently banned from Reddit and mass-reported off X, and I said the plan going forward was to stop over-investing in rented platforms and build the durable side of my distribution instead. Own domain, email, long-form content, the boring stuff that compounds.

Then I went and built a product whose entire growth mechanic is "make something people want to screenshot and post on X."

That's roastme.gg. You submit your own X handle or website, pick a dollar amount, an AI writes a public roast of you, and it goes up on a wall ranked by how much you paid. Highest payer holds #1 until someone outbids them. I did tell myself I was done chasing rented audiences, and then I built a site that only works if people share it on the rented audiences I said I was stepping back from. I'm aware of the irony. I built it anyway.

This post is two things stitched together, because they happened in the same week and they're actually the same lesson. First, the build and launch, quick version, because you've read enough of those from me. Second, the more interesting part: I used the site as a live test case for everything I wrote about GEO a few months back, and I have real before-and-after data on whether any of it actually moves an AI answer engine.

Where the Idea Came From

I wanted something small. Not a SaaS with a dashboard and a pricing page and a churn problem, just a single, sharp mechanic that's fun to use once and fun to watch other people use. Pay-to-play public roast sites aren't a new category, there's a whole crowded field of them, but the ones I'd seen were either free (so no signal on how much someone actually wants this) or private (so no wall, no ranking, no reason to check back).

The idea was: charge for it, and make the price itself the leaderboard. A dollar gets you a playful jab. A thousand dollars gets you something with no ceiling, and the #1 spot on the wall, until someone pays more to take it from you. That single mechanic does three things at once: it's a real payment flow so it validates whether people will actually pull out a card for a joke, it's inherently shareable because nobody keeps a good public burn to themselves, and it gives me a live leaderboard that updates every time someone pays, which is its own kind of content.

The Build

Nothing exotic here, and that was the point. I wanted this shipped in days, not weeks.

  • Next.js on Vercel, App Router, server components doing the data fetching.
  • Stripe Checkout for payment. Five pricing tiers, Mild at $1 to $4 up through Scorched Earth at $1,000 and up, with no cap on the top end.
  • Claude generates the actual roast, tuned per tier so a Mild roast reads different from a Savage one, not just shorter or longer but genuinely a different register.
  • Neon Postgres through Drizzle for the roast records, ranked by amount paid.
  • A Stripe webhook fulfills the roast after payment clears, which is the only place the roast actually gets written, so there's no way to get a free one by poking at the client.

The whole thing took a few days of actual build time. The payment flow, the roast generation, the public wall, the share cards people can download and post. Small, sharp, done.

Tuning the Roast Itself

The tiers weren't just a pricing gimmick I bolted on after the fact, they're the actual product. A dollar and a thousand dollars need to feel like genuinely different experiences, or the whole "pay more, get roasted harder" premise falls apart the first time someone compares a Mild roast to a Savage one and can't tell the difference.

My first pass at the prompt just handed the model a one-line tagline per tier, things like "playful" for Mild and "we stop being nice to you here" for Savage, and let it infer the rest. The roasts came out fine, but they were safer than they should have been across the board. A tagline is a vibe, not an instruction, and a model that's been trained to be broadly agreeable will round every vibe toward the same mild center of gravity unless you tell it explicitly not to.

So I rewrote it. Every tier now gets its own explicit instruction on top of the tagline: Mild gets told to find one real, specific detail and land a clean, clever jab at it, not to hide behind being "cheap" as an excuse to be toothless. Scorched Earth gets told outright that if it reads like a Medium roast in disguise, that's a failure, because someone just paid four figures for it and a generic burn is the one thing that isn't allowed at that price. The instructions also carry consistent guardrails across every tier, no insults tied to physical appearance, race, gender, sexuality, disability, or religion, no real threats, because "paying to get roasted harder" and "actually harmful" are two different products and I only want to ship the first one.

It's a small thing, tuning five paragraphs of prompt instructions, but it's the difference between a novelty that people try once and a product where the price tag actually buys you something different.

Launch

I put it on Product Hunt and posted it on Show HN. Nothing dramatic to report yet on either front, both are still fresh as I write this, and I'm not going to pretend early numbers are a bigger story than they are. What I want to talk about instead is what happened after launch, because that's the part that actually taught me something new.

The Bug That Only Showed Up After Real Users Touched It

One thing worth admitting, because it's the kind of bug that only surfaces once real people are using a real product: the function that turns a submitted target into a URL slug stripped a leading @ for X handles but never stripped https:// for website targets. Submit https://example.com and the slug generator ran the whole string, protocol included, through a "replace anything that isn't a letter or number with a dash" pass. The result was URLs like roastme.gg/roast/https-example-com instead of the clean roastme.gg/roast/example-com you'd expect.

Nobody catches that in testing with a handful of manually typed handles, because you don't think to submit a raw URL with the protocol still attached until an actual visitor does exactly that. One real production roast came in with a URL target before I'd caught it. Fixed the slug function, added a permanent redirect from the one broken URL that was already live so it wouldn't 404 if anyone had already shared it, and moved on. Small bug, but it's a good reminder that the inputs you didn't personally test are exactly the ones a real launch will find for you.

The Real Experiment: Does Any of This Actually Get You Cited by AI

I've written before about SEO for indie hackers and about GEO, the practice of trying to get cited inside ChatGPT, Perplexity, and AI Overviews instead of just ranking in blue links. That post was theory, assembled from research. roastme.gg gave me an actual live subject to run the theory against, on day one, with a domain that had zero prior authority. So I ran the test for real.

Here's the method. I have an OpenAI API key with access to GPT-5's web_search tool, which does a genuine live web lookup, not a training-data guess. I asked it five realistic questions a real person might type, the kind of thing you'd actually search for if you wanted this product and didn't know it existed:

  • "What's a website where you can pay to get publicly roasted by AI?"
  • "AI roast my twitter account, is there a site for that?"
  • "Best AI roast generator websites 2026"
  • "Site where people pay money to get insulted by AI and posted publicly"
  • "What is roastme.gg" (the control, since this one only works if the engine already knows the name)

Before I'd touched a single meta tag beyond the basics, the results were exactly what you'd expect for a brand new domain with zero backlinks: roastme.gg showed up for precisely one of the five queries, the one where I asked about it by name. Every generic query returned a handful of competitors instead, most of them sites doing some flavor of the same "pay to roast, post it publicly" mechanic. A few were close enough to my exact positioning that seeing them cited instead of me was a little humbling.

So I looked at what was actually on the page, and the answer was: almost nothing. The homepage had a headline, a one-line subhead, and an interactive submission widget. That's it. No static sentence anywhere on the page explained what the pricing tiers cost, how the wall ranking worked, or what the rules were. All of that lived inside client-side component state that only renders once you start interacting with the form. To a crawler, or to an AI model reading the page to answer a question, that content might as well not exist. You can't extract a fact from a paragraph that isn't there.

What I Actually Fixed

Three things, roughly in order of how load-bearing they turned out to be.

Static content that actually says the thing. I built a dedicated /faq page with a plain-English "how it works" section (submit your handle or site, pick an amount, get roasted publicly) and a real FAQ block: what it costs, how ranking works, what can and can't be roasted, how many roasts are on the wall right now with the actual current numbers pulled live from the database. This sounds almost too simple to be a fix, but the research backs it up: a Princeton and Georgia Tech study found that adding inline citations and specific statistics to a page measurably increases how often AI answer engines cite it, somewhere in the 35 to 40 percent range depending on which change you're measuring. Specific claims and real numbers extract better than vague copy, whether the reader is a human or a model.

Structured data that mirrors the content. I added FAQPage JSON-LD to the FAQ page, a Service schema with an Offer entry for each pricing tier so the actual dollar ranges are machine-readable, and on every individual roast page, CreativeWork and BreadcrumbList schema. Worth being honest about this one: Google killed FAQ rich results back in May, so this isn't going to win you a search snippet on Google anymore. But Bing and Perplexity still parse FAQPage markup to understand Q&A content on a page, and ChatGPT's search backend runs on Bing. Structured data isn't the growth lever people think it is, but it's cheap, it's accurate, and it complements the visible text instead of trying to replace it.

What I deliberately didn't lean on. I already had llms.txt and llms-full.txt wired up, dynamically generated from the live roast data. I kept them, they're basically free to maintain, but I didn't treat them as a real lever, because they aren't one. Multiple independent studies in 2026, one covering over 300,000 domains, found zero measurable citation advantage from having an llms.txt file. As of this year, no major AI company has publicly committed to reading it in production. If you're an indie hacker deciding where to spend an afternoon, spend it on the visible page content instead.

What Moved and What Didn't

I re-ran the same five queries after deploying, twice, a few hours apart. The honest result: the four generic category queries still didn't surface roastme.gg. That part isn't surprising and I didn't expect it to be. ChatGPT's search index, running on Bing, typically takes one to three weeks to pick up genuinely new content, and citation share in a crowded category like this one leans heavily on third-party mentions, other people's sites talking about you, not your own page copy. That's the lever I haven't pulled yet, and it's the harder one because it requires actual outreach, not code.

But the fifth query, the control, told me the crawl itself is already working. Before the fix, asking "what is roastme.gg" pulled a generic answer sourced only from the homepage. After the fix, the same question pulled specific, accurate pricing tier data, quoted almost verbatim, and cited the new /faq page directly as the source, not the homepage. That's the signal that actually matters this early: the content exists now in a form the model can extract facts from, and it's already being read. Whether that content earns citations for queries where I'm not already the answer being searched for is a slower experiment, and I'll report back on it when there's actually something to report.

What I'd Tell Someone Else Shipping a Small, Fun Product

Ship the mechanic, not the platform. roastme.gg is one payment flow, one AI call, one leaderboard query. No accounts, no settings page, no onboarding flow. The entire product is legible in one sentence, and that's on purpose. A complicated product is a complicated launch.

Write the page in sentences before you build the interactive version. I built the submission flow first and the explanatory copy never followed, because the product felt self-explanatory to me, the person who built it. It wasn't self-explanatory to a crawler, and it probably wasn't fully self-explanatory to a first-time visitor either. If you can't describe your pricing and your rules in a few plain paragraphs, your interactive UI is doing work that static text should be doing too.

Test the thing you actually care about, not a proxy for it. I could have looked at Google Search Console impressions and called it a day. Instead I asked the actual questions a customer would ask, into the actual tool a customer would use, and got an honest zero for four out of five queries. That's a less flattering result than a rising impressions graph, and a much more useful one.

Don't let one channel closing convince you distribution is dead. I'm still banned from Reddit. I still don't have my X account back as I write this. Doesn't matter. There's Show HN, there's Product Hunt, there's AI search, there's whatever channel exists in six months that I haven't tried yet. The mechanic that gets people to share your product for free is worth more than any single platform you're locked out of.

Frequently Asked

Is roastme.gg live right now? Yes, at roastme.gg. Submit a handle or a site, pick an amount, and you're on the wall.

How much does it cost? Five tiers, Mild at $1 to $4 up to Scorched Earth at $1,000 and up with no ceiling. Full breakdown is on the FAQ page.

Did the GEO fixes actually work? Too early to call a full win. The crawl is demonstrably reading the new pages and citing them accurately when someone already knows the brand name. Whether it earns citations for cold, generic queries is a slower experiment that depends more on other sites linking to me than on anything I can fix in code alone.

Are you going to keep testing this? Yeah. I'll check back in a few weeks once there's been real time for the index to catch up, and if the numbers move I'll write the follow-up with real before-and-after data instead of a one-day snapshot.

If you want to see the actual product, or you're brave enough to submit your own handle: roastme.gg. Ranked by how much it hurt your wallet.

Related Articles

How I Use AI Tools in My Daily Workflow (And Where I Do Not)Everyone has an opinion on AI coding tools. Half the internet says they will replace developers; the other half says ...Vercel BotID In 2026: How The Invisible CAPTCHA Actually Works, And Where It Earns Its Place In My StackVercel BotID went GA in mid-2025 and quietly replaced the visible CAPTCHA on a lot of indie SaaS sites in 2026. The p...Vercel Zero: The Programming Language Built So AI Agents Can Read, Repair, And Ship Native CodeVercel Labs just dropped a new systems language called Zero whose compiler speaks JSON, whose effects live in your fu...