This is a submission for Weekend Challenge: Passion Edition
What I Built
HahaNotes is an interactive web application designed to help developers, office workers, and students vent their daily stress by transforming real-world struggles (legacy code at 3 AM, unpaid overtime, sếp hãm, or exam stress) into hilarious, sarcastic AI-voiced banters, complete podcasts, and ready-to-share short videos.
The application features a dynamic dialogue between two contrasting AI hosts:
- Rookie (The Naive Optimist): A starry-eyed beginner who sees the world through rose-colored glasses and speaks in trendy buzzwords.
- Cynic (The Sarcastic Senior): A battle-hardened veteran who gently (or not so gently) pops Rookie's bubble with witty, dry, and highly relatable tech sarcasm.
Users can input their struggles, choose their favorite voices for the hosts, generate structured comedy scripts, chat continuously with the hosts to extend the banter, listen to fully produced podcasts with ambient lo-fi background music/laugh tracks, and export 9:16 vertical short videos with synchronized karaoke captions and visual memes.
Demo
Code
This is a Next.js project bootstrapped with create-next-app.
Getting Started
First, run the development server:
npm run dev # or yarn dev # or pnpm dev # or bun dev
Enter fullscreen mode Exit fullscreen mode
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
Learn More
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
Deploy on Vercel
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more…
How I Built It
HahaNotes is built with a modern stack optimized for smooth real-time generation and high-quality media rendering:
-
Frontend: Built with Next.js (App Router), TailwindCSS, and a custom vertical
<canvas>renderer. The browser records the canvas frames at 24fps and merges them with the live audio stream using the Web MediaRecorder API to generate downloadable.webmshort videos directly on the client side. - Backend: Powered by a FastAPI server that acts as a robust orchestrator for generative text and audio processing.
- SQLite Metadata & Cache Database: Designed to cache script results and register unique MD5 voice mappings on-demand, minimizing Gemini API calls and ElevenLabs API quota consumption.
-
Precise Timing Sync Engine: To solve the out-of-sync karaoke subtitles, we built a server-side metadata generator using
pydub. It reads the exact millisecond length of each cached audio scene and laugh track, allowing the frontend to render perfectly synced karaoke highlights on the canvas. -
Visual Assets: Contains 7 high-quality cartoon meme illustrations (
clown,harold,fine_dog,drake_no,drake_yes,doge, andburn) generated dynamically using Google's generative image capabilities.
Prize Categories
We are submitting our project to the following categories:
Best Use of ElevenLabs:
We utilized ElevenLabs' state-of-the-art TTS voices (like Bella, Rachel, Antoni, and Adam) to bring our hosts to life. The backend handles dynamic generation with asynchronous HTTP client calls, merges them into a cohesive multi-speaker podcast with ambient music and laughing sound effects usingpydub, and supports a robust gTTS fallback mechanism.-
Best Use of Google AI:
HahaNotes is built from the ground up using the official Google GenAI SDK.- We use
gemini-3.5-flashwith structured Pydantic schemas (HahaNoteScript) to guarantee strict JSON output format for dialogue script generation. - We leverage Gemini's stateful Interactions API (
client.interactions.createwithprevious_interaction_id) to keep a continuous, contextual memory of the chat history when users comment or prompt the hosts further. - We also used Google's image models to design custom meme templates for the video renderer.
- We use
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.