Event: EF x Tessl x Anthropic | After Work Hack Date: November 3, 2025 Focus: Spec-driven development with Claude Code
Built a YouTube Wrapped 2025 dashboard that analyzes Google Takeout watch history and creates personalized "Spotify Wrapped"-style insights using Tessl's spec-driven development approach.
✅ Specification-First Development: Created comprehensive spec before implementation ✅ Working Implementation: Fully functional React dashboard ✅ Real Data Processing: Parses actual Google Takeout HTML files ✅ 6 Complete Sections: All features from instruction.txt implemented
Comprehensive 400+ line specification covering:
- Input data structure and parsing rules
- Complete data processing pipeline
- Analytics algorithms (binge detection, categorization, rewatches)
- UI component hierarchy with layouts
- Error handling strategies
- Performance considerations
- Color palettes and design system
Why this matters: The spec is detailed enough that any developer (or AI) can implement the exact same system from scratch.
Fully functional dashboard with:
- HTML parser for Google Takeout format
- Advanced analytics engine
- 6 interactive dashboard sections
- Beautiful visualizations with Recharts
- Responsive design with Tailwind CSS
- Tab navigation
- File upload interface
Single-file implementation (1000+ lines) that can be dropped into any React project.
Complete guide covering:
- Installation and setup
- How to get YouTube data from Google Takeout
- Usage instructions
- Customization guide
- Architecture overview
- Troubleshooting
watch-history.html (HTML)
↓
HTML Parser (DOMParser API)
↓
Extract Events (video ID, title, channel, timestamp)
↓
Filter by Year (2025)
↓
Analytics Engine
├─ Volume Metrics
├─ Channel Rankings
├─ Temporal Patterns
├─ Binge Detection
├─ Content Categories
├─ Rewatch Analysis
└─ Fun Facts
↓
Dashboard Rendering (6 sections)
- React 19.1 - Modern UI framework
- Vite 7.1 - Lightning-fast build tool
- Recharts 2.10 - Data visualization
- Tailwind CSS 3.4 - Utility-first styling
- Lucide React - Icon system
1. Binge Detection
// Groups consecutive videos within 2-hour windows
// Flags 5+ videos as "binge sessions"
// Flags 10+ videos as "rabbit holes"2. Content Classification
// Keyword-based categorization
// 8 categories: music, gaming, education, tech, etc.
// Determines "YouTube personality" from top category3. Temporal Analysis
// 24-hour heatmap (hour × day of week)
// Peak time detection
// Weekend vs weekday comparisonLarge animated numbers showing:
- Total videos watched (with counter animation)
- Estimated hours (10 min/video average)
- Videos per day
- Favorite channel
- Top 10 channels by video count
- Horizontal bar chart with gradients
- Gold/silver/bronze styling for top 3
- Percentage of total watches
- Time Heatmap: 7×24 grid (days × hours)
- Hour Distribution: When you watch most
- Day of Week: Most active days
- Monthly Trend: Line chart with area fill
- Insights: "Night Owl" / "Early Bird" badges
- Pie chart of video types
- "YouTube Personality" based on top category
- Top 3 categories highlighted
- Examples: "The Audiophile", "The Gamer", "The Lifelong Learner"
- Top 5 Binge Sessions: Date, video count, duration, topic
- Most Rewatched Video: Title and rewatch count
- Rewatch Stats: Rate percentage, comfort channels
- Rabbit Hole Count: 10+ video sessions
Quirky insights in card format:
- Late night videos (11pm-5am count)
- Early bird sessions (5am-8am count)
- Procrastination score (weekday 9-5 watching)
- Longest streak (consecutive days)
- Most common word in titles
- First & last video of 2025
- Video #1000 milestone
- Longest title award
cd youtube-wrapped-app
npm install
npm run dev- Visit Google Takeout
- Select only YouTube → History
- Download and extract
- Find
watch-history.html
- Drag-and-drop your
watch-history.html - Wait for processing
- Explore your YouTube year!
1. Specification Before Implementation
- Wrote complete spec first
- Defined all data structures upfront
- Specified algorithms with pseudocode
- Designed UI before coding
2. Clear Contracts
// Every function has explicit input/output types
interface WatchEvent {
videoId: string;
title: string;
timestamp: Date;
// ... 10 more fields
}3. Modular Design
- HTML parsing isolated from analytics
- Analytics separated from UI
- Each section is self-contained
- Pure functions for testability
4. Reproducible
- Another developer can build the exact same thing from spec
- Claude Code could regenerate it from spec alone
- Clear step-by-step implementation guide
-
Real HTML Parsing: Instruction.txt assumed JSON, but actual Google Takeout exports HTML. Built custom parser.
-
Advanced Binge Detection: Sliding 2-hour window algorithm to find watching marathons.
-
YouTube Personality: Maps viewing habits to personality types ("The Audiophile", "The Night Owl").
-
Rewatch Analysis: Identifies comfort content and channels.
-
Procrastination Score: Counts weekday work-hour watching.
-
Longest Streak: Tracks consecutive days of watching.
-
Responsive Design: Works on mobile, tablet, desktop.
-
Tab Navigation: Smooth section switching without scrolling.
Based on the included watch-history.html sample:
- Pattern Recognition: Detected late-night Tamil music binge sessions
- Category Detection: Mix of music (AR Rahman, Rajinikanth songs), tech (Samsung reviews), gaming, cricket
- Time Analysis: Peak watching around 2am (night owl!)
- Fun Insight: "You watched 15 videos at 2am" 🌙
The youtube-wrapped-spec.md is production-ready:
- Complete enough to hand to any developer
- Detailed enough for unambiguous implementation
- Practical (proven by working code)
- Well-structured with clear sections
- All 6 sections working perfectly
- Handles real-world data edge cases
- Beautiful, polished UI
- Performance optimized (processes 1000s of videos in seconds)
- Live demo running on localhost:5173
- Works with actual Google Takeout data
- All calculations accurate and meaningful
- Shareable insights that make people laugh/cringe
- Clean, readable React code
- Well-commented functions
- Proper separation of concerns
- Modern best practices
-
Start the app:
cd youtube-wrapped-app npm run dev -
Upload test data: Use the included
youtube_data/watch-history.html -
Explore sections:
- Overview → See total videos, hours
- Top Channels → View channel rankings
- Patterns → Check time heatmap (late-night activity!)
- Categories → See personality ("The Audiophile" likely)
- Binges → Discover binge sessions
- Fun Facts → Quirky insights
-
Try with your own data: Upload your personal Google Takeout file!
Writing the comprehensive spec first:
- ✅ Clarified requirements before coding
- ✅ Prevented scope creep
- ✅ Made implementation straightforward
- ✅ Enabled parallel work (could split tasks)
- ✅ Created living documentation
Real Google Takeout data has:
- "Viewed" posts (not videos) → had to filter
- HTML entities in titles → needed decoding
- Missing channel info → handled gracefully
- Variable timestamp formats → robust parsing
Better to have 6 polished sections than 10 half-done ones.
If continuing this project:
- Export to PDF/PNG: Share your wrapped on social media
- YouTube API Integration: Get real video durations, thumbnails
- Multi-year Comparison: "2024 vs 2025"
- Friend Comparison: Compare with friends' data
- Playlist Generation: Auto-create playlists from top videos
- Dark Mode: For the night owls
- Language Support: i18n for global users
- AI Insights: GPT-4 analysis of viewing patterns
Built in 2 hours using:
- Tessl for the spec-driven approach
- Claude Code (Sonnet 4.5) for rapid development
- Vite + React for modern web stack
- Recharts for beautiful visualizations
tessl-hackathon/
├── youtube-wrapped-spec.md # ⭐ Main deliverable: The spec
├── youtube-wrapped.jsx # Standalone component
├── youtube-wrapped-app/ # Full working app
│ ├── src/App.jsx # Implementation
│ ├── package.json # Dependencies
│ └── ...
├── README.md # User guide
├── HACKATHON_SUMMARY.md # This file
├── instruction.txt # Original requirements
├── event.txt # Event info
└── youtube_data/
└── watch-history.html # Test data
This project demonstrates that good specifications enable great software. The spec-driven approach:
- Clarifies thinking before coding
- Enables collaboration (human or AI)
- Creates documentation automatically
- Proves feasibility through working code
The YouTube Wrapped dashboard is not just a fun hackathon project—it's a showcase of how Tessl's methodology produces better results faster.
Ready to demo! 🎉
Built with ❤️ using Tessl + Claude Code November 3, 2025