PassionCast: Turn What You Love Into a Story Worth Hearing 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. This is a submission for Weekend Challenge: Passion Edition. I built PassionCast , an AI-powered storytelling experience that turns the memories behind a person's passion into a short narrated mini-documentary. The 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. PassionCast asks the user four questions: The user can then choose a storytelling tone, such as warm and nostalgic, emotional documentary, epic and cinematic, energetic superfan, or funny and playful. Google Gemini transforms those answers into a structured story with: ElevenLabs then turns the written story into expressive narration. The 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. My 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. Live demo: Open PassionCast https://passioncast.vercel.app The main flow is: GitHub repository: View the PassionCast source code https://github.com/codeweb-dev/passioncast The repository includes the frontend experience, server-side AI routes, validation, reusable UI components, and the Gemini and ElevenLabs integrations. I built PassionCast with: The user's answers are sent to a server-side Next.js route. Gemini 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. Instead of requesting unstructured text, I ask Gemini to return a predictable object containing: title story quote caption narrationDirection The response is validated before it reaches the interface. This made the application more reliable and made it much easier to render the result consistently. A 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. After Gemini creates the story, PassionCast sends the narration text to a protected server-side ElevenLabs route. ElevenLabs gives the written story a voice and turns the result into something closer to a personal documentary than a normal generated paragraph. The audio experience includes: The written story appears before narration finishes, so the user is never forced to wait for audio before seeing the main result. If narration fails, the generated story remains available. The user can still read it, copy it, or retry the voice without losing their work. I wanted PassionCast to feel human and expressive instead of looking like a generic AI dashboard. The design uses: The visual direction is inspired by modern editorial landing pages, but the interface and brand were created specifically for PassionCast. One challenge with creative tools is the blank-page problem. To 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. This makes the main interaction understandable immediately while still encouraging users to replace the example with their own story. I added validation to both user input and generated output. The application handles: API keys remain on the server and are never exposed to the browser. I am submitting PassionCast for: Gemini is the narrative engine behind PassionCast. It 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. Gemini 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. ElevenLabs transforms the generated story from something the user reads into something they experience. The 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. The narration, custom audio controls, retry experience, and Strands visualization all contribute to the final listening experience. The hardest part was balancing creativity with truth. I 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. Another 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. The 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. This project taught me that structured AI output is especially useful when the result needs to power a real interface. I 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. Most 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. Passion can be loud, quiet, competitive, creative, nostalgic, or deeply personal. PassionCast is my attempt to give those feelings a format that people can keep, hear, and share. Every passion has a story. PassionCast gives it a voice. Thanks for reading, and thanks to the DEV Community for creating a challenge that encouraged me to build something personal.