# Tech Stack — Accessible Video Processing Platform

<!-- SCOPE: tech-stack | owner: ln-113 | generated: 2026-04-29 -->

## Backend

| Component | Package | Version | Role |
|-----------|---------|---------|------|
| Web framework | FastAPI | 0.115.0 | Async REST + WebSocket |
| Task queue | Celery | 5.3.4 | Background AI processing |
| Database driver | Motor (AsyncIOMotor) | latest | MongoDB async driver |
| Cache / broker | Redis | 7.2 | Celery broker + rate limit state |
| Data validation | Pydantic | 2.5 | Request/response schemas |
| Runtime | Python | 3.11 | Language version |
| Package manager | Poetry | latest | Dependency management |
| ASGI server | Uvicorn | latest | HTTP server |
| JWT | python-jose | ^3.3.0 | Token encode/decode |
| Password hash | passlib + bcrypt | latest | Password hashing |
| Observability | OpenTelemetry | latest | Tracing (currently disabled) |
| Error tracking | Sentry SDK | latest | Exception capture |
| Metrics | Prometheus client | latest | `/metrics` endpoint |

## Frontend

| Component | Package | Version | Role |
|-----------|---------|---------|------|
| UI framework | React | 19.1.1 | Component model |
| Build tool | Vite | 7.1.2 | Dev server + bundler |
| Language | TypeScript | 5.8 | Type safety |
| Server state | TanStack Query | 5.85 | API caching + invalidation |
| Routing | React Router | 7.8 | Client-side routing |
| Styling | Tailwind CSS | 4.1 | Utility-first CSS |
| Client state | Zustand | 5.0 | Auth token + UI state |
| Forms | React Hook Form + Zod | latest | Form handling + validation |
| HTTP client | Axios | latest | API calls with interceptors |
| E2E testing | Playwright | latest | Browser automation |
| Unit testing | Vitest + RTL | latest | Component tests |

## External Services

| Service | Provider | Purpose | Auth |
|---------|---------|---------|------|
| Caption / AD generation | Gemini 2.5 Pro | Core AI processing | API key |
| Translation | Google Cloud Translate | 50+ language translation | Service account |
| Transcreation | Gemini 2.5 Pro | Cultural adaptation | API key |
| TTS (primary) | Google Cloud TTS | Audio description synthesis | Service account |
| TTS (premium voices) | ElevenLabs | High-quality voice synthesis | API key |
| File storage | Google Cloud Storage | Video + VTT files | Service account |
| Email | SendGrid | Client delivery notifications | API key |
| SSO | Microsoft Entra ID | Enterprise login | OAuth2/OIDC |
| Error tracking | Sentry | Exception capture + performance | DSN |
| Secrets | GCP Secret Manager | Production credentials | Service account |

## Database

| Store | Technology | Host | Purpose |
|-------|-----------|------|---------|
| Primary DB | MongoDB Atlas | Cloud (M10+) | Job documents, users, glossaries |
| Cache / broker | Redis | Docker (local) / Cloud (prod) | Celery tasks, rate limit counters |
| Vector index | Atlas Vector Search | In MongoDB Atlas | Glossary embedding retrieval |

## Infrastructure

| Layer | Technology | Notes |
|-------|-----------|-------|
| Container runtime | Docker + Docker Compose | All backend services containerized |
| Reverse proxy | Apache 2.4 | Modules: mod_proxy, mod_proxy_wstunnel, mod_rewrite |
| Server OS | Linux | optical-web-1 (GCP VM, 32GB RAM, 8 CPU) |
| Python env | Poetry virtualenv | Inside Docker containers |
| Node env | Node 20+ / npm | Frontend build |

## Configuration Files

| File | Purpose |
|------|---------|
| `backend/pyproject.toml` | Python deps + ruff config |
| `backend/mypy.ini` | mypy type-check config |
| `frontend/package.json` | Node deps |
| `frontend/eslint.config.js` | ESLint rules |
| `frontend/tsconfig.json` | TypeScript config |
| `frontend/playwright.config.ts` | E2E test config |
| `docker-compose.yml` | Base services |
| `docker-compose.local.yml` | Local dev overrides |
| `docker-compose.prod.yml` | Production overrides |
| `.env.local` | Local secrets (gitignored) |
| `.env.production` | Production secrets (gitignored) |
| `.env.prod.example` | Template for production env |

## Maintenance

**Update triggers:** Dependency version bump, new external service added, Python or Node runtime version change.
**Verification:** Versions match `backend/pyproject.toml` and `frontend/package.json`.

<!-- END SCOPE: tech-stack -->
