- arc42 template fully populated in docs/architecture/README.md with Mermaid diagrams, quality goals, deployment view, cross-cutting concepts, risks and glossary - Consolidated ADR-001 (merged all previous root ADR drafts) - ADR-002: Module/folder structure decision and rationale - ADR-003: Technology stack, language choices per module (TypeScript, Go, Bash/Python), Docker-first approach, and explicit implicit assumptions - Updated root README.md with comprehensive Project Structure section and links to all ADRs - Created .github/instructions/TODO.md with detailed tracking (architecture phase marked complete) - Folder structure created matching ADR-002 (frontend/, backend/playout/, backend/chat/, backend/shared/, infrastructure/, scripts/, monitoring/) - Git repository initialized with main branch This establishes the foundation defined in the arc42 documentation and the three ADRs.
4.3 KiB
4.3 KiB
ADR-002: Project Module / Folder Structure
Status: Accepted
Date: 2026-08-02
Author: AI Assistant (based on arc42 analysis)
Related ADRs: ADR-001, ADR-003
Context
The arc42 documentation in docs/architecture/README.md defines several clear building blocks:
- Playout Service (FFmpeg + MediaMTX/SRS, playlist handling, normalization)
- Chat Backend (WebSocket server, rooms, DMs, moderation, Redis/DB)
- Frontend SPA (hls.js player, chat UI, static assets)
- Infrastructure / Delivery (Nginx, Cloudflare R2/CDN rules, Docker, IaC)
- Supporting concerns (scripts for normalization/sync/backup, monitoring, shared utilities)
We need a folder layout that makes these modules obvious, supports independent development/deployment (Docker), keeps the root clean, and aligns with the high-level context and deployment diagrams.
Decision Drivers
- Clear mapping to arc42 building blocks and runtime/deployment views.
- Easy separation for frontend vs backend services.
- Docker / container friendliness (one Dockerfile per major service).
- Support for scripts, infrastructure-as-code, and monitoring configs.
- Minimal cognitive load for new contributors (standard
frontend/,backend/,infrastructure/layout). - Future extensibility (multi-channel, ABR, LL-HLS, paid features).
Decision
Adopt the following structure (created in the workspace):
linearvoid/
├── frontend/ # Static SPA (HTML/CSS/JS + hls.js + chat UI)
├── backend/
│ ├── playout/ # Continuous HLS playout engine (FFmpeg + MediaMTX/SRS)
│ ├── chat/ # WebSocket chat service (Go/Node + Redis + DB)
│ └── shared/ # Common utilities, types, normalization logic
├── infrastructure/ # Docker Compose, Nginx, Cloudflare rules, IaC
├── scripts/ # Normalization, R2 sync, backup, deployment scripts
├── monitoring/ # Dashboards, Prometheus rules, Grafana
├── docs/architecture/
│ ├── README.md # arc42 (populated)
│ └── adr/
│ ├── ADR-001.md
│ ├── ADR-002-module-structure.md
│ └── ADR-003-tech-stack.md
├── .env.example
├── docker-compose.yml
├── README.md
└── .gitignore
Key conventions:
backend/<service>/contains its ownsrc/,config/, andDockerfile.infrastructure/owns all deployment and cloud configuration.scripts/holds automation that is not part of a running service.- All documentation lives under
docs/architecture/.
Rationale
- Alignment with arc42: Each top-level folder corresponds to a major building block or cross-cutting concern shown in the context and deployment diagrams.
- Developer Experience: Clear separation reduces merge conflicts and makes it obvious where to add player logic vs chat logic vs cache rules.
- Operational Simplicity: Docker Compose can easily orchestrate
playout,chat, andnginxservices from the root. - Scalability: Services can be split into separate repositories or Kubernetes deployments later without major refactoring.
- Alternatives Considered:
- Flat
src/structure → rejected (hard to see architectural boundaries). - Monorepo with
apps/andpackages/(Turborepo style) → overkill for current scale. - All-in-one
services/folder → less explicit thanbackend/playoutvsbackend/chat.
- Flat
This structure was created via the create_directory tool and is reflected in the updated root and architecture READMEs.
Consequences
Positive:
- Excellent traceability from architecture docs → code.
- Easy to add new modules (e.g.,
backend/schedulerlater). - Supports the normalization-first and caching-first principles from ADR-001.
Negative / Risks:
- Slightly more directories than a minimal prototype (acceptable trade-off).
- Need to keep documentation in sync when structure evolves (mitigated by ADRs).
Future: Next ADRs will document Docker Compose layout (ADR-004) and API contracts between services.
References
docs/architecture/README.md(Building Block View, Deployment View, Context Diagram)- ADR-001 (overall architecture and technology constraints)
- ADR-003 (language and runtime choices per module)