{"repo":"mtmn/corpus","free":true,"listed":false,"github":"https://github.com/mtmn/corpus","clone":"git clone https://github.com/mtmn/corpus.git","description":"self-hosted listenbrainz and last.fm proxy","language":"PureScript","stars":29,"topics":["duckdb","elm","lastfm","listenbrainz","purescript"],"license":"MIT","category":"self-hosted-apps","readme_excerpt":"corpus A self-hosted ListenBrainz and Last.fm listening-history dashboard. Corpus stores scrobbles in DuckDB, enriches release metadata, caches cover art, and serves an Elm web interface. Documentation - Architecture — components, routing, data flows, configuration, and operations. - DuckDB — schema and analytical queries. Quick start With Nix: Or build locally with pnpm: Scrobbling API Corpus accepts ListenBrainz-compatible submissions at POST /1/submit-listens . Send Authorization: Token and a standard ListenBrainz payload. Clients may first validate a token with GET /1/validate-token using the same header. Tokens are shown once when a user is created, reset, or approved through self-registration. Store them securely. Configuration users.json defines each static user's slug, source usernames, DuckDB filename, and cover/backup settings. Shared secrets and integrations are supplied by environment variables. Variable Purpose --- --- CORPUS USERS FILE Static user configuration (default: users.json ) DATABASE PATH Directory containing user databases LASTFM API KEY , DISCOGS TOKEN Last.fm sync and metadata/cover fallbacks S3 BUCKET and AWS Cover cache and optional database backups COSINE API KEY Similar-track lookup PORT , HOST HTTP listener (defaults: 8000 , 127.0.0.1 ) METRICS ENABLED Enable Prometheus metrics at /metrics Set REGISTRATION ENABLED=true to allow public registration at /register ; ADMIN TOKEN enables approval at /admin . See the architecture guide for every settin","default_branch":null,"files":null,"tree":[],"storefront":"/r/mtmn","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/mtmn/corpus/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}