style: format dev docs and hook config

This commit is contained in:
2026-06-21 01:48:48 +02:00
committed by Milas Holsting
parent 8219e83135
commit 7ab263ae2d
3 changed files with 37 additions and 34 deletions

View File

@@ -6,32 +6,12 @@ cmd = "just build-dev"
entrypoint = "./tmp/server"
full_bin = "./tmp/server"
delay = 300
exclude_dir = [
".git",
".mise",
"dist",
"node_modules",
"tmp",
]
exclude_file = [
"mal.db",
"mal.db-shm",
"mal.db-wal",
]
exclude_regex = [
"_test\\.go",
]
exclude_dir = [".git", ".mise", "dist", "node_modules", "tmp"]
exclude_file = ["mal.db", "mal.db-shm", "mal.db-wal"]
exclude_regex = ["_test\\.go"]
exclude_unchanged = true
follow_symlink = false
include_ext = [
"css",
"go",
"gohtml",
"html",
"sql",
"toml",
"ts",
]
include_ext = ["css", "go", "gohtml", "html", "sql", "toml", "ts"]
kill_delay = "500ms"
log = "air-build.log"
send_interrupt = true

View File

@@ -12,13 +12,20 @@
<img alt="License" src="https://img.shields.io/badge/license-MIT-green?style=flat-square" />
</p>
MyAnimeList is a small self-hosted anime tracker and playback app. It keeps the catalog, watchlist, progress tracking, and player in one place, backed by a single SQLite database and a single Go server.
MyAnimeList is a small self-hosted anime tracker and playback app. It keeps the catalog, watchlist,
progress tracking, and player in one place, backed by a single SQLite database and a single Go
server.
Most of the UI is rendered on the server. HTMX handles lightweight updates like pagination and watchlist changes, while TypeScript is kept for the parts that need real browser state: the video player, search page, theme handling, and skip segment editor. The app also includes local users, API tokens, subtitle support, playlist rewriting, provider integrations, migrations, and startup data fixes.
Most of the UI is rendered on the server. HTMX handles lightweight updates like pagination and
watchlist changes, while TypeScript is kept for the parts that need real browser state: the video
player, search page, theme handling, and skip segment editor. The app also includes local users, API
tokens, subtitle support, playlist rewriting, provider integrations, migrations, and startup data
fixes.
## Running
Requires [`mise`](https://mise.jdx.dev/), a C compiler for SQLite, and the tools managed in `.mise.toml`.
Requires [`mise`](https://mise.jdx.dev/), a C compiler for SQLite, and the tools managed in
`.mise.toml`.
```bash
mise install
@@ -28,11 +35,17 @@ go run ./cmd/user <username> <password>
just dev
```
The app starts on `http://localhost:3000` by default. Configuration comes from environment variables, and a local `.env` file is loaded automatically. The most useful options are `PORT`, `DATABASE_FILE`, `PLAYBACK_PROXY_SECRET`, `EPISODE_AVAILABILITY_MODE`, and `ANIMESCHEDULE_API_TOKEN`.
The app starts on `http://localhost:3000` by default. Configuration comes from environment
variables, and a local `.env` file is loaded automatically. The most useful options are `PORT`,
`DATABASE_FILE`, `PLAYBACK_PROXY_SECRET`, `EPISODE_AVAILABILITY_MODE`, and
`ANIMESCHEDULE_API_TOKEN`.
## Development
The codebase is split between Go feature packages, external integrations, server-rendered templates, and a small frontend asset pipeline. `cmd/server` starts the web app, `cmd/user` contains local admin tools, `internal` holds the application modules, `integrations` holds provider clients, and `templates`, `static`, and `dist` contain the UI.
The codebase is split between Go feature packages, external integrations, server-rendered templates,
and a small frontend asset pipeline. `cmd/server` starts the web app, `cmd/user` contains local
admin tools, `internal` holds the application modules, `integrations` holds provider clients, and
`templates`, `static`, and `dist` contain the UI.
The common development commands are in the `justfile`.

View File

@@ -14,29 +14,39 @@
"lint:ts":
{
"glob": "*.{ts,js,tsx,jsx}",
"run": "bunx oxlint --ignore-path .oxlintignore {staged_files} --max-warnings 0 --tsconfig ./tsconfig.json --type-aware",
"run":
"bunx oxlint --ignore-path .oxlintignore {staged_files} --max-warnings 0 --tsconfig
./tsconfig.json --type-aware",
},
"go-fmt":
{
"glob": "*.go",
"run": 'files=$(gofmt -l {staged_files}); test -z "$files" || (printf "go files need formatting:\n%s\n" "$files"; exit 1)',
"run":
'files=$(gofmt -l {staged_files}); test -z "$files" || (printf "go files need
formatting:\n%s\n" "$files"; exit 1)',
},
"go-lint":
{
"glob": "*.go",
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} golangci-lint run --new-from-rev=HEAD ./{}',
"run":
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{}
golangci-lint run --new-from-rev=HEAD ./{}',
},
"go-test":
{
"glob": "*.go",
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go test -count=1 ./{}',
"run":
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go test
-count=1 ./{}',
},
"ts-typecheck": { "glob": "*.ts", "run": "bunx tsc -p tsconfig.json --noEmit" },
"build-assets": { "glob": "*.{ts,css}", "run": "bun run build:assets" },
"go-build":
{
"glob": "*.go",
"run": 'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go build -o /dev/null ./{}',
"run":
'printf "%s\n" {staged_files} | xargs -n1 dirname | sort -u | xargs -I{} go build -o
/dev/null ./{}',
},
},
},