Inspiration

Everyone has that one friend who deserves to be roasted. We wanted to hand the mic to the least qualified comedian possible: a marshmallow that is actively being burned alive. The Scallion started from the question "what if the roast got meaner the closer you held it to the fire?"

What it does

The Scallion turns your friend into Mallow Musk, a talking marshmallow on a stick, and roasts them live over a campfire.

  1. Pick your victim. Enter a name, a description of their habits and quirks, and a photo.
  2. Mallowfy them. Their photo becomes a cartoon marshmallow with a mouth that moves when it talks.
  3. Dig up dirt. Firecrawl searches the web for them and pulls in public material.
  4. Light the fire. Drag the marshmallow over the flames. The closer you get, the faster and filthier the roasts: clean at a distance, PG-13 in the middle, fully uncensored in the flames.
  5. Watch it escalate. The roasts get more unhinged as the marshmallow burns, from cocky openers at golden brown to a full meltdown when charred. A live feed shows every roast, and optional ElevenLabs voice reads them aloud in sync with the animated mouth.

It's still a real game: toast both sides to a perfect 55–70% without burning your friend to a crisp.

How we built it

  • Frontend: React 19, TanStack Router, and Vite. The campfire, the burning marshmallow, and the melt effects are drawn on an HTML canvas. The mouth animation reacts to the actual loudness of the voice audio.
  • Backend: A NestJS API in a TypeScript monorepo, with shared types between the frontend and API. All API keys stay on the server.
  • Firecrawl: Its web search and scrape endpoints research the person, and its AI extraction writes roasts straight from what it finds on the page.
  • Grok (xAI): Optionally writes the roasts from Firecrawl's research, for the most unfiltered material.
  • OpenAI: Image generation turns the uploaded photo into a cartoon marshmallow.
  • ElevenLabs: Text-to-speech voices each roast. Clips are cached and rate-limited.
  • The heat system: Each roast writer returns about 70 jokes per person, grouped by game moment and ordered from cleanest to filthiest. The game picks from that ladder in real time based on how close you are to the fire.

Challenges we ran into

  • AI models don't follow orders. We asked for jokes sorted clean to filthy, and they came back shuffled, with a "clean" joke containing "ass". The server now scores every joke for profanity and re-sorts them itself.
  • Roasts fixated on one detail. Give the AI five facts about someone, and 80% of the jokes were about the first one. We now split the description into separate details, require every one to be used, and cap any single detail at a quarter of the jokes.
  • The roast ran out of material. Once charred, the marshmallow looped the same three jokes and the voice went silent. We made the late-game joke pools much deeper, combined them, and let the voice keep reading new roasts.
  • Our API credits ran out mid-hackathon. When OpenAI hit zero, we rebuilt joke writing on Firecrawl's AI extraction so the game kept working.
  • Too many cooks in one repo. Several of us were building overlapping features at the same time, and the merge conflicts were brutal.

Accomplishments that we're proud of

  • A roast that actually reacts to where you're holding the marshmallow, rather than playing a fixed script.
  • Personalized jokes about the real person, not generic insults.
  • Voice, captions, and mouth animation that stay in sync.
  • The game still works if any service is down or missing a key, down to a no-AI mode where the original Mallow Musk plays without any setup.

What we learned

  • Prompts alone aren't enough: when the output has to follow rules, check and fix it in code.
  • Firecrawl can do much more than scraping. Its AI extraction can act as a lightweight writer.
  • Comedy is hard to generate. Specific details and variety matter more than raw edginess.
  • Merge early and often.

What's next for the scallion

  • Roast battles: two marshmallows roasting each other, and the players roasting back.
  • Shareable roast reels: export a clip of your friend's marshmallow meltdown.
  • Group mode: everyone at the party submits dirt on the same person.
  • More voices: different roaster personas with their own comedic styles.

Built With

Share this project:

Updates

Submission history