Skip to content

Repository files navigation

YouTube Wrapped 2025

A Spotify Wrapped-style dashboard for analyzing your YouTube watch history from Google Takeout.

Built for the EF x Tessl x Anthropic Hackathon (Nov 3, 2025).

Demo

Live Demo: Run npm run dev in the youtube-wrapped-app/ folder and visit http://localhost:5173

Screenshots

Click to view dashboard screenshots (coming soon)

Hero Section - Overview with big stats Hero Section Total videos, hours watched, favorite channel with interactive links

Binge Sessions - With thumbnail grids Binge Sessions Binge detection with clickable video thumbnails and most-rewatched tracking

Fun Facts - Interactive video thumbnails Fun Facts First/last videos of the year with clickable thumbnails

Top Channels - Rankings and analytics Top Channels Top 10 most-watched channels with view counts

Watching Patterns - Time-based heatmap Patterns Heatmap Hourly, daily, weekly, and monthly viewing patterns

Content Categories - Breakdown Categories Content classification: music, gaming, education, tech, and more

Note: Screenshots will be added soon. See Screenshot Instructions for details.

Presentation

View the complete Hackathon Presentation with technical deep-dive, demo walkthrough, and key learnings.

Project Structure

.
β”œβ”€β”€ youtube-wrapped-spec.md      # Comprehensive Tessl specification
β”œβ”€β”€ youtube-wrapped.jsx          # Standalone component
β”œβ”€β”€ youtube-wrapped-app/         # Full React application
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ App.jsx             # Main dashboard component
β”‚   β”‚   β”œβ”€β”€ index.css           # Tailwind CSS setup
β”‚   β”‚   └── main.jsx            # React entry point
β”‚   β”œβ”€β”€ public/
β”‚   β”‚   └── watch-history.html  # Sample data (git-ignored)
β”‚   β”œβ”€β”€ package.json
β”‚   └── ...
β”œβ”€β”€ data/                        # Your personal data (git-ignored)
β”‚   β”œβ”€β”€ README.md               # Instructions for getting your data
β”‚   └── watch-history.html      # Your YouTube watch history
β”œβ”€β”€ instruction.txt             # Original hackathon instructions
└── event.txt                   # Event information

Features

6 Dashboard Sections

  1. Hero Stats - Overview with total videos, hours, and favorite channel
  2. Top Channels - Rankings of your most-watched channels with visualizations
  3. Watching Patterns - Time-based analytics (hourly, daily, weekly, monthly)
  4. Content Categories - Classification and personality insights
  5. Binge Behavior - Session detection, rewatch analysis
  6. Fun Facts - Quirky insights and milestones

Analytics Capabilities

  • Volume Metrics: Total videos, unique channels, estimated hours
  • Temporal Analysis: Peak watching times, patterns, heatmaps
  • Binge Detection: Identifies 5+ video sessions within 2-hour windows
  • Content Classification: Categorizes into music, gaming, education, tech, etc.
  • Rewatch Tracking: Finds your comfort content
  • Fun Insights: Late-night counts, streaks, procrastination scores

Getting Started

Prerequisites

  • Node.js 18+
  • npm or yarn
  • Your YouTube watch history from Google Takeout

Getting Your YouTube Data

  1. Go to Google Takeout
  2. Deselect all products, then select only YouTube
  3. Click "All YouTube data included" β†’ Deselect all β†’ Select only "history"
  4. Click "Next step" β†’ Choose export settings
  5. Download and extract your data
  6. Find watch-history.html in the YouTube/history/ folder

Installation

cd youtube-wrapped-app
npm install

Running the Application

npm run dev

Then open http://localhost:5173 in your browser.

Using the Dashboard

The app automatically loads sample data on startup - just open http://localhost:5173!

To use your own data:

  1. Get your watch-history.html from Google Takeout (see above)
  2. Copy it to the data/ folder, or
  3. Upload it through the app's file upload interface
  4. Explore your YouTube Wrapped with the tab navigation!

Technical Details

Tech Stack

  • Framework: React 19.1 + Vite
  • Charts: Recharts 2.10
  • Icons: Lucide React 0.468
  • Styling: Tailwind CSS 3.4
  • Build: Vite 7.1

Data Processing Pipeline

watch-history.html
  β†’ HTML Parser (DOMParser)
  β†’ Extract video events
  β†’ Filter by year (2025)
  β†’ Calculate analytics
  β†’ Render dashboard

Key Algorithms

Binge Detection:

  • Sort events by timestamp
  • Group consecutive videos within 2-hour windows
  • Flag sessions with 5+ videos as "binges"
  • Flag 10+ video sessions as "rabbit holes"

Category Classification:

  • Keyword matching on video titles and channels
  • 8 main categories + "other"
  • First match wins (music β†’ gaming β†’ education β†’ ...)

Rewatch Analysis:

  • Track video IDs
  • Count duplicates
  • Identify most-rewatched content
  • Find "comfort channels" with frequent rewatches

Customization

Changing the Year Filter

Edit src/App.jsx line ~1034:

const [yearFilter] = useState(2025); // Change to your desired year

Adding New Categories

Edit the categorizeContent() function in src/App.jsx:

const rules = {
  music: /official\s+video|lyrics|audio|song/i,
  gaming: /gameplay|let's play|gaming/i,
  // Add your categories here
  myCategory: /keyword1|keyword2/i
};

Customizing Colors

Edit the COLORS object in src/App.jsx:

const COLORS = {
  youtubeRed: '#FF0000',
  wrappedPurple: '#8b5cf6',
  // Customize here
};

Project Architecture

Specification-Driven Development (Tessl)

This project was built following Tessl's spec-driven approach:

  1. Comprehensive Specification (youtube-wrapped-spec.md)

    • Detailed input/output contracts
    • Data processing pipeline
    • UI component hierarchy
    • Analytics algorithms
    • Error handling strategies
  2. Modular Implementation

    • Separate parsing, analytics, and UI concerns
    • Pure functions for data transformation
    • Reusable chart components
  3. Reproducible Workflow

    • Clear data transformations
    • Well-defined metrics
    • Testable components

Component Hierarchy

YouTubeWrapped (Root)
β”œβ”€β”€ FileUploader
β”‚   └── Drag-and-drop + file input
β”œβ”€β”€ LoadingScreen
β”‚   └── Processing animation
└── Dashboard
    β”œβ”€β”€ Navigation (tabs)
    └── Sections
        β”œβ”€β”€ HeroSection
        β”œβ”€β”€ ChannelsSection
        β”œβ”€β”€ PatternsSection
        β”œβ”€β”€ CategoriesSection
        β”œβ”€β”€ BingesSection
        └── FunFactsSection

Performance

  • File Size: Handles 1MB+ HTML files
  • Processing Time: ~1-5 seconds for typical datasets
  • Memory: Efficient with 10k+ video entries
  • Rendering: Smooth 60fps animations

Browser Support

  • Chrome/Edge 90+
  • Firefox 88+
  • Safari 14+
  • Any modern browser with ES6+ support

Known Limitations

  1. Only analyzes "Watched" videos (not "Viewed" posts)
  2. HTML format only (not JSON)
  3. Requires valid Google Takeout structure
  4. Estimated watch time assumes 10 min/video average

Troubleshooting

"No data for 2025"

  • Check if your watch history includes 2025 data
  • Try changing the year filter in the code

"Error Processing Data"

  • Ensure you uploaded the correct watch-history.html file
  • Check browser console for detailed errors
  • Verify the file is from Google Takeout (not YouTube Studio)

Charts not rendering

  • Check browser console for errors
  • Ensure all dependencies installed correctly
  • Try clearing browser cache

Future Enhancements

  • Export dashboard as PDF/image
  • Share functionality
  • Year comparison mode
  • Video duration from YouTube API
  • Channel thumbnails
  • Custom date ranges
  • Dark mode toggle
  • More personality types
  • Collaborative playlists from top videos

License

Built for the EF x Tessl x Anthropic Hackathon (Nov 3, 2025)

Acknowledgments

  • Tessl for the spec-driven development platform
  • Anthropic for Claude Code
  • Entrepreneurs First for hosting the hackathon
  • Recharts for beautiful chart components
  • Lucide for clean, modern icons

Hackathon Submission Notes

Specification Quality

This project prioritizes specification excellence over implementation:

  1. Comprehensive Documentation (youtube-wrapped-spec.md)

    • Input/output contracts clearly defined
    • Data processing pipeline with pseudocode
    • Complete UI specifications with layouts
    • Error handling strategies
    • Performance considerations
  2. Modular Architecture

    • Separation of concerns (parsing, analytics, UI)
    • Pure functions for testability
    • Clear component hierarchy
  3. Reproducibility

    • Well-defined data transformations
    • Explicit algorithm descriptions
    • Step-by-step implementation guide

Demonstration

The best specifications are demonstrated through working code. This implementation proves the spec is:

  • Complete: All features implemented
  • Accurate: Calculations match specifications
  • Practical: Real-world data processing works
  • Maintainable: Clear structure for future enhancements

Built with Claude Code following Tessl principles. 🎬

About

🎬 Spotify Wrapped-style dashboard for YouTube watch history. Built with React + Tessl spec-driven development for EF x Tessl x Anthropic Hackathon.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages