| # --- Stage 1: Build the Frontend --- | |
| FROM node:20-slim AS build-stage | |
| WORKDIR /app/frontend | |
| COPY frontend/package*.json ./ | |
| RUN npm install | |
| COPY frontend/ ./ | |
| RUN npm run build | |
| # --- Stage 2: Production Environment --- | |
| # Use the official Playwright image which includes all system dependencies | |
| FROM mcr.microsoft.com/playwright/python:v1.42.0-jammy | |
| # Set environment variables | |
| ENV PYTHONDONTWRITEBYTECODE 1 | |
| ENV PYTHONUNBUFFERED 1 | |
| ENV PORT 7860 | |
| WORKDIR /app | |
| # Install Python dependencies | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # Pre-install Chromium in the image to prevent timeouts at runtime | |
| RUN playwright install chromium | |
| # Copy the built frontend from Stage 1 | |
| COPY --from=build-stage /app/frontend/dist ./frontend/dist | |
| # Copy the backend code and tools | |
| COPY app.py . | |
| COPY tools/ ./tools/ | |
| # Create a temporary directory for results | |
| RUN mkdir -p .tmp && chmod 777 .tmp | |
| # Expose the port (Hugging Face Spaces uses 7860) | |
| EXPOSE 7860 | |
| # Run the backend (which also serves the frontend) | |
| CMD ["python", "app.py"] | |