# ============================================================================== # DEVELOPMENT (local run with optional hot reload) # ============================================================================== # dev: Backend API (Docker from infra-up) + Web only. Chat/Stream Rust servers # are skipped until veza-common is fixed. Use dev-full to start everything. # ============================================================================== .PHONY: dev dev-full dev-backend dev-web dev-backend-api dev-chat-server dev-stream-server .PHONY: stop-local-services start-local-service stop-local-service dev: check-ports infra-up ## [HIGH] Start Backend (Docker) + Web only (no Chat/Stream) @$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING DEV (Backend + Web)${NC}" @$(ECHO_CMD) " Backend: http://$(APP_DOMAIN):$(PORT_backend-api) (Docker)" @$(ECHO_CMD) " Web: http://$(APP_DOMAIN):$(PORT_web)" @$(ECHO_CMD) "${YELLOW}Hit Ctrl+C to stop.${NC}" @cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev dev-full: check-ports infra-up ## [HIGH] Start Everything inc. Chat + Stream (Rust) @$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING HYBRID DEV ENVIRONMENT (full)${NC}" @$(ECHO_CMD) " Go: http://$(APP_DOMAIN):$(PORT_backend-api)" @$(ECHO_CMD) " Chat: http://$(APP_DOMAIN):$(PORT_chat-server)" @$(ECHO_CMD) " Web: http://$(APP_DOMAIN):$(PORT_web)" @$(ECHO_CMD) "${YELLOW}Hit Ctrl+C to stop all.${NC}" @(trap 'kill 0' SIGINT; \ if command -v air >/dev/null; then \ $(ECHO_CMD) "${GREEN}[Go] Hot Reload Active (Air)${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & \ else \ $(ECHO_CMD) "${YELLOW}[Go] Standard Run${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & \ fi; \ if command -v cargo-watch >/dev/null; then \ $(ECHO_CMD) "${GREEN}[Chat] Hot Reload Active${NC}" && cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo watch -x run -q & \ $(ECHO_CMD) "${GREEN}[Stream] Hot Reload Active${NC}" && cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & \ else \ $(ECHO_CMD) "${YELLOW}[Chat] Standard Run${NC}" && cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo run -q & \ $(ECHO_CMD) "${YELLOW}[Stream] Standard Run${NC}" && cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & \ fi; \ $(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}" && cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev & \ wait) dev-backend: check-ports infra-up ## [MID] Start Backends Only (Hot Reload supported) @$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING BACKEND ONLY${NC}" @(trap 'kill 0' SIGINT; \ if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & fi; \ if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo run -q & fi; \ if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & fi; \ wait) dev-web: check-ports infra-up ## [MID] Start Web app only (assumes backend elsewhere or mocked) @$(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}" @cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev dev-backend-api: check-ports infra-up ## [MID] Start Go backend only @$(ECHO_CMD) "${GREEN}[Backend API] Starting...${NC}" @if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air; else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go; fi dev-chat-server: check-ports infra-up ## [MID] Start Chat server only @$(ECHO_CMD) "${GREEN}[Chat] Starting...${NC}" @if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo watch -x run -q; else cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo run -q; fi dev-stream-server: check-ports infra-up ## [MID] Start Stream server only @$(ECHO_CMD) "${GREEN}[Stream] Starting...${NC}" @if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q; else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q; fi stop-local-services: ## [LOW] Stop all local processes (air, cargo watch, vite) @pkill -f "air\|cargo watch\|npm run dev\|go run.*cmd/api" 2>/dev/null || true start-local-service: ## [LOW] Start a service locally (usage: make start-local-service SERVICE=backend-api) @if [ -z "$(SERVICE)" ]; then $(ECHO_CMD) "${RED}❌ Please specify SERVICE=name${NC}"; exit 1; fi @$(ECHO_CMD) "${BLUE}🚀 Starting $(SERVICE)...${NC}" @case "$(SERVICE)" in \ backend-api) \ if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & fi ;; \ chat-server) \ if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo run -q & fi ;; \ stream-server) \ if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & fi ;; \ web) \ cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev & ;; \ *) \ $(ECHO_CMD) "${RED}Unknown service: $(SERVICE)${NC}"; exit 1 ;; \ esac stop-local-service: ## [LOW] Stop a local service (usage: make stop-local-service SERVICE=backend-api) @if [ -z "$(SERVICE)" ]; then $(ECHO_CMD) "${RED}❌ Please specify SERVICE=name${NC}"; exit 1; fi @case "$(SERVICE)" in \ backend-api) pkill -f "air\|go run.*cmd/api" 2>/dev/null || true ;; \ chat-server|stream-server) pkill -f "cargo.*$(SERVICE)" 2>/dev/null || true ;; \ web) pkill -f "npm run dev\|vite" 2>/dev/null || true ;; \ *) $(ECHO_CMD) "${RED}Unknown service: $(SERVICE)${NC}" ;; \ esac