#!/bin/bash # Local development runner # Usage: ./run_dev.sh set -e ROOT="$(cd "$(dirname "$0")" && pwd)" BACKEND="$ROOT/backend" FRONTEND="$ROOT/frontend" # Ensure data dirs mkdir -p "$BACKEND/data/uploads" "$BACKEND/data/outputs" "$BACKEND/data/sheets" # Load .env if present [ -f "$BACKEND/.env" ] && export $(grep -v '^#' "$BACKEND/.env" | xargs) # Override paths for local dev export DATA_DIR="$BACKEND/data" export UPLOADS_DIR="$BACKEND/data/uploads" export OUTPUTS_DIR="$BACKEND/data/outputs" export SHEETS_DIR="$BACKEND/data/sheets" export USERS_FILE="$BACKEND/data/users.json" export DROPDOWNS_FILE="$BACKEND/data/dropdowns.json" # Create venv if missing if [ ! -d "$BACKEND/.venv" ]; then echo "Creating Python venv..." python3 -m venv "$BACKEND/.venv" "$BACKEND/.venv/bin/pip" install -q -r "$BACKEND/requirements.txt" fi # Start backend in background echo "Starting backend on http://localhost:8000 ..." cd "$BACKEND" .venv/bin/python -m hypercorn server.app:create_app\(\) --bind 0.0.0.0:8000 --worker-class asyncio & BACKEND_PID=$! # Start frontend dev server echo "Starting frontend on http://localhost:5173/ac-helper/ ..." cd "$FRONTEND" npm run dev & FRONTEND_PID=$! echo "" echo "AC Tool running:" echo " Frontend: http://localhost:5173/ac-helper/" echo " Backend: http://localhost:8000" echo "" echo "Press Ctrl+C to stop both servers." trap "kill $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit 0" INT TERM wait