[tools] python = "3.14" node = "24" ruff = "0.16.10" biome = "2.5.15" [tasks.setup] description = "Create the venv and install backend and frontend dependencies" run = [ "python -m venv .venv", ".venv/bin/pip install -q --disable-pip-version-check -r backend/requirements.txt", "npm install --no-fund --no-audit", ] [tasks.db] description = "Start local Postgres and wait until it accepts connections" run = [ "docker compose up -d db", "until docker compose exec -T db pg_isready -q -U postgres; do sleep 1; done", ] [tasks."dev:api"] description = "Flask API on :5000" depends = ["setup", "db"] run = ".venv/bin/python backend/app.py" [tasks."dev:web"] description = "Vite UI; /api is proxied to Flask" depends = ["setup"] run = "npm run dev" [tasks.dev] description = "Start the app for local testing (API + UI)" depends = ["dev:api", "dev:web"] [tasks."format:py"] description = "Sort imports and format the backend" run = ["ruff check --select I --fix backend", "ruff format backend"] [tasks."format:ts"] description = "Sort imports and format the frontend" run = "biome check --write --linter-enabled=false src vite.config.ts" [tasks.format] description = "Format and auto-fix Python and TypeScript" depends = ["format:py", "format:ts"] [tasks."lint:py"] description = "Lint the backend and verify formatting (no writes)" run = ["ruff check backend", "ruff format --check backend"] [tasks."lint:ts"] description = "Lint the frontend and verify formatting (no writes)" run = "biome check src vite.config.ts" [tasks.lint] description = "Lint and format-check Python and TypeScript (CI-safe, no writes)" depends = ["lint:py", "lint:ts"]