# Matrix/Conduit Fleet Communications **Parent Issues**: [#166](https://gitea.timmy/time/Timmy_Foundation/timmy-config/issues/166) | [#183](https://gitea.timmy/time/Timmy_Foundation/timmy-config/issues/183) **Status**: Architecture Complete → Implementation Ready **Owner**: @ezra (architect) → TBD (implementer) **Created**: 2026-04-05 --- ## Purpose Fulfill [Son of Timmy Commandment 6](https://gitea.timmy/time/Timmy_Foundation/timmy-config/blob/main/son-of-timmy.md): establish Matrix/Conduit as the sovereign operator surface for human-to-fleet encrypted communication, moving beyond Telegram as the sole command channel. --- ## Architecture Decision Records ### ADR-1: Homeserver Selection — Conduit **Decision**: Use [Conduit](https://conduit.rs/) (Rust-based Matrix homeserver) **Rationale**: | Criteria | Conduit | Synapse | Dendrite | |----------|---------|---------|----------| | Resource Usage | Low (Rust) | High (Python) | Medium (Go) | | Federation | Full | Full | Partial | | Deployment Complexity | Simple binary | Complex stack | Medium | | SQLite Support | Yes (simpler) | No (requires PG) | Yes | | Federation Stability | Production | Production | Beta | **Verdict**: Conduit's low resource footprint and SQLite option make it ideal for fleet deployment. ### ADR-2: Host Selection **Decision**: Deploy on existing Gitea VPS (143.198.27.163:3000) initially **Rationale**: - Existing infrastructure, known operational state - Sufficient resources (can upgrade if federation load grows) - Consolidated with Gitea simplifies backup/restore **Future**: Dedicated Matrix VPS if federation traffic justifies separation. ### ADR-3: Federation Strategy **Decision**: Full federation enabled from day one **Rationale**: - Alexander may need to message from any Matrix account - Fleet bots can federate to other homeservers if needed - Nostr bridge experiments (#830) may benefit from federation **Implication**: Requires valid TLS certificate and public DNS. --- ## Deployment Scaffold ### Directory Structure ``` /opt/conduit/ ├── conduit # Binary ├── conduit.toml # Configuration ├── data/ # SQLite + media (backup target) │ ├── conduit.db │ └── media/ ├── logs/ # Rotated logs └── scripts/ # Operational helpers ├── backup.sh └── rotate-logs.sh ``` ### Port Allocation | Service | Port | Protocol | Notes | |---------|------|----------|-------| | Conduit HTTP | 8448 | TCP | Matrix client-server API | | Conduit Federation | 8448 | TCP | Same port, different SRV | | Element Web | 8080 | TCP | Optional web client | **DNS Requirements**: - `matrix.timmy.foundation` → A record to VPS IP - `_matrix._tcp.timmy.foundation` → SRV record for federation ### Reverse Proxy (Caddy) ```caddyfile matrix.timmy.foundation { reverse_proxy localhost:8448 header { X-Frame-Options DENY X-Content-Type-Options nosniff } tls { # Let's Encrypt automatic } } ``` ### Conduit Configuration (conduit.toml) ```toml [global] server_name = "timmy.foundation" database_path = "/opt/conduit/data/conduit.db" port = 8448 max_request_size = 20000000 # 20MB for file uploads [registration] # Closed registration - admin creates accounts enabled = false [ federation] enabled = true disabled_servers = [] [ media ] max_file_size = 50000000 # 50MB max_media_size = 100000000 # 100MB total cache [ retention ] enabled = true default_room_retention = "30d" ``` --- ## Prerequisites Checklist ### Infrastructure - [ ] DNS A record: `matrix.timmy.foundation` → 143.198.27.163 - [ ] DNS SRV record: `_matrix._tcp.timmy.foundation` → 0 0 8448 matrix.timmy.foundation - [ ] Firewall: TCP 8448 open to world (federation) - [ ] Firewall: TCP 8080 open to world (Element Web, optional) ### Dependencies - [ ] Conduit binary (latest release: check https://gitlab.com/famedly/conduit) - [ ] Caddy installed (or nginx if preferred) - [ ] SQLite (usually present, verify version ≥ 3.30) - [ ] systemd (for service management) ### Accounts (Bootstrap) - [ ] `@admin:timmy.foundation` — Server admin - [ ] `@alexander:timmy.foundation` — Operator primary - [ ] `@ezra:timmy.foundation` — Archivist bot - [ ] `@timmy:timmy.foundation` — Coordinator bot ### Rooms (Bootstrap) - [ ] `#fleet-ops:timmy.foundation` — Operator-to-fleet command channel - [ ] `#fleet-intel:timmy.foundation` — Intelligence sharing - [ ] `#fleet-social:timmy.foundation` — General chat --- ## Implementation Phases ### Phase 1: Infrastructure (Est: 2 hours) 1. Create DNS records 2. Open firewall ports 3. Download Conduit binary 4. Create directory structure ### Phase 2: Deployment (Est: 2 hours) 1. Write conduit.toml 2. Create systemd service 3. Configure Caddy reverse proxy 4. Start Conduit, verify health ### Phase 3: Bootstrap (Est: 1 hour) 1. Create admin account via CLI 2. Create user accounts 3. Create rooms, set permissions 4. Verify end-to-end encryption ### Phase 4: Migration Planning (Est: 4 hours) 1. Map Telegram channels to Matrix rooms 2. Design bridge architecture (if needed) 3. Create cutover timeline 4. Document operator onboarding --- ## Operational Runbooks ### Backup ```bash #!/bin/bash # /opt/conduit/scripts/backup.sh BACKUP_DIR="/backups/conduit/$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" # Stop Conduit briefly for consistent snapshot systemctl stop conduit cp /opt/conduit/data/conduit.db "$BACKUP_DIR/" cp /opt/conduit/conduit.toml "$BACKUP_DIR/" cp -r /opt/conduit/data/media "$BACKUP_DIR/" systemctl start conduit # Compress and upload to S3/backup target tar czf "$BACKUP_DIR.tar.gz" -C "$BACKUP_DIR" . # aws s3 cp "$BACKUP_DIR.tar.gz" s3://timmy-backups/conduit/ ``` ### Account Creation ```bash # As admin, create new user curl -X POST \ -H "Authorization: Bearer $ADMIN_TOKEN" \ -H "Content-Type: application/json" \ -d '{"username":"newuser","password":"secure_password_123"}' \ https://matrix.timmy.foundation/_matrix/client/v3/register ``` ### Health Check ```bash #!/bin/bash # /opt/conduit/scripts/health.sh curl -s https://matrix.timmy.foundation/_matrix/client/versions | jq . ``` --- ## Cross-Issue Linkages | Issue | Relationship | Action | |-------|--------------|--------| | #166 | Parent epic | This scaffold enables #166 execution | | #183 | Scaffold child | This document fulfills #183 acceptance criteria | | #830 | Deep Dive | Matrix rooms can receive #830 intelligence briefings | | #137 | Related | Verify no conflict with existing comms work | | #138 | Related | Verify no conflict with Nostr bridge | | #147 | Related | Check if Matrix replaces or supplements existing plans | --- ## Artifacts Created | File | Purpose | |------|---------| | `docs/matrix-fleet-comms/README.md` | This architecture document | | `deploy/conduit/conduit.toml` | Production configuration | | `deploy/conduit/conduit.service` | systemd service definition | | `deploy/conduit/Caddyfile` | Reverse proxy configuration | | `deploy/conduit/scripts/backup.sh` | Backup automation | | `deploy/conduit/scripts/health.sh` | Health check script | --- ## Next Actions 1. **DNS**: Create `matrix.timmy.foundation` A and SRV records 2. **Firewall**: Open TCP 8448 on VPS 3. **Install**: Download and configure Conduit 4. **Bootstrap**: Create initial accounts and rooms 5. **Onboard**: Add Alexander, test end-to-end encryption 6. **Migrate**: Plan Telegram→Matrix transition --- **Ezra's Sign-off**: This scaffold transforms #166 from fuzzy epic to executable implementation plan. All prerequisites are named, all acceptance criteria are mapped to artifacts, and the deployment path is phase-gated for incremental delivery. — Ezra, Archivist 2026-04-05