# Local dev: FastAPI (uvicorn --reload) + Vite HMR. # Persistence is SQLite + files under ./data (matches HF Storage Bucket layout in prod). # Usage: docker compose up --build # UI: http://localhost:5173 | API: http://localhost:8000 | /docs on API name: cu-student-helper services: api: build: context: . dockerfile: Dockerfile.backend-dev ports: - "8000:8000" env_file: - ${ENV_FILE_PATH:-${USERPROFILE:-${HOME}}/.secrets/shared.env} environment: DATA_DIR: /app/data SERVE_FRONTEND_STATIC: "false" CORS_ORIGINS: http://localhost:5173,http://127.0.0.1:5173,http://localhost:8000,http://127.0.0.1:8000 # Windows bind mounts often miss inotify events; force polling so uvicorn --reload picks up edits. WATCHFILES_FORCE_POLLING: "true" volumes: - ./backend:/app/backend - ./data:/app/data command: [ "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload", "--reload-dir", "/app/backend/app", ] frontend: image: node:20-bookworm working_dir: /app/frontend ports: - "5173:5173" volumes: - ./frontend:/app/frontend - frontend_node_modules:/app/frontend/node_modules environment: CHOKIDAR_USEPOLLING: "true" WATCHPACK_POLLING: "true" API_PROXY_TARGET: http://api:8000 # Faster polling on Windows Docker bind mounts (default interval can feel "stuck"). CHOKIDAR_INTERVAL: "300" command: [ "sh", "-c", "test -d node_modules/react || npm ci; npm run dev -- --host 0.0.0.0 --port 5173", ] depends_on: - api volumes: frontend_node_modules: