diff --git a/Makefile b/Makefile deleted file mode 100644 index fc94470..0000000 --- a/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -.PHONY: build build-web build-go dev test clean - -# Build the production single binary (embeds the Svelte SPA) -build: build-web build-go - -build-web: - @echo "==> Building Svelte frontend..." - cd web && npm run build - -build-go: - @echo "==> Building Go binary (production, embeds web/build)..." - go build -tags production -o wotra ./cmd/wotra - -# Development mode: run Go server + Vite dev server concurrently -dev: - @echo "==> Starting development servers..." - @echo " Go API: http://localhost:8080" - @echo " Vite UI: http://localhost:5173" - @trap 'kill 0' INT; \ - AUTH_TOKEN=$${AUTH_TOKEN:-devtoken} go run ./cmd/wotra & \ - cd web && npm run dev - -# Run all Go tests -test: - go test ./... - -# Install frontend dependencies -web/node_modules: - cd web && npm install - -# Remove build artifacts -clean: - rm -f wotra - rm -rf web/build web/.svelte-kit diff --git a/README.md b/README.md index a31a254..7cd9e27 100644 --- a/README.md +++ b/README.md @@ -15,30 +15,47 @@ A self-hosted working time tracker with a Go backend and a Svelte PWA frontend. ## Quick Start +Tool versions are declared in `mise.toml`. Install [mise](https://mise.jdx.dev) and run `mise install` once to get the correct Go and Node versions. + ### Development ```bash -# 1. Set your auth token -export AUTH_TOKEN=mysecrettoken +# Install frontend dependencies (first time only) +mise run install -# 2. Start both servers -make dev +# Start both servers (Go API + Vite dev server) +mise run dev # Go API: http://localhost:8080 # Vite UI: http://localhost:5173 (with /api proxy) ``` +`AUTH_TOKEN` defaults to `devtoken` in `mise.toml`. Override it by setting the variable in your environment before running. + Open `http://localhost:5173`, go to **Settings**, enter your token. ### Production (single binary) ```bash -make build # builds web/ then embeds it in the Go binary +mise run build # builds web/ then embeds it in the Go binary -# Run AUTH_TOKEN=mysecrettoken ./wotra # open http://localhost:8080 ``` +### All tasks + +| Task | Description | +|---------------|--------------------------------------------------| +| `mise run build` | Build production binary (web + Go) | +| `mise run build:web` | Build Svelte frontend only | +| `mise run build:go` | Build Go binary only | +| `mise run dev` | Start API + UI dev servers concurrently | +| `mise run dev:api` | Start Go API server only | +| `mise run dev:ui` | Start Vite dev server only | +| `mise run test` | Run all Go tests | +| `mise run install` | Install frontend npm dependencies | +| `mise run clean` | Remove build artifacts | + ## Configuration (environment variables) | Variable | Default | Description | diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..3d338bc --- /dev/null +++ b/mise.toml @@ -0,0 +1,57 @@ +[tools] +go = "1.26.2" +node = "24.14.0" +npm = "latest" + +[env] +AUTH_TOKEN = "devtoken" +PORT = "8080" +DB_PATH = "wotra.db" +TZ = "UTC" + +[tasks.build] +description = "Build production single binary (web + Go)" +depends = ["build:web", "build:go"] + +[tasks."build:web"] +description = "Build Svelte frontend" +dir = "web" +run = "npm run build" + +[tasks."build:go"] +description = "Build Go binary with embedded web assets" +run = "go build -tags production -o wotra ./cmd/wotra" + +[tasks.dev] +description = "Start Go API and Vite dev server concurrently" +run = """ +echo "Go API: http://localhost:${PORT}" +echo "Vite UI: http://localhost:5173" +mise run dev:api & mise run dev:ui +wait +""" + +[tasks."dev:api"] +description = "Start Go API server" +run = "go run ./cmd/wotra" + +[tasks."dev:ui"] +description = "Start Vite dev server" +dir = "web" +run = "npm run dev" + +[tasks.test] +description = "Run all Go tests" +run = "go test ./..." + +[tasks.install] +description = "Install frontend npm dependencies" +dir = "web" +run = "npm install" + +[tasks.clean] +description = "Remove build artifacts" +run = """ +rm -f wotra +rm -rf web/build web/.svelte-kit +"""