Loading page...
Loading page...
A fully AI-automated content pipeline that turns the Romanian baccalaureate history syllabus into original songs across metal, pop, trap, and manele — with fact-checked lyrics, synced lyric videos, auto-uploaded YouTube content, and matching quizzes.

Decebal Cântă — AI-automated history songs
Decebal Cântă is a personal experiment in what a single developer can build when Claude Code, the Claude Agent SDK, and a stack of AI tools do the heavy lifting. The idea is simple: Romanian high schoolers cramming for the baccalaureate deserve something better than dusty textbooks, so historical figures narrate their own stories through original AI-generated songs across four musical genres. The pipeline is end-to-end automated — from drafting and fact-checking lyrics, through rating and ranking generated songs, to rendering synced lyric videos with Remotion and publishing them to YouTube. The only manual steps are the ones that would break external ToS (pasting into Suno, flipping the YouTube visibility toggle). Everything is released CC0, completely free for students.
Claude Code creates a cheat sheet of facts for each historical figure, making sure every important point from the textbook is covered and fact-checked.
Claude Code generates three candidate versions of the song. An in-house skill handles everything end-to-end — I just type a slash command.
A Claude Code agent fact-checks the song lyrics against multiple textbooks and online sources. Anything wrong or potentially misleading gets scrapped.
A Claude Code agent scores the three candidates on catchiness, entertainment, flow, and learning density. Weak ones get scrapped and regenerated; the rest get ranked.
Final lyrics and the matching Suno tags are written to per-song JSON files.
A Next.js interface reads those JSON files so I can copy tags and lyrics, and see all three versions side by side.
I paste the three versions into Suno by hand. This could easily be automated with Claude in Chrome, but that would break Suno's ToS, so I don't.
I listen to all three versions while doing chores, noting favourites, off-sounding moments, and any creative ideas (which I hand back to Claude to generate more variants).
I download the winning WAV and drop it into the song directory.
A single slash command triggers the remaining video and publishing steps.
A WhisperX script in align-only mode extracts accurate word timings using the original lyrics as the reference transcript.
A Claude Agent SDK agent checks whether the timings make sense, falling back to Whisper on Groq if needed. If timings still look wrong, the flow stops and asks for help — including an alternate path that uses downloaded Suno voice stems.
A Claude Agent SDK agent groups words into logical on-screen lyric blocks and inserts "did you know" popups during instrumental gaps.
A second Claude Agent SDK verifier cross-checks the previous agent's output to catch any hallucinated timings.
A script renders the lyric video with Remotion, including lyrics and the "did you know" popups.
ffmpeg muxes the original audio track onto the rendered video.
The YouTube Data API uploads the video with its description, tags, category, and metadata pre-filled.
I flip the video to public by hand — YouTube really does not want that automated, for good anti-spam reasons. Fair.
The YouTube link is written back into the song JSON, and the Next.js page automatically swaps the Suno-tags view for an embedded YouTube iframe.
A thumbnail is generated from the song title and uploaded to YouTube via the API.
Claude Code generates a quiz from the core facts in both the song and the cheat sheet, marking which ones are covered by the song and which are not.
A Claude Code agent verifies the quiz, its facts, and its answers before shipping.
Claude Code commits and pushes to GitHub, which auto-deploys the updated site to Vercel.