#!/usr/bin/env bash # ================================================================ # FinBot — Full Stack Startup Script # Starts both the FastAPI backend and Next.js frontend together. # ================================================================ set -e ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ IRIS IR Intelligence System — Startup ║" echo "║ Emirates NBD · Local Demo ║" echo "╚══════════════════════════════════════════════════════════╝" echo "" # ── Backend ───────────────────────────────────────────────────── echo "▶ Starting FastAPI backend (port 8000)…" cd "$ROOT_DIR/backend" if [ ! -d ".venv" ]; then echo " Creating Python virtual environment…" python3 -m venv .venv fi source .venv/bin/activate PYTHON="$ROOT_DIR/backend/.venv/bin/python" echo " Installing backend dependencies…" "$PYTHON" -m pip install -q -r requirements.txt echo " Launching uvicorn…" export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 "$PYTHON" -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload & BACKEND_PID=$! # ── Wait for backend ───────────────────────────────────────────── echo " Waiting for backend…" for i in {1..15}; do if curl -sf http://localhost:8000/api/health > /dev/null 2>&1; then echo " ✅ Backend ready at http://localhost:8000" break fi sleep 1 done # ── Frontend ───────────────────────────────────────────────────── echo "" echo "▶ Starting Next.js frontend (port 3000)…" cd "$ROOT_DIR" npm run dev & FRONTEND_PID=$! echo "" echo "══════════════════════════════════════════════════════════" echo " IRIS running:" echo " Frontend → http://localhost:3000" echo " Backend → http://localhost:8000" echo " API docs → http://localhost:8000/api/docs" echo "" echo " Press Ctrl+C to stop both servers." echo "══════════════════════════════════════════════════════════" # Cleanup on exit trap "echo ''; echo 'Stopping…'; kill $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit" INT TERM wait