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/.
3 KiB
Matrix Setup — Tactical Media Broadcast Hub team chat
OccupyMedia storage phase one adds group attachment/archive contracts
and an independent files/docs scaffold.
Live occ-chat remains conduwuit v0.5.0 with its existing local state/media;
no volume or image switch is part of this phase. Future Tuwunel native R2 media
requires a separate rehearsal and authorized upgrade. Archive mirroring is
restricted to explicitly mapped unencrypted archive rooms; encrypted rooms
are excluded. Collaborative ODT editing uses oCIS/Collabora WOPI, not Matrix.
Matrix (conduwuit homeserver) is the team/internal chat plane. Stream viewer chat stays on the S5 hub (docs/design/streaming-architecture.md §3). Division of labor:
| Plane | Tech | Who it serves |
|---|---|---|
| Team chat, DMs, bridged Telegram channels | Matrix (conduwuit + bridges) | editors, reviewers, admins |
| Stream viewer chat | S5 hub → /realtime WS | Opticast app + control room |
| Review threads (per-post) | Tactical Media Broadcast Hub native (WP5.1) | editorial workflow |
Deploy
cp infra/matrix/.env.example infra/matrix/.env— setMATRIX_SERVER_NAME(permanent!) and a registration token- Point your reverse proxy at :6167 with HTTPS (federation requires valid TLS)
docker compose -f infra/matrix/docker-compose.yml up -d- First account: temporarily set
MATRIX_ALLOW_REGISTRATION=true, register the admin via any Matrix client (Element), then lock it back. Share the token for invites.
Rich text
Conduwuit supports formatted bodies natively — clients (Element et al.) give Markdown, media, reactions, edits, replies, threads. As good as Telegram out of the box, plus E2E encryption.
Telegram bridge (feeds WP15 — join channels & amplify)
mautrix-telegram runs alongside. One-time setup:
docker compose run --rm mautrix-telegram— first boot writes/data/config.yaml; set homeserver + bridge admin- In Matrix, DM
@telegrambot:your-server, sendlogin+ the phone/code → your Telegram account is bridged - Telegram channels you join appear as Matrix rooms; posts arrive as rich messages. The WP15 grabber (phase 2) reads those rooms → archive → review → amplify — no custom MTProto client needed, and the bridge is the battle-tested path
- Two-way: replying in the Matrix room posts to Telegram (subject to the same rights/attribution rules as S6)
Branding
Element Web (if self-hosted as the client) accepts custom CSS — the same propagation rule as PeerTube: repo is the source of truth, a sync script pushes (accent #FF1610 on black, solid disk mark) after any brand change. Native clients keep their own themes; brand consistency applies to web surfaces.
Tactical Media Broadcast Hub integration points (follow-ups)
- Inbox screen: swap fixtures for Matrix client-sdk (matrix-js-sdk) — DMs + team rooms render in-app
- Review notifications: WP5.1 posts approval-needed events into a team room
- WP15: grabber consumes bridged Telegram rooms (above)