.PHONY: help db dev css seed migrate test test-image plan-check lint shell superuser collectstatic sync-whynot-design .DEFAULT_GOAL := help help: ## List available make targets @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' db: ## Start PostgreSQL via Docker (skips if already reachable on :5432) @if nc -z localhost 5432 2>/dev/null; then \ echo "✓ DB bereits erreichbar auf :5432 — kein Docker-Start nötig"; \ else \ docker compose -f docker-compose.dev.yml up -d; \ fi dev: ## Start Django dev server on :9000 uv run manage.py runserver 0.0.0.0:9000 css: ## Start Tailwind CSS watcher (Vite, rebuild on change) npm run dev seed: ## Load dev seed data — users, one Ausschreibung, Lose, etc. (idempotent) uv run manage.py seed_dev superuser: ## Create a Django superuser for /admin/ access uv run manage.py createsuperuser migrate: ## Generate and apply all pending migrations uv run manage.py makemigrations uv run manage.py migrate test: ## Run the full pytest test suite uv run pytest test-image: ## Verify locked Python dependencies, built CSS, application tests and migrations docker build --target application-tests . REUSE_SURFACE_BIN ?= reuse-surface REUSE_SURFACE_URL ?= https://reuse.coulomb.social plan-check: ## Check a proposed WORKPLAN against current hosted capabilities (no model call) @test -n "$(WORKPLAN)" || { echo 'Set WORKPLAN=workplans/.md'; exit 2; } $(REUSE_SURFACE_BIN) plan-check "$(WORKPLAN)" --hub-url "$(REUSE_SURFACE_URL)" --no-llm --format json --consumer-repo vergabe-teilnahme lint: ## Run ruff (style) and mypy (types) uv run ruff check . uv run mypy vergabe_teilnahme/ shell: ## Open a Django shell (shell_plus if available) uv run manage.py shell_plus 2>/dev/null || uv run manage.py shell collectstatic: ## Collect static files into staticfiles/ (production step) uv run manage.py collectstatic --noinput sync-whynot-design: ## Re-vendor whynot-design CSS+tokens from the pinned ref ./scripts/sync-whynot-design.sh