cd /news/artificial-intelligence/passioncast-i-built-an-ai-hype-man-f… · home topics artificial-intelligence article
[ARTICLE · art-56386] src=dev.to ↗ pub= topic=artificial-intelligence verified=true sentiment=↑ positive

PassionCast: I Built an AI Hype Man for World Cup Fans Using Gemini + ElevenLabs

A developer built PassionCast, an AI hype man for World Cup fans that generates 60-second audio commentary clips using Google's Gemini 2.0 Flash for script generation and ElevenLabs for voice synthesis. The tool lets users pick a team and passion mode, producing personalized commentary referencing players, history, and rivals. The project uses vanilla JavaScript, Vite, and GitHub Pages, with no backend to enable easy forking.

read4 min views1 publishedJul 12, 2026

This is a submission for Weekend Challenge: Passion Edition

The World Cup quarter-finals are on right now. I'm watching matches, yelling at my screen, and I thought: what if I could bottle that feeling into an audio clip?

PassionCast lets you pick your team, choose a passion mode (hype speech, glory moment, rivalry fire, heartbreak, fan anthem, or custom), and generates a 60-second AI commentary clip. Not the generic "your team is amazing" stuff. Actual references to your team's players, history, and rivals.

Pick India, select "Rivalry Fire," hit generate. You get a breathless commentator talking about the India-Pakistan cricket-meets-football tension, with real names and real context. Try Argentina and you get Maradona, La Albiceleste, the Diego legacy. That's what I was going for.

Three pre-generated sample clips are on the page. Hit play, no keys needed. You'll hear:

To generate your own, you'll need free API keys (30 seconds each):

The flow:

Your personal AI hype man for the World Cup 2026.

Pick your team. Choose a moment. Get a passionate, AI-generated audio commentary that captures the fire of football fandom.

Layer Technology Why
Script generation Google AI (Gemini 2.0 Flash) High temperature (0.9) + cultural context = scripts that feel personal, not generic
Voice synthesis ElevenLabs (Multilingual v2) Low stability (0.4) for emotional range, high style (0.6) for expressiveness
Frontend Vanilla JS + Vite Fast, no framework overhead, deploys anywhere
Hosting GitHub Pages Free, automatic deploys via GitHub Actions

No backend. No database…

No backend. No framework. One page, vanilla JS, two API calls. Vite for bundling, GitHub Pages for hosting.

Browser → Gemini 2.0 Flash (writes script) → ElevenLabs (speaks it) → Audio playback

I specifically didn't want a backend here. The whole point is that someone can fork this, drop in their own keys, and have it running in 30 seconds.

Getting Gemini to write passionate content was harder than I expected. At temperature 0.7, everything came out bland. "Your team has a proud history. The fans are excited." Useless.

At 0.9, things got interesting. Combined with a detailed system prompt that includes the team name, their rivals, their football culture, and the specific style I want (narrator vs commentator vs poet), the output started feeling real.

The trick was constraining length. I needed 150-200 words, the sweet spot for 45-60 seconds of audio. Too short and it feels empty. Too long and ElevenLabs starts rushing or the clip drags.

// Note: ${apiKey} is a template literal variable, not a real key. 
// Users provide their own free key from aistudio.google.com/apikey
const response = await fetch(
  `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`,
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      contents: [{ parts: [{ text: prompt }] }],
      generationConfig: { temperature: 0.9, maxOutputTokens: 500 }
    })
  }
);

I tested default voice settings first. Sounded flat. Like a GPS reading football commentary.

The fix: crank down stability to 0.4 (default is higher). This adds emotional variation. The voice wavers, speeds up, gets louder on key phrases. Exactly what you want for sports commentary.

Then style to 0.6 for extra expressiveness, and speaker boost on for clarity.

Three voices, matched to content:

body: JSON.stringify({
  text: script,
  model_id: 'eleven_multilingual_v2',
  voice_settings: {
    stability: 0.4,
    similarity_boost: 0.8,
    style: 0.6,
    use_speaker_boost: true,
  }
})

I used flag images from flagcdn.com instead of emoji because emoji flags don't render on Windows for England, Wales, and Scotland (they show as black rectangles). Learned that the hard way after building the whole grid with emoji first.

Dark theme with gold/fire accents because... it's a passion app. Light mode would feel wrong.

If I had another weekend: social sharing (let people post their clips), match-day mode that checks today's fixtures and auto-suggests hype content, and a gallery so you can hear what other fans generated. PRs welcome if you want to tackle any of these.

Best Use of Google AI: Gemini 2.0 Flash with temperature 0.9 and detailed cultural prompting. Produces scripts with real player names, real rivalry history, and team-specific fan culture for 48 nations. Three distinct writing styles (narrator, commentator, poet) via style instructions in the prompt.

Best Use of ElevenLabs: Multilingual v2 model with deliberately tuned settings. Stability at 0.4 for emotional range (default sounds robotic for sports content). Style at 0.6 for expressiveness. Three voices paired to content types. The output sounds like broadcast commentary, not text-to-speech.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @google ai 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/passioncast-i-built-…] indexed:0 read:4min 2026-07-12 ·