# Kandev Root Makefile # Orchestrates both backend (Go) and web app (Next.js) # Directories BACKEND_DIR := apps/backend WEB_DIR := apps/web LANDING_DIR := apps/landing APPS_DIR := apps # Tools PNPM := pnpm MAKE := make # Default target .DEFAULT_GOAL := help # # Help # .PHONY: help help: @echo "Kandev - AI Agent Kanban Board" @echo "" @echo "Development Commands:" @echo " dev Run backend + web via CLI (auto ports)" @echo " dev-backend Run backend in development mode (port 8080)" @echo " dev-web Run web app in development mode (port 3000)" @echo " dev-landing Run landing page in development mode (port 3001)" @echo " dev Note: Uses apps/cli launcher (auto ports)" @echo "" @echo "Build Commands:" @echo " build Build backend, web app, and landing page" @echo " build-backend Build backend binary" @echo " build-web Build web app for production" @echo " build-landing Build landing page for production" @echo "" @echo "Installation:" @echo " install Install all dependencies (backend + web + landing)" @echo " install-backend Install backend dependencies" @echo " install-web Install web dependencies (uses pnpm workspace)" @echo "" @echo "Testing:" @echo " test Run all tests (backend + web)" @echo " test-backend Run backend tests" @echo " test-web Run web app tests" @echo "" @echo "Code Quality:" @echo " lint Run linters for both components" @echo " lint-backend Run Go linters" @echo " lint-web Run ESLint" @echo " fmt Format all code" @echo " fmt-backend Format Go code" @echo " fmt-web Format web code with ESLint" @echo "" @echo "Cleanup:" @echo " clean Remove all build artifacts" @echo " clean-backend Remove backend build artifacts" @echo " clean-web Remove web build artifacts" @echo " clean-db Remove local SQLite database" # # Development # .PHONY: dev dev: @echo "Launching via CLI (auto ports)..." @cd $(APPS_DIR) && $(PNPM) -C cli dev -- dev .PHONY: dev-backend dev-backend: @echo "Starting backend on http://localhost:8080" @trap 'stty sane 2>/dev/null || true' EXIT INT TERM; \ $(MAKE) -C $(BACKEND_DIR) run; \ stty sane 2>/dev/null || true .PHONY: dev-web dev-web: @echo "Starting web app on http://localhost:3000" @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web dev .PHONY: dev-landing dev-landing: @echo "Starting landing page on http://localhost:3001" @cd $(APPS_DIR) && $(PNPM) --filter @kandev/landing dev # # Build # .PHONY: build build: build-backend build-web build-landing @echo "" @echo "✓ Build complete!" @echo " Backend binary: $(BACKEND_DIR)/bin/kandev" @echo " Web app: $(WEB_DIR)/.next" @echo " Landing page: $(LANDING_DIR)/.next" .PHONY: build-backend build-backend: @echo "Building backend..." @$(MAKE) -C $(BACKEND_DIR) build .PHONY: build-web build-web: @echo "Building web app..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web build .PHONY: build-landing build-landing: @echo "Building landing page..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/landing build # # Installation # .PHONY: install install: install-backend install-web @echo "" @echo "✓ All dependencies installed!" .PHONY: install-backend install-backend: @echo "Installing backend dependencies..." @$(MAKE) -C $(BACKEND_DIR) deps .PHONY: install-web install-web: @echo "Installing web and landing dependencies..." @cd $(APPS_DIR) && $(PNPM) install # # Testing # .PHONY: test test: test-backend test-web @echo "" @echo "✓ All tests complete!" .PHONY: test-backend test-backend: @echo "Running backend tests..." @$(MAKE) -C $(BACKEND_DIR) test .PHONY: test-web test-web: @echo "Running web app tests..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web test # # Code Quality # .PHONY: lint lint: lint-backend lint-web @echo "" @echo "✓ Linting complete!" .PHONY: lint-backend lint-backend: @echo "Linting backend..." @$(MAKE) -C $(BACKEND_DIR) lint .PHONY: lint-web lint-web: @echo "Linting web app..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web lint .PHONY: fmt fmt: fmt-backend fmt-web @echo "" @echo "✓ Code formatting complete!" .PHONY: fmt-backend fmt-backend: @echo "Formatting backend code..." @$(MAKE) -C $(BACKEND_DIR) fmt .PHONY: fmt-web fmt-web: @echo "Formatting web code..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web lint -- --fix || true .PHONY: typecheck-web typecheck-web: @echo "Type-checking web app..." @cd $(APPS_DIR) && $(PNPM) --filter @kandev/web exec tsc -p tsconfig.json --noEmit .PHONY: typecheck typecheck: @echo "Type-checking all apps..." @cd $(APPS_DIR) && $(PNPM) -r exec tsc -p tsconfig.json --noEmit # # Cleanup # .PHONY: clean clean: clean-backend clean-web @echo "" @echo "✓ Cleanup complete!" .PHONY: clean-backend clean-backend: @echo "Cleaning backend artifacts..." @$(MAKE) -C $(BACKEND_DIR) clean .PHONY: clean-web clean-web: @echo "Cleaning web and landing artifacts..." @rm -rf $(WEB_DIR)/.next $(LANDING_DIR)/.next $(APPS_DIR)/node_modules @rm -rf $(APPS_DIR)/packages/*/node_modules .PHONY: clean-db clean-db: @echo "Removing local SQLite database..." @rm -f kandev.db kandev.db-wal kandev.db-shm \ $(BACKEND_DIR)/kandev.db $(BACKEND_DIR)/kandev.db-wal $(BACKEND_DIR)/kandev.db-shm