GSoC 2026 - Project Proposal Discussion - Advanced User Statistics Visualizations

Hi! I’m Rudraksh (rudrakshk25060-csds on GitHub), a B.Tech CS
student specializing in Data Science & Business Analytics.

I’m interested in proposing Advanced User Statistics
Visualizations for GSoC 2026, building on top of the excellent
work done in 2025.

My proposed new visualizations:

  1. Listening Streak Heatmap — GitHub-style contribution graph
    showing daily listening activity
  2. Artist Discovery Timeline — visualizing when users first
    discovered each artist
  3. Genre Evolution Chart — how genre preferences shift over time

Tech stack I plan to use:

  • Apache Spark for data processing
  • Flask API for backend endpoints
  • React + Nivo for frontend visualizations

I’ve already submitted PR #730 to the Android repo as my
first contribution.

Questions for mentors:

  1. Are these visualization ideas aligned with the 2026 roadmap?
  2. Should I focus on Spark jobs or Flask API endpoints first?
  3. Is there a preferred chart type for the heatmap in Nivo?

Looking forward to your feedback!

4 Likes

You put the post in the wrong category! It should be under Metabrainz/GSoC :slight_smile:

1 Like

I don’t think so. That category is exclusively for the final, submitted GSoC proposals. I would say this topic is in the correct category for a discussion in advance.

1 Like

Adding wireframes for all 3 proposed visualizations:

  1. Listening Streak Heatmap — GitHub-style calendar grid, colored by daily listen intensity

  2. Genre Evolution Chart — Stacked area chart showing genre shifts month by month

  3. Artist Discovery Timeline — Horizontal timeline with first-listen dots per artist

All built with React + Nivo, data processed via Apache Spark.

1 Like

Update: My first PR has been successfully merged!

PR #730 — Fix: null is displayed for listen count on Profile Listens tab Fix: Show 0 instead of null for listen count on Profile Listens tab by rudrakshk25060-csds · Pull Request #730 · metabrainz/listenbrainz-android · GitHub

Looking forward to contributing more and excited about the Advanced User Statistics Visualizations project!

Thanks @RustyNova and @kellnerd for the clarification! I’ll keep it here for now. Would love any feedback on the project idea itself — are these visualization ideas (Listening Streak Heatmap, Artist Discovery Timeline, Genre Evolution Chart) aligned with what MetaBrainz is looking for in 2026?

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

:chequered_flag: 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

:chequered_flag: 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

:chequered_flag: Milestone 3: All visualizations complete & merged


Questions for Mentors

  1. Are these 3 visualization ideas aligned with the
    2026 roadmap?
  2. Should the Spark jobs follow any specific existing
    pattern in the codebase?
  3. Is Nivo the preferred library or should I consider
    alternatives?
  4. Any specific edge cases I should plan for in the
    timeline?

Looking forward to your feedback!

1 Like

I created something similar to the artist discovery timeline, but in my personal locally hosted history viewing tool. I very much look forward to new visualizations built into ListenBrainz and hope to see yours added! I thought I would link what mine ended up looking like in case you might be interested What do YOU want in ListenBrainz? - #254 by DontMindMe

Thanks @DontMindMe! Really cool that you built something similar — I checked out your post and it’s great inspiration. Looking forward to building this properly into ListenBrainz so everyone can access it!