commit - 0dc501bbaf7f4e7f9eb79a3960e120417a3a41bd
commit + 2c3db42a0ce9dd86b70286ddf644e0c5efbc2190
blob - 0e7dbb923ef4e17909bf578655bb98772fece714
blob + f516559c4a5b2d46a3f1154a97c6405216299020
--- CHANGELOG.md
+++ CHANGELOG.md
# Changelog
+## [3.1.1] - 2026-08-02
+
+[compare](https://git.sr.ht/~mtmn/corpus/log/v3.1.0..v3.1.1)
+
+### Bug Fixes
+
+- Update arch diagram, deps and format ([`63ef4f6`](https://git.sr.ht/~mtmn/corpus/commit/63ef4f6f40c424687fa97f144c97d2f16cb88177))
+- Harden user lifecycle, remove dead S3 tests ([`7893c97`](https://git.sr.ht/~mtmn/corpus/commit/7893c97ef1f7ca031f7d0a23f7cddeaec3f23452))
+- Center page navigation, flake hashes ([`2fd6d79`](https://git.sr.ht/~mtmn/corpus/commit/2fd6d79901f66fd87e01490969f057e8ab56c7c8))
+
+### Housekeeping
+
+- Update spago deps ([`95b4202`](https://git.sr.ht/~mtmn/corpus/commit/95b4202f3aa9884483f4ec27297ff38b583103f5))
+- Install git-cliff in devshell ([`0dc501b`](https://git.sr.ht/~mtmn/corpus/commit/0dc501bbaf7f4e7f9eb79a3960e120417a3a41bd))
+
## [3.1.0] - 2026-08-02
[compare](https://git.sr.ht/~mtmn/corpus/log/v3.0.0..v3.1.0)
- Redo ui and add background ([`20f66d3`](https://git.sr.ht/~mtmn/corpus/commit/20f66d3e663eca1889354da880458264430f4296))
+### Housekeeping
+
+- Release v3.1.0 ([`9f9520a`](https://git.sr.ht/~mtmn/corpus/commit/9f9520a342c61bdd9e1a1c83f2450df405a0c5dc))
+
## [3.0.0] - 2026-07-14
[compare](https://git.sr.ht/~mtmn/corpus/log/v2.23.1..v3.0.0)
blob - 35c7ed96ba1b802f5f33d8556a38708d92c0479a
blob + 6ca3688595bab0dd6418f5e1ff0e338e6ce15594
--- package.json
+++ package.json
{
- "name": "corpus",
- "version": "3.1.0",
- "description": "ListenBrainz and Last.fm frontend",
- "main": "index.js",
- "type": "module",
- "scripts": {
- "build": "spago build && esbuild output/Main/index.js --bundle --platform=node --format=esm --footer:js='main();' --outfile=server.js --external:http --external:https --external:dotenv --external:url --external:@duckdb/node-api --external:@aws-sdk/client-s3 --external:@aws-sdk/s3-request-presigner --external:prom-client --external:sharp --external:uuid --external:nodemailer && elm make src/Client.elm --output=client.js",
- "release": "spago build && purs-backend-es build && esbuild output-es/Main/index.js --bundle --platform=node --format=esm --footer:js='main();' --outfile=server.js --external:http --external:https --external:dotenv --external:url --external:@duckdb/node-api --external:@aws-sdk/client-s3 --external:@aws-sdk/s3-request-presigner --external:prom-client --external:sharp --external:uuid --external:nodemailer && elm make src/Client.elm --optimize --output=client.js && uglifyjs client.js --compress \"pure_funcs=[F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9],pure_getters,keep_fargs=false,unsafe_comps,unsafe\" | uglifyjs --mangle --output client.js",
- "test": "spago test",
- "tidy": "purs-tidy format-in-place src/**/*.purs"
- },
- "devDependencies": {
- "esbuild": "^0.28.1",
- "purescript-language-server": "^0.18.5",
- "purescript-psa": "^0.9.0",
- "purs-backend-es": "^1.4.3",
- "purs-tidy": "^0.11.1",
- "spago": "^1.0.4",
- "uglify-js": "^3.19.3",
- "whine": "^0.0.34"
- },
- "dependencies": {
- "@aws-sdk/client-s3": "^3.1101.0",
- "@aws-sdk/s3-request-presigner": "^3.1101.0",
- "@duckdb/node-api": "1.5.4-r.1",
- "dotenv": "^17.4.2",
- "nodemailer": "^6.10.1",
- "prom-client": "^15.1.3",
- "purescript": "^0.15.16",
- "sharp": "^0.35.3",
- "uuid": "^14.0.1"
- }
+ "name": "corpus",
+ "version": "3.1.1",
+ "description": "ListenBrainz and Last.fm frontend",
+ "main": "index.js",
+ "type": "module",
+ "scripts": {
+ "build": "spago build && esbuild output/Main/index.js --bundle --platform=node --format=esm --footer:js='main();' --outfile=server.js --external:http --external:https --external:dotenv --external:url --external:@duckdb/node-api --external:@aws-sdk/client-s3 --external:@aws-sdk/s3-request-presigner --external:prom-client --external:sharp --external:uuid --external:nodemailer && elm make src/Client.elm --output=client.js",
+ "release": "spago build && purs-backend-es build && esbuild output-es/Main/index.js --bundle --platform=node --format=esm --footer:js='main();' --outfile=server.js --external:http --external:https --external:dotenv --external:url --external:@duckdb/node-api --external:@aws-sdk/client-s3 --external:@aws-sdk/s3-request-presigner --external:prom-client --external:sharp --external:uuid --external:nodemailer && elm make src/Client.elm --optimize --output=client.js && uglifyjs client.js --compress \"pure_funcs=[F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9],pure_getters,keep_fargs=false,unsafe_comps,unsafe\" | uglifyjs --mangle --output client.js",
+ "test": "spago test",
+ "tidy": "purs-tidy format-in-place src/**/*.purs"
+ },
+ "devDependencies": {
+ "esbuild": "^0.28.1",
+ "purescript-language-server": "^0.18.5",
+ "purescript-psa": "^0.9.0",
+ "purs-backend-es": "^1.4.3",
+ "purs-tidy": "^0.11.1",
+ "spago": "^1.0.4",
+ "uglify-js": "^3.19.3",
+ "whine": "^0.0.34"
+ },
+ "dependencies": {
+ "@aws-sdk/client-s3": "^3.1101.0",
+ "@aws-sdk/s3-request-presigner": "^3.1101.0",
+ "@duckdb/node-api": "1.5.4-r.1",
+ "dotenv": "^17.4.2",
+ "nodemailer": "^6.10.1",
+ "prom-client": "^15.1.3",
+ "purescript": "^0.15.16",
+ "sharp": "^0.35.3",
+ "uuid": "^14.0.1"
+ }
}