GSoC 2026: ListenBrainz event implementation

Contact information

Nickname: teayah
IRC nick/Matrix handle: @teayahx:matrix.org
Email: guitarratia@gmail.com
GitHub: teayahx · GitHub

I’m teayahx, a second year B. Tech student with strong interests in music and technology - which is why this project stood out to me immediately as an opportunity to bridge my interests. I have a solid foundation in programming with experience primarily in Python, and especially data analysis since I have worked (and am working) with music-related datasets as a part of my coursework. Additionally, my experience in cybersecurity has strengthened other technical aspects such as working with diverse data, analysing and extracting meaningful information and problem solving. I’m eager to apply these skills into the open-source environment and to continue learning more.


Proposed project

Proposed mentors: Ansh, Monkey
Languages/skills: Python, React, PostgreSQL
Estimated Project Length: 175 hours
Difficulty: Medium
Expected outcomes: Integration of MusicBrainz events into ListenBrainz
Short Description: Add MusicBrainz events into ListenBrainz with the addition of features such as following artists for event updates and playing event setlists

As someone who closely follows news on events of my favourite artists - whether it be big festivals in another continent or shows near my city - I’m keenly interested to contribute to a proper implementation of MusicBrainz events into ListenBrainz.

I’ve included features that I would personally use such as the ability to follow artists I’d be interested to attend events of, get the latest updates of shows in my area and especially, the ability to listen to setlists of events. The latter would be really useful in my opinion as I often find myself checking setlist.fm to see the songs an artist has been playing on their recent shows to familiarize myself with songs I may not know.

Certain events can also be suggested to users according to 2 parameters:
i) events of an artist followed by the user
ii) events in the user’s set area.
There currently aren’t features to view the above two but once they are implemented, it would improve the UX making it easy to find events to attend. The general features for events can also be implemented if one or the other parameter isn’t present though.


Proposed Features (with mock UI):

  1. Event page

UI features:

  • Event art, Artist, Event type, Venue, Date
    • Attending/Attended event button
    • Event genre tags derived from artist
    • Lineup including supporting acts with setlist of each which contains
      • Setlist of each performer, with listen cards
      • Play setlist option

1.1) Playable setlist:

Setlists are stored as text with their work MBID in the MusicBrainz event schema and to process that and make it into listen cards:

  • Use the formatSetlist script to artist name and track names, along with work MBID
  • Since ListenBrainz listen cards use recording MBIDs, queries would be used to fetch recordings from work MBIDs, prioritizing those by the performing artist.
  • Additionally, cache mappings between recording MBIDs and work MBIDs
  • Use recording MBID to generate listen cards
  • Setlist can be played in BrainzPlayer similar to playing albums from album page

Backend:

  • source: listenbrainz/db/mb_event.py
  • metadata caching: mbid_mapping/mapping/mb_event_metadata_cache.py
  • for routes: listenbrainz/webserver/views/entity_pages.py
  • for pydantic model: listenbrainz/db/model/metadata.py
  • populate cache: mbid_mapping/manage.py
  • for attendees: a relationship between user & events to display attendees & attending list on events page.
CREATE TABLE user_mb_event ( 
	id                  INTEGER GENERATED ALWAYS AS IDENTITY NOT NULL, 
	user_id             INTEGER NOT NULL, -- FK to "user".id 
	event_mbid          UUID NOT NULL, 
	created             TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
);

Frontend:

  • source: frontend/js/src/mb-event/EventPage.tsx
  • setlist formatting (from /musicbrainz-server/root/static/scripts/common/utility): frontend/js/src/mb-event/formatSetlist.tsx
  • attending users: frontend/js/src/mb-event/components/Attendees.tsx

API endpoints:

  • GET /event/{event_MBID}
  • GET /event/{event_MBID}/attendees
  • attend: POST /user/{user_id}/event
  • un-attend: DELETE /user/{user_id}/event/{event_MBID}


  1. Festival/tour page

UI features:

  • Festival/Tour art, Name, Festival/Tour, Venues/Locations, Dates
  • Festival/Tour genre tags derived from artists
  • Festival lineup with links to “{Artist} at {Festival}” for each performer
    or Tour dates with links to “{Artist} at {Venue}” for each show

Backend:

  • source: listenbrainz/db/series.py

Frontend:

  • source: frontend/js/src/series/SeriesPage.tsx


  1. Search events option

UI features:

  • The search would rank out by the event name first, then location/venue, then artist

Frontend:

  • source: frontend/js/src/search/EventSearch.tsx
  • modified: frontend/js/src/search/Search.tsx
    frontend/js/src/search/types.d.ts
    frontend/js/src/utils/APIService.ts

API endpoints:

  • GET /search/?search_term={query}&search_type=event


  1. Artist page ‘Events’ button

UI features:

  • The ‘Events’ button will be placed next to the radio button

Frontend:

  • modified source: frontend/js/src/artist/ArtistPage.tsx


  1. Artist’s events page:

UI features:

  • List of upcoming events or past events with date, venue, tour/festival name, area

Frontend:

  • source: frontend/js/src/artist/ArtistEvents.tsx

API endpoints:

  • GET /artist/{artist_mbid}/events


  1. User’s events page:

UI features:

  • Upcoming events (attending)
  • Past events (attended)
  • Count of events attended

Frontend:

  • source: frontend/js/src/user/events/UserEvents.tsx
  • modified: frontend/js/src/user/layout.tsx


  1. Global events page:

UI features:

  • details of upcoming & past events of the week
  • components ‘Events for you’ and ‘Events near you’ can be implemented once followed artists and user area features are implemented

Frontend:

  • source: frontend/js/src/event-feed/EventFeed.tsx
  • components: frontend/js/src/event-feed/components/EventsNearYou.tsx
    and frontend/js/src/event-feed/components/EventsForYou.tsx


  1. Features considering the 2 metrics mentioned above i.e. artist follows & user area

8.1) Following artists

UI feature:

  • Follow button on the artist page, besides the events button:

Backend:

  • A relationship is needed between user & artist such that the artists the user follows can be stored & viewed in user profile:
CREATE TABLE user_artist_follow (
    user_id             INTEGER NOT NULL, -- FK to "user".id
    artist_mbid         UUID NOT NULL,
    created             TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
  • relationship between user_id & artist_mbid: listenbrainz/db/artist_follow.py
  • artist follow action: listenbrainz/webserver/views/social_api.py

UI feature:

  • Hence, once an artist is followed, it will be listed on the user’s Taste as Following:

Frontend:

  • source: frontend/js/src/user/taste/components/FollowedArtists.tsx
  • modified: frontend/js/src/user/taste/UserTaste.tsx

API endpoints:

  • POST /1/user/{user_name}/follow/artist/{artist_mbid}
  • DELETE /1/user/{user_name}/follow/artist/{artist_mbid}
  • GET /1/user/{user_name}/following/artists

8.2) Settings adjustment for area:

The area feature would be implemented once MusicBrainz area data is in MetaBrainz OAuth.

UI features:
The user’s area can be stored similar to the way the timezone is stored. So additionally, the settings page could be modified as follows:

  • Timezone and Area settings in a ‘Preferences’ page
  • The previous ‘Playlist preferences’ page merged with “Export data”
  • Additionally, a note mentioning that choosing an area and marking events as attended could potentially reveal the user’s area

Backend:

  • to include area: listenbrainz/db/user_setting.py
  • settings API: listenbrainz/webserver/views/user_settings_api.py

Frontend:

  • timezone + area in frontend/js/src/settings/preferences/PersonalPreferences.tsx
  • export data + troi in frontend/js/src/settings/export/ExportData.tsx


8.3) Events in user feed

UI feature:
These 2 features would also lead to an additional feature that is notifying user’s in the feed when:

  • followed artist announces any event
  • an event is announced in the user’s area.

Backend:

  • fetch area & artist event notifs: listenbrainz/db/user_timeline_event.py
  • handle area & artist event notifs: listenbrainz/db/model/user_timeline_event.py

Frontend:

  • source: frontend/js/src/user-feed/UserFeed.tsx
  • modified: frontend/js/src/user-feed/UserFeedLayout.tsx


Schema update:


Timeline

Week 1 (May 25 - 31):

  • Implement artist following feature: create the user_artist_follow table
  • Create follow button on artist page
  • Create page for artists followed by user in taste

Week 2 (June 1 - 7):

  • Create the ‘Event’ page which can now be linked from artist’s events page & festival/tour page
  • Populate mb_event_metadata_cache

Week 3 (June 8 - 14):

  • Create button on the artist page for ‘Events’
  • Create artist’s events page which opens on clicking the Events button on artist page

Week 4 (June 15 - 21):

  • Create festival page with line-up of artists in place of setlists
  • Create tours page & festival main page (as part of ‘series’) containing their relevant information

Week 5 (June 22 - 28):

  • Integration of users with events: create the user_mb_event table
  • Create a button to mark events as attend/attending

Week 6 (June 29 - July 5):

  • Create Events page on user page
  • Display event attendees/attending users on event page
  • Display attended or planning to attend events on user

Week 7 (July 6 - 12): Midterm evaluation submission (July 6-10, 2026)

Week 8 (July 13 - 19):

  • Make the event setlist playable utilizing ListenBrainz listen cards

Week 9 (July 20 - 26):

  • Create global events page with all events of the week
  • Enable searching of events through the search option

Week 10 (July 27 - August 2):
with area implementation:

  • Integrate user area into DB
  • Adjust settings layout to include the area setting
  • Merge playlist preferences into export data
  • This sets the base for curating events according to user’s area

Week 11 (August 3 - 9):

  • Display notifications of events in user area or by artist followed by user in ‘My Feed’
  • Create ‘Events near you’ & ‘Events for you’ based on artist following / area features

Week 12 - Final week (August 10 - 24):

  • Cross check API calls & UI
  • Testing with events, follow, unfollow, attendance, notifications and area implementation
  • Final bug fixes

Community affinities

What type of music do you listen to?

My music taste is spread all across the genre of rock and also more recently, electronic.
A few of my favourite artists to name include:

A few of my favourite songs of all time would be:

What aspects of MusicBrainz/ListenBrainz/BookBrainz/Picard interest you the most?

To begin with, I was quite intrigued to find out about MetaBrainz and how much there is about music and metadata in general that’s stored here. Given that, I was really interested to find out about the projects that came with it too such as MusicBrainz and its extent of data in storing information about album releases including its formats and all the technical information of tracks/recordings that one doesn’t normally find in music streaming platforms. I’m also particularly fascinated by the unique statistics in ListenBrainz and the potential to include a lot more which makes me more excited to contribute to this project.

Have you ever used MusicBrainz Picard to tag your files or used any of our projects in the past?

Yes, I used Picard to edit the artist name and add cover art to my digital copy of Boris - flood and it worked perfectly and made it easier to track listens.


Programming precedents

I’ve been working with various programming languages since the age of 10 through academic exposure which covered Python, HTML, Java & C for me. Among these, I’m most familiar with Python and use it regularly for scripting.

I’m also working with SQL as a part of my coursework where my ongoing project deals with music databases too and have previously had another data analysis project dealing with music popularity trends using Python.


Practical requirements

What computer(s) do you have available for working on your SoC project?

I have access to a Lenovo LOQ with a 12th Gen Intel i5-12450HX processor, 16GB RAM (6GB VRAM), an NVIDIA GeForce RTX 3050 GPU and a 512 GB SSD. I use Ubuntu 24.04 on WSL with Windows as my main OS.

How much time do you have available per week, and how would you plan to use it?

I can invest about 25-30 hours per week initially (weeks 1-8), where I would actively work on the major features, dealing with the more intensive tasks in this period. In the last 4 weeks I would be working about 10-15 hours per week. I’ve structured work in my timeline considering my work hours.

@mr_monkey @anshgoyal31

I’ve put together my proposal and would really value your feedback on it. Could you review it when you can? (no rush)

Hi @teayah ! Thank you for submitting your proposal.

To evaluate your project, I’d love to see some more technical details on how you’ll implement the project. Listing the files you’ll change is not sufficient.