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).
Live Demo: Run
npm run devin theyoutube-wrapped-app/folder and visit http://localhost:5173
Click to view dashboard screenshots (coming soon)
Hero Section - Overview with big stats
Total videos, hours watched, favorite channel with interactive links
Binge Sessions - With thumbnail grids
Binge detection with clickable video thumbnails and most-rewatched tracking
Fun Facts - Interactive video thumbnails
First/last videos of the year with clickable thumbnails
Top Channels - Rankings and analytics
Top 10 most-watched channels with view counts
Watching Patterns - Time-based heatmap
Hourly, daily, weekly, and monthly viewing patterns
Content Categories - Breakdown
Content classification: music, gaming, education, tech, and more
Note: Screenshots will be added soon. See Screenshot Instructions for details.
View the complete Hackathon Presentation with technical deep-dive, demo walkthrough, and key learnings.
.
βββ 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
- Hero Stats - Overview with total videos, hours, and favorite channel
- Top Channels - Rankings of your most-watched channels with visualizations
- Watching Patterns - Time-based analytics (hourly, daily, weekly, monthly)
- Content Categories - Classification and personality insights
- Binge Behavior - Session detection, rewatch analysis
- Fun Facts - Quirky insights and milestones
- 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
- Node.js 18+
- npm or yarn
- Your YouTube watch history from Google Takeout
- Go to Google Takeout
- Deselect all products, then select only YouTube
- Click "All YouTube data included" β Deselect all β Select only "history"
- Click "Next step" β Choose export settings
- Download and extract your data
- Find
watch-history.htmlin theYouTube/history/folder
cd youtube-wrapped-app
npm installnpm run devThen open http://localhost:5173 in your browser.
The app automatically loads sample data on startup - just open http://localhost:5173!
To use your own data:
- Get your
watch-history.htmlfrom Google Takeout (see above) - Copy it to the
data/folder, or - Upload it through the app's file upload interface
- Explore your YouTube Wrapped with the tab navigation!
- Framework: React 19.1 + Vite
- Charts: Recharts 2.10
- Icons: Lucide React 0.468
- Styling: Tailwind CSS 3.4
- Build: Vite 7.1
watch-history.html
β HTML Parser (DOMParser)
β Extract video events
β Filter by year (2025)
β Calculate analytics
β Render dashboard
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
Edit src/App.jsx line ~1034:
const [yearFilter] = useState(2025); // Change to your desired yearEdit 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
};Edit the COLORS object in src/App.jsx:
const COLORS = {
youtubeRed: '#FF0000',
wrappedPurple: '#8b5cf6',
// Customize here
};This project was built following Tessl's spec-driven approach:
-
Comprehensive Specification (
youtube-wrapped-spec.md)- Detailed input/output contracts
- Data processing pipeline
- UI component hierarchy
- Analytics algorithms
- Error handling strategies
-
Modular Implementation
- Separate parsing, analytics, and UI concerns
- Pure functions for data transformation
- Reusable chart components
-
Reproducible Workflow
- Clear data transformations
- Well-defined metrics
- Testable components
YouTubeWrapped (Root)
βββ FileUploader
β βββ Drag-and-drop + file input
βββ LoadingScreen
β βββ Processing animation
βββ Dashboard
βββ Navigation (tabs)
βββ Sections
βββ HeroSection
βββ ChannelsSection
βββ PatternsSection
βββ CategoriesSection
βββ BingesSection
βββ FunFactsSection
- File Size: Handles 1MB+ HTML files
- Processing Time: ~1-5 seconds for typical datasets
- Memory: Efficient with 10k+ video entries
- Rendering: Smooth 60fps animations
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Any modern browser with ES6+ support
- Only analyzes "Watched" videos (not "Viewed" posts)
- HTML format only (not JSON)
- Requires valid Google Takeout structure
- Estimated watch time assumes 10 min/video average
- Check if your watch history includes 2025 data
- Try changing the year filter in the code
- Ensure you uploaded the correct
watch-history.htmlfile - Check browser console for detailed errors
- Verify the file is from Google Takeout (not YouTube Studio)
- Check browser console for errors
- Ensure all dependencies installed correctly
- Try clearing browser cache
- 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
Built for the EF x Tessl x Anthropic Hackathon (Nov 3, 2025)
- 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
This project prioritizes specification excellence over implementation:
-
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
-
Modular Architecture
- Separation of concerns (parsing, analytics, UI)
- Pure functions for testability
- Clear component hierarchy
-
Reproducibility
- Well-defined data transformations
- Explicit algorithm descriptions
- Step-by-step implementation guide
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. π¬