Self-hosted multi-platform broadcast newsroom for activist collectives: publishing pipeline with group approval and DST-proof scheduling, TweetDeck-style column wall with hostile-content-safe rendering, live control room with Auto Director, bridged chat governance with polls and quorum, distributed sandboxed transcode workers, encrypted content-addressed archive, monthly analytics. MIT licensed. See README.md and docs/.
63 lines
3.2 KiB
Markdown
63 lines
3.2 KiB
Markdown
# Tactical Media Broadcast Hub
|
|
|
|
Self-hosted multi-tenant social / video / livestream management platform with a
|
|
generic connector system and a Virtual Channel / Auto Director subsystem.
|
|
|
|
Built for collectives that need to coordinate media across platforms without
|
|
concentrating access in one person's hands. Every credential lives in an
|
|
encrypted vault. Every editorial decision lands in a tamper-evident audit log.
|
|
Every feature is multi-tenant with row-level security.
|
|
|
|
## Features
|
|
|
|
- **Publishing pipeline** — drafts → group approval → schedule → fenced dispatch → receipts. Multi-platform fan-out (Mastodon, Telegram, Bluesky, PeerTube, Facebook, Instagram, Threads, LinkedIn, Reddit, Twitch, Discord, Slack). DST-proof scheduling.
|
|
- **Column wall** — live multi-platform feed columns, TweetDeck-style. Safe rendering (hostile-HTML tested). Per-source cooldown + adaptive backoff.
|
|
- **Live Control Room** — browser multiview, TAKE/CUT, preview/program, lower-thirds, scrolling chyrons, audio mixing, tally.
|
|
- **Auto-Director** — priority rules switch sources automatically so the stream never dies mid-action.
|
|
- **Chat governance** — bridged chats (Telegram/Twitch/Discord) into one overlay. Polls with configurable quorum. Approval gates on every post. Machine-readable reason codes.
|
|
- **Distributed transcode workers** — laptops and GPUs join as render workers over Tailscale. Per-job sandboxed FFmpeg (UID/seccomp/no-network).
|
|
- **Archive** — content-addressed encrypted S3, dedup, full-text search, CSV/JSON export. Deleted platform content stays citable.
|
|
- **Analytics** — month-partitioned snapshots, current + previous month with deltas, per-provider breakdown.
|
|
|
|
## Quickstart
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm lint && pnpm typecheck && pnpm build
|
|
|
|
# infrastructure
|
|
docker compose -f infra/docker-compose.yml up -d postgres redis temporal minio otel-collector prometheus grafana
|
|
|
|
# everything incl. media stub + mock live source + mock RTMP sink
|
|
docker compose -f infra/docker-compose.yml --profile dev up -d
|
|
|
|
# apps
|
|
pnpm dev # api :3000, web :3001(adjust if colliding), scheduler, media-worker :3100
|
|
curl localhost:3000/healthz
|
|
curl localhost:3000/readyz
|
|
```
|
|
|
|
## Documentation
|
|
|
|
| Section | Path |
|
|
|---|---|
|
|
| Engineering guide | [`docs/engineering-guide.md`](docs/engineering-guide.md) |
|
|
| Admin guide | [`docs/admin-guide.md`](docs/admin-guide.md) |
|
|
| User manual | [`docs/user-manual-v2.md`](docs/user-manual-v2.md) |
|
|
| Design docs | [`docs/design/`](docs/design/) |
|
|
| Streaming architecture | [`docs/design/streaming-architecture.md`](docs/design/streaming-architecture.md) |
|
|
| Deployment (occupymedia.cc) | [`infra/occupymedia/DEPLOY.md`](infra/occupymedia/DEPLOY.md) |
|
|
|
|
## Deterministic live-source testing
|
|
|
|
```bash
|
|
pnpm --filter @tactical-media-broadcast-hub/media-worker soak -- --hours 8 --out
|
|
```
|
|
|
|
## Security & trust model
|
|
|
|
Self-hosted, end to end — no corporate cloud, no accounts needed to run the
|
|
system itself. Multi-tenant with row-level security; platform credentials in an
|
|
encrypted vault the database never sees in plaintext; every editorial action in
|
|
a hash-chained audit log; anonymous-infrastructure friendly (the host carries
|
|
boxes, not content — storage is ciphertext).
|