all projects
personal projectactive

Resonance

A local-first music rating and library application. A personal place to rate records, browse a collection, and keep track of listening history.

  • C
  • GTK4
  • SQLite

A library with a personal perspective

Resonance is a place to browse music, record ratings, and keep notes alongside a personal library. The focus is on a collection and the listening history around it, rather than a public profile or a feed.

It brings my interest in music into a software project: a way to give personal judgments and observations a lasting home. Local-first storage keeps that library on the same machine as the application.

From commands to a desktop interface

The project began with a CLI. That foundation gave the rating model, repository layer, and persistent data a working interface before there was a desktop UI.

Search, history, and Spotify authentication and import extended the library beyond its initial input flow. The GTK4 interface came later, adding a desktop way to browse and rate music on top of the underlying application architecture.

This progression matters to me: the interface has changed, but the work on the model and storage still belongs to the application.

Built close to the data

C · application logic

C is the primary implementation language. Building a richer application in it means thinking explicitly about the boundaries between domain rules, storage, and the code that presents them.

SQLite · persistence

SQLite gives the local library a persistent database. The database and repository layer support the music data, ratings, notes, and history that the interfaces work with.

GTK4 · desktop UI

GTK4 brings the project into a desktop interface. The CLI remains part of its development history; the UI is another layer around the library rather than the starting point for the data model.

More than a single score

Ratings in context

Browsing and rating sit alongside rating history and notes. A score can be revisited, while history gives it context beyond its current value. Search and rankings offer other ways into the collection.

Library state

Archive and state concepts let the library represent more than a flat list of music. Notes carry the personal context that a rating alone cannot express.

Spotify import

Spotify work includes PKCE authentication and import. This connects an external music source to the local library, bringing authentication and imported data into a project that began with a command-line interface.

The rules behind the interface

Some of the most interesting decisions are small data rules with consequences across the application.

An unrated entry is not a low rating. Averages exclude UNRATED entries, so absence of a judgment does not pull a result down. Keeping that distinction consistent matters wherever ratings are displayed or ranked.

Collaborators can be represented as REFERENCE_ONLY. That lets the model retain a collaborator reference without treating every referenced person as a full library entry.

The move from CLI to GTK makes these boundaries more visible. Rating, history, and storage rules need to stay consistent as the ways of interacting with them grow. Separating those concerns is more useful than rebuilding the application around each interface.

Still in progress

Resonance remains active, with room for continued polish. Its development has also included settings and data import/export work.

The source is not publicly available yet. For now, this page is a look at the project and the decisions behind it.