## MODIFIED Requirements ### Requirement: Docker Compose configuration The project SHALL include docker-compose.yml for simplified deployment orchestration. #### Scenario: Service definition - **WHEN** docker-compose.yml is parsed - **THEN** defines service named 'candle-annotator' using Dockerfile from current directory #### Scenario: Port mapping - **WHEN** docker-compose up runs - **THEN** maps host port 3000 to container port 3000 #### Scenario: Volume mounting for ML data - **WHEN** docker-compose up runs - **THEN** mounts named volume 'ml-data' to /app/ml-data in the candle-annotator container #### Scenario: Frontend depends on PostgreSQL - **WHEN** docker-compose up runs - **THEN** the candle-annotator service starts only after the postgres service is healthy (`depends_on: postgres: condition: service_healthy`) #### Scenario: Frontend DATABASE_URL - **WHEN** the candle-annotator service starts - **THEN** the `DATABASE_URL` environment variable is set to `postgresql://ml_user:ml_password@postgres:5432/candle_annotator` #### Scenario: Restart policy - **WHEN** container crashes or stops - **THEN** docker-compose automatically restarts container unless explicitly stopped (restart: unless-stopped) #### Scenario: No SQLite volume - **WHEN** docker-compose.yml is parsed - **THEN** there is no `candle-data` volume defined or mounted ### Requirement: Environment variable configuration The project SHALL use environment variables for runtime configuration. #### Scenario: .env.example file - **WHEN** repository is cloned - **THEN** includes .env.example file documenting all configurable environment variables with example values #### Scenario: DATABASE_URL configuration - **WHEN** `DATABASE_URL` environment variable is set - **THEN** the Next.js application connects to the PostgreSQL database at the specified URL #### Scenario: No DATABASE_PATH variable - **WHEN** environment variables are inspected - **THEN** there is no `DATABASE_PATH` variable (SQLite path is removed) #### Scenario: PORT configuration - **WHEN** PORT environment variable is set - **THEN** Next.js server listens on specified port (default: 3000) #### Scenario: NODE_ENV configuration - **WHEN** NODE_ENV environment variable is set to 'production' - **THEN** Next.js runs in production mode with optimizations enabled ### Requirement: Database persistence The deployment SHALL ensure PostgreSQL data persists across container restarts. #### Scenario: PostgreSQL volume - **WHEN** docker-compose up runs - **THEN** the `postgres-data` named volume is mounted to `/var/lib/postgresql/data` in the postgres container #### Scenario: Container restart preserves data - **WHEN** the postgres container is stopped and restarted - **THEN** all database tables and data remain intact #### Scenario: PostgreSQL database name - **WHEN** the postgres service starts - **THEN** the `POSTGRES_DB` environment variable is set to `candle_annotator` ### Requirement: Health check endpoint The API SHALL provide a health check endpoint for container orchestration. #### Scenario: Health check endpoint responds - **WHEN** GET request sent to `/api/health` - **THEN** system returns 200 status with JSON `{ status: 'ok', timestamp: }` #### Scenario: Database connection check - **WHEN** GET request sent to `/api/health?check=db` - **THEN** system attempts a PostgreSQL query and returns 200 if successful, 503 if database unavailable