The current submission runs in local standalone single-process mode.
- Start command:
stream(without subcommand) ordocker compose up - Listen port: default
3000 - Runtime model: one process mounts Meta, Ingestor, and Streamer routes together
This assignment is delivered primarily in this mode; split deployment is not required for evaluation.
What stream-app assembles in standalone mode:
- Build shared infrastructure: SQLite, in-memory event queue, in-memory object store
- Initialize Meta / Ingestor / Streamer state
- Merge service routers into one
axumapp - Apply shared middleware around protected business routes:
- Auth middleware (injects
X-User-Id=bot) - Rate-limit middleware
- Auth middleware (injects
- Expose
/healthseparately (outside business middleware)
| Area | Path Prefix | Example |
|---|---|---|
| Health | /health |
GET /health |
| Meta | /videos, /share |
POST /videos, GET /share/:token |
| Ingestor | /upload |
POST /upload/:id/init |
| Streamer | /stream |
GET /stream/:id/manifest |
Notes:
- In standalone mode, clients call the paths above directly (no
/api/meta/*gateway prefix). - Data-plane requests still require Bearer tokens issued by Meta.
| Component | Backing |
|---|---|
| Metadata | SQLite |
| Event bus | In-memory queue |
| Object storage | In-memory object store |
This makes standalone mode ideal for local validation and interview demonstration.
For production, object storage and deployment topology should be upgraded accordingly.
Gateway / Meta / Ingestor / Streamer are still documented as separate service boundaries to show scale-out direction.
The delivered implementation is their single-process combined runtime, with consistent API and state-machine behavior.