# Tasks: Deploy to Hosting

**Date**: 2025-10-15
**Spec**: [spec.md](./spec.md)
**Plan**: [plan.md](./plan.md)

## Implementation Strategy

The implementation is broken into phases, starting with foundational backend changes, followed by the core configuration work, and finishing with user-facing error handling and end-to-end testing. User Story 1 (Developer Configuration) contains the critical path tasks and delivers the main goal of the feature. User Story 2 adds robustness and validation.

**MVP Scope**: Completing all tasks in Phase 3 will deliver a configurable and deployable application.

---

## Phase 1: Setup

**Goal**: Add necessary dependencies to the backend service.

| Task ID | Description | File(s) | Status |
|---|---|---|---|
| T001 | [Backend] Install `cors` and `dotenv` npm packages. | `backend/package.json` | Done |

---

## Phase 2: Foundational Backend Configuration

**Goal**: Prepare the backend server to use environment variables.

| Task ID | Description | File(s) | Status |
|---|---|---|---|
| T002 | [Backend] Modify the server startup script to load environment variables from a `.env` file using `dotenv`. | `backend/src/index.ts` | Done |

---

## Phase 3: User Story 1 - Developer Configuration

**Goal**: A developer can configure the application for public deployment using environment variables.
**Independent Test Criteria**: After completing this phase, a developer can follow `quickstart.md`, deploy the application to a custom domain, and access it without CORS errors.

| Task ID | Description | File(s) | Status |
|---|---|---|---|
| T003 | [Backend Test] Create a new unit test file for CORS configuration. Write tests that verify the correct origin is allowed, an incorrect origin is blocked, and the default same-origin policy is applied when no environment variable is set. | `backend/tests/cors.test.ts` | Done |
| T004 | [Backend] Implement the `cors` middleware in the Express app. The configuration should read from `process.env.CORS_ORIGIN`, log rejected requests as warnings, and apply the default same-origin policy as defined in the tests. [P] | `backend/src/index.ts` | Done |
| T005 | [Frontend] Modify the API service(s) to use `process.env.REACT_APP_API_URL` as the base URL for all backend requests. [P] | `frontend/src/services/websocket.ts` (and any other relevant services) | Done |
| T006 | [Root] Update the `docker-compose.yaml` file to use `env_file` to pass `.env` files to the `backend` and `frontend` services. | `docker-compose.yaml` | Done |

**Checkpoint**: The core feature is implemented. The application is now configurable but lacks polished error handling for the user.

---

## Phase 4: User Story 2 - Public Access & Polish

**Goal**: An end-user is gracefully notified of connection issues, and the deployment is validated.
**Independent Test Criteria**: When the frontend is configured with an invalid backend URL, the user sees a snackbar error message. An E2E test confirms a successful deployment has no CORS errors.

| Task ID | Description | File(s) | Status |
|---|---|---|---|
| T007 | [Frontend] Implement a global error handler that displays a simple error message using the Material-UI (MUI) `Snackbar` component if the application fails to establish a connection with the backend. | `frontend/src/App.tsx` | Done |
| T008 | [E2E Test] Create a new end-to-end test that deploys the application with custom environment variables and verifies that the app loads without any CORS-related console errors. [P] | `tests/e2e/deployment.e2e.test.ts` | Done |
| T009 | [Docs] Update the root `README.md` with a new "Deployment" section that links to the `quickstart.md` guide for configuration details. [P] | `README.md` | Done |

---

## Dependencies

- **Phase 1 & 2** must be completed before **Phase 3**.
- **Phase 3** must be completed before **Phase 4**.

## Parallel Execution Examples

- **Within Phase 3**: T004 (Backend CORS) and T005 (Frontend URL) can be worked on in parallel after the test in T003 is written.
- **Within Phase 4**: T008 (E2E Test) and T009 (Docs) can be worked on in parallel with T007 (Frontend UI).
