| # Start FastAPI (public) + Streamlit (internal validation) | |
| # Prefer project venv (parent of nexus-enhanced) so uvicorn/streamlit resolve without manual activate | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| if [ -x "$SCRIPT_DIR/../venv/bin/uvicorn" ]; then | |
| export PATH="$SCRIPT_DIR/../venv/bin:$PATH" | |
| fi | |
| # Function to cleanup child processes on exit | |
| cleanup() { | |
| echo "Shutting down services..." | |
| kill $PID_FASTAPI $PID_STREAMLIT 2>/dev/null | |
| exit 0 | |
| } | |
| trap cleanup EXIT INT TERM | |
| echo "Starting FastAPI backend on port 7860..." | |
| uvicorn server.app:app --host 0.0.0.0 --port 7860 & | |
| PID_FASTAPI=$! | |
| # Wait for FastAPI to be ready before starting Streamlit | |
| sleep 3 | |
| echo "Starting Streamlit validation UI on port 8501..." | |
| streamlit run streamlit_app_v2.py --server.port=8501 --server.address=0.0.0.0 & | |
| PID_STREAMLIT=$! | |
| echo "✅ Services running:" | |
| echo " • FastAPI (judge dashboard): http://0.0.0.0:7860" | |
| echo " • Streamlit (validation UI): http://0.0.0.0:8501" | |
| # Keep script running | |
| wait | |