{"slug": "passioncast-turn-what-you-love-into-a-story-worth-hearing", "title": "PassionCast: Turn What You Love Into a Story Worth Hearing", "summary": "A developer built PassionCast, an AI-powered storytelling experience that transforms a person's passion into a short narrated mini-documentary. The tool uses Google Gemini to generate a structured story from user answers and ElevenLabs to produce expressive narration. The project is available as a live demo and open-source on GitHub.", "body_md": "*This is a submission for Weekend Challenge: Passion Edition.*\n\nI built **PassionCast**, an AI-powered storytelling experience that turns the memories behind a person's passion into a short narrated mini-documentary.\n\nThe idea came from a simple observation: people often talk about *what* they love, but they rarely get the chance to explain *why* it matters so much.\n\nPassionCast asks the user four questions:\n\nThe user can then choose a storytelling tone, such as warm and nostalgic, emotional documentary, epic and cinematic, energetic superfan, or funny and playful.\n\nGoogle Gemini transforms those answers into a structured story with:\n\nElevenLabs then turns the written story into expressive narration.\n\nThe final result combines the generated story, quote, audio player, and a visual voice experience so the user can both read and hear the story behind what they love.\n\nMy main goal was not to build another generic AI text generator. I wanted PassionCast to feel like a small personal documentary studio: emotional, playful, and easy to use.\n\n**Live demo:** [Open PassionCast](https://passioncast.vercel.app)\n\nThe main flow is:\n\n**GitHub repository:** [View the PassionCast source code](https://github.com/codeweb-dev/passioncast)\n\nThe repository includes the frontend experience, server-side AI routes, validation, reusable UI components, and the Gemini and ElevenLabs integrations.\n\nI built PassionCast with:\n\nThe user's answers are sent to a server-side Next.js route.\n\nGemini receives a carefully constrained storytelling prompt that tells it to preserve the user's real experience, avoid inventing names or events, and return a story that sounds natural when spoken aloud.\n\nInstead of requesting unstructured text, I ask Gemini to return a predictable object containing:\n\n`title`\n\n`story`\n\n`quote`\n\n`caption`\n\n`narrationDirection`\n\nThe response is validated before it reaches the interface. This made the application more reliable and made it much easier to render the result consistently.\n\nA major design decision was to keep the story factual. Gemini can improve the emotional structure and language, but it should not fabricate details that the user never provided.\n\nAfter Gemini creates the story, PassionCast sends the narration text to a protected server-side ElevenLabs route.\n\nElevenLabs gives the written story a voice and turns the result into something closer to a personal documentary than a normal generated paragraph.\n\nThe audio experience includes:\n\nThe written story appears before narration finishes, so the user is never forced to wait for audio before seeing the main result.\n\nIf narration fails, the generated story remains available. The user can still read it, copy it, or retry the voice without losing their work.\n\nI wanted PassionCast to feel human and expressive instead of looking like a generic AI dashboard.\n\nThe design uses:\n\nThe visual direction is inspired by modern editorial landing pages, but the interface and brand were created specifically for PassionCast.\n\nOne challenge with creative tools is the blank-page problem.\n\nTo make the app easier to try, PassionCast can prefill the form with a starter example. The user can edit everything, clear the form, or use **Surprise Me** to see a different idea.\n\nThis makes the main interaction understandable immediately while still encouraging users to replace the example with their own story.\n\nI added validation to both user input and generated output.\n\nThe application handles:\n\nAPI keys remain on the server and are never exposed to the browser.\n\nI am submitting PassionCast for:\n\nGemini is the narrative engine behind PassionCast.\n\nIt does more than summarize the user's answers. It identifies the emotional thread connecting the beginning of the passion, the user's strongest memory, and what that passion represents today.\n\nGemini also returns structured output, which makes the story-generation flow more reliable and allows the interface to separately present the title, story, quote, caption, and narration direction.\n\nElevenLabs transforms the generated story from something the user reads into something they experience.\n\nThe voice is a core part of the product rather than a decorative extra. PassionCast is designed around the idea that hearing a personal story can make it feel more intimate, memorable, and cinematic.\n\nThe narration, custom audio controls, retry experience, and Strands visualization all contribute to the final listening experience.\n\nThe hardest part was balancing creativity with truth.\n\nI wanted Gemini to produce something emotional, but I did not want the model to invent details. I solved this by placing strict limits on the prompt, using structured output, and validating the response before displaying it.\n\nAnother challenge was handling two AI services in one user flow. Story generation and narration can succeed or fail independently, so I designed the result state so the written story remains useful even when audio is unavailable.\n\nThe third challenge was presentation. It was easy for the project to look like a normal form followed by generated text. I spent time turning the experience into something that feels closer to an editorial feature and a small audio-documentary studio.\n\nThis project taught me that structured AI output is especially useful when the result needs to power a real interface.\n\nI also learned that graceful failure matters a lot in multi-service AI applications. A narration error should not destroy a successful story, and a user should always know what happened and what they can do next.\n\nMost importantly, I learned that AI experiences feel more meaningful when the technology supports a clear emotional purpose. Gemini provides the structure and language, while ElevenLabs delivers the voice. Together, they help preserve the story behind a person's passion.\n\nPassion can be loud, quiet, competitive, creative, nostalgic, or deeply personal.\n\nPassionCast is my attempt to give those feelings a format that people can keep, hear, and share.\n\n**Every passion has a story. PassionCast gives it a voice.**\n\nThanks for reading, and thanks to the DEV Community for creating a challenge that encouraged me to build something personal.", "url": "https://wpnews.pro/news/passioncast-turn-what-you-love-into-a-story-worth-hearing", "canonical_source": "https://dev.to/a11en/passioncast-turn-what-you-love-into-a-story-worth-hearing-51k4", "published_at": "2026-07-10 14:56:36+00:00", "updated_at": "2026-07-10 15:15:09.465308+00:00", "lang": "en", "topics": ["artificial-intelligence", "generative-ai", "ai-tools", "large-language-models", "developer-tools"], "entities": ["PassionCast", "Google Gemini", "ElevenLabs", "Next.js", "Vercel"], "alternates": {"html": "https://wpnews.pro/news/passioncast-turn-what-you-love-into-a-story-worth-hearing", "markdown": "https://wpnews.pro/news/passioncast-turn-what-you-love-into-a-story-worth-hearing.md", "text": "https://wpnews.pro/news/passioncast-turn-what-you-love-into-a-story-worth-hearing.txt", "jsonld": "https://wpnews.pro/news/passioncast-turn-what-you-love-into-a-story-worth-hearing.jsonld"}}