Import Melee matches exports, add tests and local podman stack
- Parse Melee matches exports (one round per file, byes, null GameWins); one import form detects matches vs standings exports. Re-importing a round replaces just that round and keeps entered decks. - Per-player deck entry for sessions scored from matches. - node:test suite with anonymised fixtures; lockfile. - scripts/local.sh runs the compose stack under podman with its own .env.local, project name and volume. - README and CLAUDE.md docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a7f440c658
commit
985c85bcef
15 files changed
+2450
-27
No files matched your search
@@ -0,0 +1,31 @@
|
||||
# MTG league tracker
|
||||
|
||||
Leaderboard and results dashboard for a Magic league run on melee.gg. See `CLAUDE.md` for design notes.
|
||||
|
||||
## Run
|
||||
```
|
||||
cp .env.example .env # fill in DB_PASSWORD, SECRET_KEY (openssl rand -hex 32), ADMIN_PASSWORD (10+ chars)
|
||||
docker compose up -d --build
|
||||
```
|
||||
Listens on `${BIND_ADDR:-127.0.0.1}:${HOST_PORT:-8888}`. Put a reverse proxy in front and set `COOKIE_SECURE=true` once on https.
|
||||
Sub-path hosting: set `BASE_PATH=/mtg` and proxy with Caddy `handle_path /mtg/*`.
|
||||
|
||||
## Develop
|
||||
```
|
||||
npm install
|
||||
npm test # parser + standings tests
|
||||
npm run check # type-check
|
||||
DATABASE_URL=postgres://... SECRET_KEY=... ADMIN_PASSWORD=... npm run dev
|
||||
```
|
||||
Whole stack locally with podman (own `.env.local` with generated secrets, own project/volume, port 8889):
|
||||
```
|
||||
scripts/local.sh up # build + start, prints URL and admin password
|
||||
scripts/local.sh logs | ps | down
|
||||
scripts/local.sh reset # down and delete the local database
|
||||
```
|
||||
Needs `podman compose` (podman 4.7+ with docker-compose or podman-compose) and the user socket:
|
||||
`systemctl --user enable --now podman.socket`.
|
||||
|
||||
## Using it
|
||||
Admin login, create a league (set how many top sessions count), add a session per night, then upload the Melee
|
||||
matches export (one per round) or standings export on the session page, and set each player's deck.
|
||||
Reference in new issue
Block a user