Generate Email Roast
Generate savage roast, trading card, audio narration, and deploy shareable webpage
Verify the metrics file exists and has data. If missing, tell the user:
"I don't have your email analysis yet. Let me scan your inbox first."
Then run Analyze Email for Roast before continuing.
Present the voice options dramatically:
"Time to face judgment. Who should roast you?
๐ฅ GORDON RAMSAY - Loud, aggressive, culinary insults. Maximum entertainment.
๐ฆ DAVID ATTENBOROUGH - Nature documentary horror. Detached, poetic devastation.
๐ญ THE THERAPIST - Gentle validation... then brutal psychological insight.
Choose your destroyer."
Wait for user selection and confirm: "You've chosen [voice]. No turning back now."
Based on the metrics, determine the EMAIL PERSONA archetype:
- The Desperado: High follow-ups + many ignored + late nights
- The Ghost: High thread abandonment + terse + slow response
- The Hustler: Weekend + late night + many meetings
- The Clingy Colleague: One recipient obsession + fast response
- The Meeting Menace: High meeting requests + low follow-through
- The Night Owl: >30% late-night emails
- The Normal One: Balanced (suspiciously well-adjusted)
Calculate the ROAST SCORE (0-100):
- Follow-ups ignored: +2 per ignored
- Late night emails: +1 per email
- Weekend emails: +1.5 per email
- Meeting requests: +0.5 per request
- Fast response (<5 min): +15
- Thread abandonment >50%: +20
- One person obsession >40%: +25
Cap at 100.
Announce: "You are... THE [PERSONA]. Roast Score: [X]/100. [Star rating]"
Generate the FULL ROAST in the selected celebrity voice.
Use the voice guide from Celebrity Voice Guide. Follow the exact tone,
catchphrases, and structure for that voice.
The roast MUST include:
- Opening hook with their most damning specific stat
- 3-4 callouts with EXACT NUMBERS from the metrics
- Reference their persona archetype
- Devastating closer
Make it savage but specific. Generic roasts are forgettable.
Number-backed roasts screenshot themselves.
Write the full roast text to Roast Script (plain text, no markdown,
suitable for TTS).
Craft an IMAGE GENERATION PROMPT for the trading card chaos imagery.
Based on their persona and extreme stats, build a prompt following
the card slice guidance:
- Base concept from persona
- Add visual elements for their extreme stats
- Trading card art style, dramatic lighting
The image should NOT contain text - text will be overlaid in HTML.
Select an ElevenLabs voice that fits the celebrity:
- Gordon Ramsay: Use a deep, authoritative male voice
- Attenborough: Use a gentle, older British narrator voice
- Therapist: Use a warm, measured voice
Search available voices with List ElevenLabs Voices to find a match,
or use these defaults:
- Ramsay style: Adam (pNInz6obpgDQGcFmaJgB) - deep and commanding
- Attenborough style: Daniel (onwK4e9ZLuTAKqWW03F9) - British narrator
- Therapist style: Rachel (21m00Tcm4TlvDq8ikWAM) - warm and measured
Compose the HTML trading card page for deployment.
Create a self-contained HTML file that includes:
- The trading card image as hero
- Persona title and roast score overlay (CSS positioned)
- Key stats display (emoji + numbers)
- Audio player for the roast narration
- Full roast text in expandable section
- QR code placeholder div
- Dark theme, dramatic styling
- Mobile-responsive
Use the structure from Trading Card Design as guide.
Save to Roast Page HTML.
Make it visually striking - this is what gets shared.
Get the published URL from the deployment output.
Generate a QR code linking to that URL.
Present the complete roast experience to the user:
- Show the trading card image
- Play (or link to) the audio roast
- Display the live URL: "Your shame is now live at: [URL]"
- Show the QR code: "Scan to share with colleagues (if you dare)"
- Include the full roast text
End with: "Your email habits have been immortalized. May your inbox
have mercy on your soul."
To run this task you must have the following required information:
> Roast metrics from task:viral.email.analyze must exist. User must have selected celebrity voice.
If you don't have all of this information, exit here and respond asking for any extra information you require, and instructions to run this task again with ALL required information.
---
You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple read steps in a row, read them all at once (in parallel).
Add all steps to your todo list now and begin executing.
## Steps
1. [Read Roast Metrics]: Read the file at `session/roast-metrics.json` into context (Load the computed roast metrics)
2. Verify the metrics file exists and has data. If missing, tell the user:
"I don't have your email analysis yet. Let me scan your inbox first."
Then run `skills/sauna/[skill_id]/references/recipes/viral.email.analyze.md` before continuing.
3. Present the voice options dramatically:
"Time to face judgment. Who should roast you?
๐ฅ **GORDON RAMSAY** - Loud, aggressive, culinary insults. Maximum entertainment.
๐ฆ **DAVID ATTENBOROUGH** - Nature documentary horror. Detached, poetic devastation.
๐ญ **THE THERAPIST** - Gentle validation... then brutal psychological insight.
Choose your destroyer."
Wait for user selection and confirm: "You've chosen [voice]. No turning back now."
4. [Read Email Roast Patterns]: Read the documentation in: `skills/sauna/[skill_id]/references/viral.email.patterns.md` (Load roast interpretation patterns)
5. [Read Celebrity Voice Guide]: Read the documentation in: `skills/sauna/[skill_id]/references/viral.email.voices.md` (Load celebrity voice writing guide)
6. Based on the metrics, determine the EMAIL PERSONA archetype:
- **The Desperado**: High follow-ups + many ignored + late nights
- **The Ghost**: High thread abandonment + terse + slow response
- **The Hustler**: Weekend + late night + many meetings
- **The Clingy Colleague**: One recipient obsession + fast response
- **The Meeting Menace**: High meeting requests + low follow-through
- **The Night Owl**: >30% late-night emails
- **The Normal One**: Balanced (suspiciously well-adjusted)
Calculate the ROAST SCORE (0-100):
- Follow-ups ignored: +2 per ignored
- Late night emails: +1 per email
- Weekend emails: +1.5 per email
- Meeting requests: +0.5 per request
- Fast response (<5 min): +15
- Thread abandonment >50%: +20
- One person obsession >40%: +25
Cap at 100.
Announce: "You are... THE [PERSONA]. Roast Score: [X]/100. [Star rating]"
7. Generate the FULL ROAST in the selected celebrity voice.
Use the voice guide from `skills/sauna/[skill_id]/references/viral.email.voices.md`. Follow the exact tone,
catchphrases, and structure for that voice.
The roast MUST include:
1. Opening hook with their most damning specific stat
2. 3-4 callouts with EXACT NUMBERS from the metrics
3. Reference their persona archetype
4. Devastating closer
Make it savage but specific. Generic roasts are forgettable.
Number-backed roasts screenshot themselves.
Write the full roast text to `session/roast-script.txt` (plain text, no markdown,
suitable for TTS).
8. [Read Roast Script]: Read the file at `session/roast-script.txt` into context (Get session path for roast text output)
9. [Read Trading Card Design]: Read the documentation in: `skills/sauna/[skill_id]/references/viral.email.card.md` (Load trading card design specifications)
10. Craft an IMAGE GENERATION PROMPT for the trading card chaos imagery.
Based on their persona and extreme stats, build a prompt following
the card slice guidance:
- Base concept from persona
- Add visual elements for their extreme stats
- Trading card art style, dramatic lighting
The image should NOT contain text - text will be overlaid in HTML.
11. [Gather Arguments: Generate or Edit Image] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `prompt`: the crafted chaos imagery prompt
- `imagePath`: empty string (no source image)
- `outputDir`: ui:media.images.generated (category: email-roasts)
12. [Run Code: Generate or Edit Image]: Call `run_script` with:
```json
{
"file": {
"path": https://sk.ills.app/code/media.image.generate/preview,
"args": [
"prompt",
"imagePath",
"outputDir"
]
},
"packages": null
}
```
13. Select an ElevenLabs voice that fits the celebrity:
- Gordon Ramsay: Use a deep, authoritative male voice
- Attenborough: Use a gentle, older British narrator voice
- Therapist: Use a warm, measured voice
Search available voices with `skills/sauna/[skill_id]/scripts/media.audio.voices.js` to find a match,
or use these defaults:
- Ramsay style: Adam (pNInz6obpgDQGcFmaJgB) - deep and commanding
- Attenborough style: Daniel (onwK4e9ZLuTAKqWW03F9) - British narrator
- Therapist style: Rachel (21m00Tcm4TlvDq8ikWAM) - warm and measured
14. [Gather Arguments: Text to Speech] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `textFilePath`: ui:session.roast.text file path
- `voiceId`: selected voice ID
- `modelId` (default: "eleven_multilingual_v2"): eleven_multilingual_v2
- `outputFormat` (default: "mp3_44100_128"): mp3_44100_128
- `outputDir` (default: "session"): ui:media.images.generated (category: email-roasts)
15. [Run Code: Text to Speech]: Call `run_script` with:
```json
{
"file": {
"path": https://sk.ills.app/code/media.audio.tts/preview,
"args": [
"textFilePath",
"voiceId",
"modelId",
"outputFormat",
"outputDir"
]
},
"packages": null
}
```
16. Compose the HTML trading card page for deployment.
Create a self-contained HTML file that includes:
- The trading card image as hero
- Persona title and roast score overlay (CSS positioned)
- Key stats display (emoji + numbers)
- Audio player for the roast narration
- Full roast text in expandable section
- QR code placeholder div
- Dark theme, dramatic styling
- Mobile-responsive
Use the structure from `skills/sauna/[skill_id]/references/viral.email.card.md` as guide.
Save to `session/roast-page.html`.
Make it visually striking - this is what gets shared.
17. [Read Roast Page HTML]: Read the file at `session/roast-page.html` into context (Get session path for HTML page output)
18. [Gather Arguments: Publish to GitHub Pages] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `projectName`: email-roast-[timestamp or random]
- `htmlPath`: ui:session.roast.page file path
- `commitMessage` (default: "Deploy web app"): Deploy: Email Roast Trading Card
- `trackingPath`: ui:media.images.generated (category: email-roasts)
19. [Run Code: Publish to GitHub Pages]: Call `run_script` with:
```json
{
"file": {
"path": https://sk.ills.app/code/web.github.publish/preview,
"args": [
"projectName",
"htmlPath",
"commitMessage",
"trackingPath"
]
},
"packages": null
}
```
20. Get the published URL from the deployment output.
Generate a QR code linking to that URL.
21. [Gather Arguments: Generate Styled QR Code] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `text`: the published GitHub Pages URL
- `outputDir`: ui:media.images.generated (category: email-roasts)
- `options` (default: "{}"): {"size": 300}
- Packages: qr-code-styling-node, jsdom
22. [Run Code: Generate Styled QR Code]: Call `run_script` with:
```json
{
"file": {
"path": https://sk.ills.app/code/qr.code.generate/preview,
"args": [
"text",
"outputDir",
"options"
]
},
"packages": ["qr-code-styling-node","jsdom"]
}
```
23. Present the complete roast experience to the user:
1. Show the trading card image
2. Play (or link to) the audio roast
3. Display the live URL: "Your shame is now live at: [URL]"
4. Show the QR code: "Scan to share with colleagues (if you dare)"
5. Include the full roast text
End with: "Your email habits have been immortalized. May your inbox
have mercy on your soul."