GSoC Application Proposal
Contact Information
Nickname: MrKomodoDragon
IRC nick/Matrix handle: mrkomododragon
Email: mrkomododragon1234@gmail.com
Github: MrKomodoDragon (MrKomodoDragon) · GitHub
Personal Git Forge: mrkomododragon - MrKomodoDragon's Software Lair: Beyond Coding. We Forge
Hey y’all, my name is MrKomodoDragon and I’m a high school student (class of ‘26) who loves programming.
I’ve been programming for a while now, over 5 years, and I have learned a lot along the way.
Proposed project
Events in MusicBrainz are fairly simple: they hold informatino pertaining to upcoming events in the music world, be it concerts, festivals, and so on. They usually include information about where they are held, when they are held, and the artists involved in the project.
The proposal involves the integration of these events into ListenBrainz, as it help to enhance the discovery aspect of the project. For example, someone who is getting acquainted to an artist would be able to find concerts that they would want to attend easily.
Here is the scope of what this integration would entail:
- Add a new events page in ListenBrainz to view information about the event directly on the website
- Add a section in the artist’s webpage that allows for viewing past and upcoming events
- Create a New Events page that is both global and tailored to the user, such that the user can find new events that are relevant to their music tastes
- Create a my events page that aggregates all events the user has indicated interest in/going to
- A notification system that serves the purpose of notifying users of upcoming events in a place where they find convenient
Prerequisites
There must be work done in order to add support for easy discovery of events, and that is primarily adding in support for a user specifying their area.
Modifications to the schema would include:
ALTER TABLE "user_setting" ADD COLUMN area UUID;
There are is one tradeoff to keep in mind for this addition: user privacy vs. usability. Primarily, my intention is that a user should not have to leak their exact location but still be able to find events within a distance of them in the “New Events” Page.
As for the UI: this should be a fairly simple addition, and in fact, it seems the ListenBrainz devs have made some ideas already regarding how this looks in the Figma document (see the dev: dump section), and frankly since they did a better job than I could, we should use that.
Depending whether a user specifies a country or something specific such as a town, the “new releases page” should query accordingly.
In addition, I am not sure about we need a cache for storing events, and if it is something extremely important. However, a potential cache could be something like:
CREATE TABLE events_cache (
event_mbid UUID,
last_updated TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
event_type event_type,
artist_data JSONB NOT NULL,
area_data JSONB NOT NULL,
);
This could be queried for all the pages described below that requires a querying events consistently. Query for the event from MusicBrainz, store in the cache, and future look ups can use this so we don’t hammer MB in the future.
“Events Page”
UI Mockup
This page is the main landing page for an individual event in ListenBrainz, just like w similar pages exist for albums, tracks, artists, etc.
This page has basic info such as when the event is, where it will be held, and will display any related work, such as albums that may be premiering at a convert.
There will also be options for marking interest in the event or whether you are going to it, so that it can be added to the “My Events” Page, described below.
Following the design language of many other entity pages on ListenBrainz, it will also have a related CritiqueBrainz section so people can read reviews about how the event went.
This page will mostly be a frontend endeavor as it hooks into data already provided by MusicBrainz.
Notification and Event Signup Management
This is going to be the most important/novel part of the entire project. The purpose of this page is to serve as a hub so that users can see what they are interested in and find out a place where they can see who is going as well.
The SQL schema that will be added is as follows:
In admin/sql/create_tables.sql
CREATE NEW TABLE "event_interaction" (
id SERIAL -- PK,
user_id INTEGER NOT NULL -- FK to "user".id
event_id UUID,
event_interaction_type event_interaction_type,
created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
The event_interaction_type will be defined in `admin/sql/create_types.sql” as:
CREATE event_interaction_type AS ENUM('interested', 'going')
The necessary foreign and primary keys would be as such:
in admin/sql/create_foreign_keys.sql:
ALTER TABLE event_interaction
ADD CONSTRAINT event_interaction_user_id_foreign_key
FOREIGN KEY (user_id)
REFERENCES "user" (id)
ON DELETE CASCADE;
in admin/sql/create_primary_keys.sql:
ALTER TABLE followed_artists ADD CONSTRAINT event_artists_pkey PRIMARY KEY (id);
All of this data will be shown in a page below:
Notifcation methods:
One way I expect for the user to be notified about events would be through either the feed, or email/RSS if that was an option. To avoid spam/a large amount of notification, I think these notifications should default primarily to followed artists.
The implementation would add a new type of notification event.
There would need to be primarily be an altering of the event_type type that is used in the user_timeline_event table. Unfortunately I have no idea how to name this… event_new_musicbrainz_event maybe? :^)
Adding that event type, and wiring it up in the frontend is quite simple.
The one thing I still need to think about however, is how to check for new events to notify. Perhaps a scheduled task that runs every x minutes? This part needs some more thoughts, please let me know if you have any ideas for this.
Artists Page
This addition will be fairly simple - similar to how there are albums listed on an artists page right now, there will be a card with upcoming + past events.
This section will be fairly simple, as it only needs to query the search api of MusicBrainz for relevant events, and render them in a manner fairly consistent with the rest of the artist page.
Mockup below:
Clicking on the events linked will lead to the dedicated events page detailed above.
Following Artists
In addition, there will be a “follow artist” mechanism that will be added to the Artists page, as a button at the top of the page near the banner.
This necessitates a new table, which is described below:
CREATE NEW TABLE "followed_artists" (
id SERIAL -- PK,
user_id INTEGER NOT NULL -- FK to "user".id
followed_arist UUID,
created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
A new foreign key must be added in admin/sql/create_foreign_keys.sql:
ALTER TABLE followed_artist
ADD CONSTRAINT followed_artist_user_id_foreign_key
FOREIGN KEY (user_id)
REFERENCES "user" (id)
ON DELETE CASCADE;
… and a new primary key to `admin/sql/create_primary_keys.sql:
ALTER TABLE followed_artists ADD CONSTRAINT followed_artists_pkey PRIMARY KEY (id);
Usage of this table for fetching events in the new events category would involve something like
SELECT followed_artist from followed_arists WHERE user_id = "sample_user_id";
Then using this list of ids in a MusicBrainz API query to find relevant events for the “New Events” Page.
“New Events” Page
The new events page will have a very similar function as the Fresh Releases page that currently exists the ListenBrainz site. there will be both a global option and a for you option, with all new events being displayed on the global page and user-specific recommendation being on the for you page.
The for you page will have both events that are related to top artists that the user has been listening to recently or artists that the user has decided to follow. One specific criteria will be area, and that will be applied to find nearby events that are actually feasible for the user to use.
Depending on if they select a country or a specific town, the ListenBrainz API can use a radius to decide where they can live.
The user will have the ability to specifically filter for either recommendations by top artists or by followed artists in order to have granular control over their tastes.
The top artists method will use the existing top artists api endpoint and get the top artists, and then query those artists respective
As for UI design, see the above mockup for the “My Events” Page. It will have a very similar design as both pages display event data, just in different scopes. I envision that the same design can be reused for both of the pages.
I also plan on making an RSS feed that the user can subscribe to so that they can look at these events from their RSS reader of choice, and they can be notified quickly.
API routes
Below is a list of API route that I expect to be added, so that users can programmatically interact with the new events features added.
/1/explore/new-events - similar to fresh releases, this will give you new-events globally. Optionally, if user authentication is passed, it will give user specific recommendations
/1/metatadata/event - similar to the other metadata endpoints, this will be used to get information for the list of event MBIDs that are pass in
/1/event/<event_mbid>/interested - A POST to this route with either true or false will add/remove the fact you are interested in an event.
/1/event/<event_mbid>/going - A POST to this route with either true or false will add/remove the fact you are going to an event.
/1/event/<event_mbid>/users_interested - Returns the users and their MBIDs for those who are interested in going to an event
/1/event/<event_mbid>/users_going - Returns the list of user who are going to an event
`
Timeline
A rough timeline is below:
During May and the collaboration period:
Week -3
Ask for feedback on database schema and layout database work for events GSoC project
Week -2
Build prototypes and work with design team for base design language
Week -1
Look at MusicBrainz areas and brainstorm ideas on how to work. Begin work on looking at how to implement the events cache
The actual work (May 25 onward):
Week 1
Spend time planning specifics for the events cache + plan for area settings
Week 2
Implement prototypes for the events cache + area settings
Week 3
Finalize Prototypes + begin designing the event cache
Week 4
Implement the dedicated event cache + page + think about how to implement following artists
Week 5
Implement following artists and modify artists page to display events
Week 6
Begin design on event interaction + my events page.
Week 7
Work on prototypes for event_interaction + my events page. Begin thinking about how to implement the notification system + new events page.
Week 8
Finalize the event_interaction api and my events page, and work on prototypes for notification system + new events
Week 9
Get feedback for the notification system in the user feed + finalise events feed
Week 10
Spend a week going through all previous features and verifying they are sound; polish where necessary
Week 11
Work on social/discovery aspect of events with other users
Week 12
Ask for feedback on current progress and figure out if anything else needs to be done, finish up polishing and prepare final write up
Community affinities
I have known about MusicBrainz for ~2 years at this point. I used to use it as a way to rip music from YouTube and embed sane metadata from it. I also saw it as a place to add new music, so I did that as well, making it freely available in the commons. Mind you, this was before I learned about Picard, which would have been a life saver at the time!
I am a strong proponent of open access and open source, so it was amazing to see such a large, high quality dataset available like this for free.
Some of my favourite albums that I listen to currently:
Vadachennai
Bison Kaalamaadan
Doom 2016
Celeste
ListenBrainz was something I did not know I needed for a long time - I had always wanted some way to find statistics on the type of music I listened to. I have records in my hard drive going back to December of 2024 indicating I had wanted to do this, but I never got around to doing it. ListenBrainz now handles the music aggregation for me :), and displays pretty stats so that’s a win.
Have you ever used MusicBrainz Picard to tag your files or used any of our projects in the past?
I use Picard extensively to tag my music and normalize them with reference to the high quality data source that is MusicBrainz. It is quite an amazing piece of software, and very extensible for file renaming and so on.
Programming precedents
I got my start in making bots on Discord and from there I’ve learned many more things, including web dev, Rust, SQL, and more. I hope my skills can bring marked improvements to ListenBrainz for years to come.
Previous Contributions
I have been working on a few PRs to ListenBrainz here:
https://github.com/metabrainz/listenbrainz-server/pulls?q=is%3Apr+author%3AMrKomodoDragon+is%3Aall
I have mainly previously contributed to the discord.py project: Pull requests · Rapptz/discord.py · GitHub
I have also submitted to various other small projects of my friends, and they have been mostly small things to improve/have fun.
A full list can be found here: Pull request search results · GitHub
Solo Projects
I have spent most of my time programming working on solo projects on things that interest me. A small list is below:
- Sequoia, a WIP programming language for me to learn langdev: GitHub - MrKomodoDragon/sequoia: A simple, statically, fast language that is being developed constantly · GitHub
- wavparser, a small audio player to learn how to parse WAV files (and metadata): GitHub - MrKomodoDragon/wavparser: Me having fun with WAV files · GitHub
Practical requirements
I have a Framework 13 that I will be primarily using for development.
Specs:
- CPU: AMD Ryzen 5 7640U (12) @ 3.50 GHz
- GPU: AMD Radeon 760M Graphics [Integrated]
- Memory: 16 GB
I will be working for roughly 20-25 hours per week, and 2-3 hours per day will be for communication/coordination, and documenting what I have done, and the rest of the time will be spent programming.
I will 2-3 days in which I will be unable to work during the week of June 12th to June 19th, as I am attending a personal family event.
————————————
Please let me know about any comments/questions you have for this proposal. Thanks!



