This is a web app showing chords that I've collected / worked out over the years. You can find the live app at https://chords.fly.dev/.
The app consists of several pieces.
- The centrepiece is an API server, which provides an API to get, add, update and delete chords.
- A frontend giving a nice interface to find and view the chords. This also includes the ability to transpose chords (reusing code from my chord-transposer project).
- A persistent file system which the API server uses to store the chords and their metadata.
All of the above are hosted on Fly.io. The API server and
frontend server are both written in Go using the standard
net/http
library.
I've also written a command-line interface in Go, which I privately use to add and update chords.
docs
: Markdown specs and explanatory notes. Read these if you'd like to learn more about the inner workings of the app.src
: source codeclient
: API client, used by the CLI and frontendcmd
: CLI - I use this to update the chords databasedblayer
: core data structures and database wrappers, used by the client and serverserver
: the API and frontend server
tests
: Go integration tests for the API server.main.go
: main entry point, runs the API/frontend server.
I'm an amateur musician, and enjoy covering pop/rock songs. I've often found errors in chord sheets available online (including popular websites like Ultimate Guitar). This led me to start working out chords myself, and over the years, I've amassed quite a collection.
Historically, I've stored these using a notes app like Google Keep. There are plenty of issues with this approach:
- Google Keep's only organisational structure is using "labels" - I can't sort/filter my chords by artist/album/etc.
- I often add ASCII guitar tabs to my chord sheets, to notate riffs. These really have to be rendered in a monospace font to ensure a nice layout and consistency. Of course, Google Keep doesn't use a monospace font.
- It's difficult to share my chords with others - I have to manually add them as a "collaborator" to each note.
Eventually, these concerns led me to decide that I'd be better off building my own website for my chords.
This project is open-source, and licensed under the terms of the GNU Affero General Public License.