# Development Environment

This capability defines the development environment setup and service management for Tool_OCR.

## ADDED Requirements

### Requirement: Unified Service Startup

The system SHALL provide a single startup script that can launch all services or individual components.

#### Scenario: Start all services

- **WHEN** developer runs `./start.sh`
- **THEN** both backend and frontend services start
- **AND** service URLs are displayed

#### Scenario: Start only backend

- **WHEN** developer runs `./start.sh backend`
- **THEN** only the backend service starts on port 8000

#### Scenario: Start only frontend

- **WHEN** developer runs `./start.sh frontend`
- **THEN** only the frontend service starts on port 5173

### Requirement: Service Process Management

The system SHALL provide commands to check status and stop running services.

#### Scenario: Check service status

- **WHEN** developer runs `./start.sh --status`
- **THEN** the script displays which services are running with their PIDs

#### Scenario: Stop all services

- **WHEN** developer runs `./start.sh --stop`
- **THEN** all running services are gracefully terminated

### Requirement: Environment Setup Validation

The setup script SHALL validate that all required dependencies are correctly installed.

#### Scenario: Validate Python environment

- **WHEN** setup script runs
- **THEN** Python version is checked (3.10+)
- **AND** virtual environment is created or verified
- **AND** all pip packages are installed

#### Scenario: Validate Node.js environment

- **WHEN** setup script runs
- **THEN** Node.js LTS version is installed via nvm
- **AND** npm dependencies are installed

#### Scenario: Validate GPU support (optional)

- **WHEN** setup script runs on a system with NVIDIA GPU
- **THEN** CUDA version is detected
- **AND** appropriate PaddlePaddle GPU version is installed
- **AND** GPU availability is verified

### Requirement: Environment Configuration

The system SHALL use `.env.example` files to document all required environment variables.

#### Scenario: New developer setup

- **WHEN** developer clones the repository
- **THEN** `.env.example` files document all required variables
- **AND** developer copies to `.env.local` and fills in values
