diff --git a/README.md b/README.md index 4e54a6b9..ab5c8790 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,30 @@ -# MusicLibrary +# Music Library + +Music Library is an application to manage a collection of music records in different physical formats. + +## Features + +- Import records from MusicBrainz, with optional override of specific pieces of data +- Manage a collection and a wishlist of records, with ways to quickly search and filter based on records' metadata +- Integration with Last.fm (display latest scrobbles, and where possible connect them with records in the collection or wishlist) +- Some basic stats +- All data stored in a single SQLite database for portability and ease of backup/restore +- Ideal for deployment on a server with limited resources (1CPU, 512MB RAM) + +## Setup To start your Phoenix server: - Run `mix setup` to install and setup dependencies +- Setup necessary environment variables: + - `LAST_FM_USER`: the Last.fm username used to populate the Scrobble Activity + - `LAST_FM_API_KEY`: the Last.fm API key used to fetch the Scrobble Activity + If using `direnv`, one can create a `.envrc.local` file for configuration variables, and a `.secrets` file for secrets. Both are automatically sourced via the `.envrc` file in the repo. - Start Phoenix endpoint with `mix phx.server` or inside IEx with `iex -S mix phx.server` -Now you can visit [`localhost:4000`](http://localhost:4000) from your browser. +Now you can visit [`localhost:4000`](http://localhost:4000) from your browser. The default password for development is `change me`. -Ready to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html). - -## Learn more - -- Official website: -- Guides: -- Docs: -- Forum: -- Source: - -## Dev Notes - -### Search - -- SQLite supports full-text search via the built-in FTS5 extension, which is enabled by default and loaded in the Elixir Driver. - The extension requires building a virtual table that holds the data to be searched. This seems to be akin to a materialized view. -- To have fuzzy search, another extension needs to be loaded. - [Exqlite](https://github.com/elixir-sqlite/exqlite?tab=readme-ov-file) recommends using [ExSqlean](https://github.com/mindreframer/ex_sqlean), - which in turn uses [Sqlean](https://github.com/mindreframer/sqlean), but the extension is NOT part of the ExSQlean set. - Need to investigate with forking and PR. - -### Queries - -- To get the count of records per genre: - - ``` - select genre.value, count(genre.value) as c from records, json_each(records.genres) genre group by genre.value order by c desc; - ``` - -- To get the count of records per artist: - - ``` - select json_extract(artist.value, '$.name') AS name, count(1) as c from records, json_each(records.artists) artist group by name order by c desc; - ``` - - Note that this query would fail to disambiguate artists with the same name - can be fixed by using the artist `musicbrainz_id`. +The application is setup for deployment on Fly.io. ### CI