# ---------- 1) Build frontend (React + Vite) ---------- FROM node:20-alpine AS frontend-build WORKDIR /frontend # Accept build arguments for Vite environment variables # Hugging Face Spaces should pass these as build args, but we'll also check environment ARG VITE_FIREBASE_API_KEY ARG VITE_FIREBASE_AUTH_DOMAIN ARG VITE_FIREBASE_PROJECT_ID ARG VITE_FIREBASE_STORAGE_BUCKET ARG VITE_FIREBASE_MESSAGING_SENDER_ID ARG VITE_FIREBASE_APP_ID ARG VITE_API_BASE_URL # Export as environment variables so the build script can access them # Use ARG value if provided, otherwise it will be empty and script will check env ENV VITE_FIREBASE_API_KEY=$VITE_FIREBASE_API_KEY ENV VITE_FIREBASE_AUTH_DOMAIN=$VITE_FIREBASE_AUTH_DOMAIN ENV VITE_FIREBASE_PROJECT_ID=$VITE_FIREBASE_PROJECT_ID ENV VITE_FIREBASE_STORAGE_BUCKET=$VITE_FIREBASE_STORAGE_BUCKET ENV VITE_FIREBASE_MESSAGING_SENDER_ID=$VITE_FIREBASE_MESSAGING_SENDER_ID ENV VITE_FIREBASE_APP_ID=$VITE_FIREBASE_APP_ID ENV VITE_API_BASE_URL=$VITE_API_BASE_URL # Install frontend dependencies COPY frontend/package*.json ./ RUN npm install # Copy rest of frontend (including build script) COPY frontend/ . # Make build script executable and run it to create .env file # Hugging Face Spaces makes environment variables available during build RUN chmod +x build-env.sh && \ ./build-env.sh && \ npm run build # Vite will output to /frontend/dist by default # ---------- 2) Backend (FastAPI + Python) ---------- FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 WORKDIR /app # System deps (optional but useful for some libs) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* # Install backend dependencies COPY backend/requirements.txt ./backend/requirements.txt RUN pip install --no-cache-dir -r backend/requirements.txt # Copy backend code COPY backend ./backend # Copy built frontend into backend/frontend_dist # FastAPI will serve from this folder later RUN mkdir -p backend/frontend_dist COPY --from=frontend-build /frontend/dist ./backend/frontend_dist # Create data directory for SQLite RUN mkdir -p data # Env vars used in backend/db.py etc. ENV DB_PATH=/app/data/app.db ENV PORT=7860 ENV PYTHONPATH=/app EXPOSE 7860 # Launch FastAPI app (we'll use backend.app.main:app) CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "7860"]