ifcommand -v air >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_backend-api)&& air &elsecd$(ROOT)/$(SERVICE_DIR_backend-api)&& go run cmd/modern-server/main.go &fi;\
ifcommand -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo watch -x run -q &elsecd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo run -q &fi;\
ifcommand -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_stream-server)&& cargo watch -x run -q &elsecd$(ROOT)/$(SERVICE_DIR_stream-server)&& cargo run -q &fi;\
wait)
dev-web:check-portsinfra-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-portsinfra-up## [MID] Start Go backend only
@if command -v air >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_backend-api)&& air;elsecd$(ROOT)/$(SERVICE_DIR_backend-api)&& go run cmd/modern-server/main.go;fi
dev-chat-server:check-portsinfra-up## [MID] Start Chat server only
@$(ECHO_CMD)"${GREEN}[Chat] Starting...${NC}"
@if command -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo watch -x run -q;elsecd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo run -q;fi
dev-stream-server:check-portsinfra-up## [MID] Start Stream server only
@$(ECHO_CMD)"${GREEN}[Stream] Starting...${NC}"
@if command -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_stream-server)&& cargo watch -x run -q;elsecd$(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.*modern-server" 2>/dev/null ||true
start-local-service:## [LOW] Start a service locally (usage: make start-local-service SERVICE=backend-api)
ifcommand -v air >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_backend-api)&& air &elsecd$(ROOT)/$(SERVICE_DIR_backend-api)&& go run cmd/modern-server/main.go &fi;;\
chat-server)\
ifcommand -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo watch -x run -q &elsecd$(ROOT)/$(SERVICE_DIR_chat-server)&& cargo run -q &fi;;\
stream-server)\
ifcommand -v cargo-watch >/dev/null;thencd$(ROOT)/$(SERVICE_DIR_stream-server)&& cargo watch -x run -q &elsecd$(ROOT)/$(SERVICE_DIR_stream-server)&& cargo run -q &fi;;\