http.DetectContentType() cannot detect JS, CSS, SVG, etc. from magic
bytes — it falls back to text/plain, causing browsers to reject module
scripts with 'Expected a JavaScript module' error.
Use mime.TypeByExtension(ext) which correctly maps .js ->
application/javascript, .css -> text/css, etc.
The llamalink service fails to start because ProtectSystem=strict only
allows writes to ReadWritePaths=/opt/llamalink/data, but the default
DATABASE_URL=sqlite:///./llamalink.db resolves relative to WorkingDirectory.
With WorkingDirectory=/opt/llamalink, the db lands at /opt/llamalink/llamalink.db
which is not in ReadWritePaths, causing sqlite open to fail.
Setting WorkingDirectory=/opt/llamalink/data aligns with the package layout
(postinst creates /opt/llamalink/data) and makes the default ./llamalink.db
resolve to the correct writable location.
Debian versions must start with a digit. When called via 'make deb',
VERSION is passed from Makefile (git describe output includes 'v' prefix).
The strip was previously only done inside the auto-detection branch,
so 'make deb' produced invalid versions like 'v2026.07.30-2-g05604a8-1'.
Now VERSION= runs after the version is determined, regardless
of whether it came from an argument or auto-detection.
- .github/workflows/ci.yml: go-version '1.23' -> '1.25' to match go.mod
- All go build/vet/test/lint: use ./cmd/... ./internal/... instead of ./...
to avoid picking up Go packages in node_modules/ (flatted)
- Makefile: same fix for test target
- Makefile: add 'deb' and 'release' targets; fix migrate/create syntax
- scripts/build-deb.sh: build .deb with systemd unit, postinst/prerm/postrm
- .github/workflows/ci.yml: go build, test, lint on PR/push to main
- .github/workflows/release.yml: multi-platform build (linux/darwin/windows
× amd64/arm64), .deb for Linux, tarballs, draft GitHub Release on tag v*
- README.md: add CI/Release badges, Install section with .deb and binary
release instructions