There's a normal way to analyze your YouTube watch history. You export it from Google Takeout, open a Jupyter notebook, pd.read_json(), run a couple of value_counts(), feel a brief flicker of shame, and close the laptop.
I did not do that.
Instead I built a full Bronze → Silver → Gold medallion lakehouse on Databricks — Delta Lake, PySpark, an enrichment layer that calls the YouTube Data API, a FastAPI serving tier, a Neon Postgres warehouse, and a Next.js 16 frontend with animated cards — to discover that I watch a concerning amount of YouTube at 2 AM.
It's called YouTube Wrapped: Spotify Wrapped, but for the platform you actually spend your life on. if you want to poke them.)
Frontend is Next.js 16 / React 19 / Tailwind 4, Recharts for graphs, Framer Motion for the Wrapped-style card reveals. Vercel + Render + Neon.
What I actually learned
The medallion pattern earns its keep even when it's overkill. Every time my enrichment logic was wrong (often), I re-ran from Silver and Bronze never flinched. That immutable raw layer saved me more times than I'll admit.
Enrichment is 80% of the work. Ingest and clean are easy. Turning "Watched [title]" into "Punjabi track, this artist, this genre" is where the real engineering hides.
Your data will roast you for free. The night-owl score does not lie.
The honest part
Could this have been a notebook and 40 lines of pandas? Absolutely. But I wanted real end-to-end data-engineering reps — Delta Lake, medallion layering, an enrichment API, a serving warehouse, a real frontend — on a dataset I actually cared about. Building it on something personal made every architecture decision stick harder than another Titanic clone ever would.
Links
- 🔴 Demo:
- 📑 API: https://youtube-wrapped-api.onrender.com/docs
Data engineers: I'd genuinely love a sanity check on the Gold grain — am I pre-aggregating at the right level, or should the rhythm/binge tables stay lower-level and let the API roll them up? Roast the architecture in the comments. That's what the project's named after, after all.
SOCIAL SHARE CARD GENERATOR