Hi everyone! Here is my detailed proposal draft for
Advanced User Statistics Visualizations. Would love
feedback from mentors before I finalize it.
Name: Rudraksh Karmakar
GitHub: rudrakshk25060-csds · GitHub
Timezone: IST (UTC+5:30)
Availability: 3-5 hours/day (20-35 hrs/week)
About Me
I am a B.Tech CS student specializing in Data Science &
Business Analytics at Rishihood University
(KPMG-collaborated program). My academic focus on data
analysis and visualization makes this project a natural
fit for my skills.
I am actively contributing to ListenBrainz — my first PR
(#730) fixes the empty state on the Profile Listens tab
and has received mentor feedback which I have addressed.
PR: Fix: Show 0 instead of null for listen count on Profile Listens tab by rudrakshk25060-csds · Pull Request #730 · metabrainz/listenbrainz-android · GitHub
Why This Project
Music is deeply personal, and statistics make that
relationship visible. Better visualizations attract and
retain users by showing them exactly what they listen to,
how much they listen, and how their taste evolves over
time.
The existing ListenBrainz stats page covers the basics
well, but lacks depth in three key areas:
- Listening consistency over time
- Genre evolution over months/years
- Artist discovery journey
This project directly addresses those gaps.
Proposed Visualizations
1. Listening Streak Heatmap
A GitHub-style contribution graph showing daily listening
activity over a full year. Each cell represents one day,
colored by intensity of listening activity.
Why it matters: Users can see their consistency at a
glance. A user who listens every day deserves to see that
streak visually — it’s motivating and shareable.
Tech approach:
- Spark job aggregates daily listen counts per user
- Flask API endpoint returns daily counts for past 365 days
- React + Nivo Calendar chart renders the heatmap
- Results cached to avoid repeated Spark queries
2. Genre Evolution Chart
A stacked area chart showing how a user’s genre
preferences have shifted month by month over their entire
listening history.
Why it matters: Music taste changes over time. A user
who listened to mostly pop in 2022 but shifted to jazz in
2024 can see that journey visually.
Tech approach:
- Spark job aggregates genre data per user per month
- MusicBrainz genre tags used for classification
- All API responses include MBIDs alongside names
- React + Nivo Stream chart renders the evolution
3. Artist Discovery Timeline
A horizontal timeline showing when a user first listened
to each of their top artists, plotted chronologically.
Why it matters: Discovering a new artist is a
memorable moment. This visualization brings those moments
back and shows how a user’s musical world expanded.
Tech approach:
- Spark job finds first listen timestamp per artist
per user
- Flask API returns artist name, MBID, first-listen date
- React + Nivo TimeRange chart renders the timeline
Tech Stack
- Apache Spark — data aggregation and processing
- Python/Flask — API endpoints
- React + Nivo — frontend visualizations
- PostgreSQL/TimescaleDB — data storage
Week by Week Timeline
Community Bonding (May 8 - June 1)
- Study existing Spark jobs in codebase
- Set up local listenbrainz-server dev environment
- Discuss final scope with mentor
- Create detailed wireframes for all 3 visualizations
- Study Nivo Calendar and Stream chart documentation
Week 1-2 (June 2-15) — Heatmap Backend
- Write Spark job to aggregate daily listen counts
- Write unit tests for Spark job
- Create Flask API endpoint returning 365-day data
- Note: travel during early June — will complete
backend before travel
Week 3-4 (June 16-29) — Heatmap Frontend
- Build React component using Nivo Calendar chart
- Add loading states and error handling
- Write frontend tests
- Get mentor feedback
Milestone 1: Listening Streak Heatmap complete
Week 5-6 (June 30 - July 13) — Genre Evolution Backend
- Write Spark job aggregating genre data per month
- Integrate MusicBrainz genre tags with MBIDs
- Create Flask API endpoint for time-series genre data
- Write unit tests
Week 7-8 (July 14-27) — Genre Evolution Frontend
- Build React component using Nivo Stream chart
- Handle edge cases (few listens, unknown genres)
- Write frontend tests + mentor feedback
Milestone 2: Genre Evolution Chart complete
(Midterm evaluation: July 14-18)
Week 9-10 (July 28 - Aug 10) — Artist Discovery
- Write Spark job finding first-listen per artist
- Flask API with artist name + MBID + date
- Build React component using Nivo TimeRange chart
- Tests for backend and frontend
Week 11 (Aug 11-17) — Polish
- Integrate all 3 into the stats page
- Performance testing and optimization
- Mobile responsiveness improvements
Week 12 (Aug 18-25) — Final Submission
- Write documentation for all new components
- Final code cleanup and submission
- Write GSoC blog post
Milestone 3: All visualizations complete & merged
Questions for Mentors
- Are these 3 visualization ideas aligned with the
2026 roadmap?
- Should the Spark jobs follow any specific existing
pattern in the codebase?
- Is Nivo the preferred library or should I consider
alternatives?
- Any specific edge cases I should plan for in the
timeline?
Looking forward to your feedback!