Tech Stack
Description
A cross-platform desktop music player built with JavaFX and Spring Boot, on top of music-commons and lirp. Manage your local music library, organize hierarchical playlists, play tracks with waveform visualization, browse by artists, albums and genres, and import from iTunes.
I started this project in my university years as a small pet project to solve a problem with audio metadata tagging, in the times when I started to DJ. Back then I used iTunes to organize my music library and when I started to use DJ software and import my files there, it turned out that iTunes was not writing the track information I spent so much time curating into the file metadata tags, therefore having a frustrated experience since I spent so much time tagging my entire music library in order to find the tracks I wanted to play in my sets with ease.
Therefore I started a cli tool that parsed the itunes library xml file and wrote the info into the track metadata using jaudiotagger. Easy-peasy. However, why stop there? I was studying to become a software engineer so, why not build my own music library app?
That became Musicott, the project I spent countless hours learning to code alongside my studies with the ambition to have some features that I did not find in other similar apps while helping me become a better Software Engineer. Over the years I refactored its architecture into three projects — Musicott, music-commons and lirp — and it now ships as native installers for Linux, Windows and macOS.
- Built a desktop music manager with Java 25, Kotlin and JavaFX, booting Spring Boot in non-web mode with javafx-weaver wiring FXML controllers as Spring beans and components communicating through ApplicationEvent publishing.
- Local-first storage: a SQLite database for the audio library plus JSON files for playlists and the waveform cache.
- Guided four-step iTunes import wizard, cover-grid browsing by artists, albums and genres, and cached waveform visualization with click/drag-to-seek.
- Tested across four Gradle source sets (unit, integration, UI, end-to-end) running headless via TestFX/Monocle, and packaged as native installers for Linux, Windows and macOS.
