VNOX-Server/docs/06-roadmap.md

214 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Roadmap
---
## Phase 1 — MVP
Goal: a working voice + chat system you can actually use.
### Server
- [x] LNEx v1 protocol spec
- [x] Gateway: auth, sessions, channels, text chat
- [x] Voice node: UDP relay (jitter buffer code exists, not wired into relay yet)
- [x] SQLite storage: message history, user records
- [x] Docker + systemd deployment ([Dockerfile](../Dockerfile), [docker-compose.yml](../docker-compose.yml))
- [x] config.toml reference ([configuration.md](../03-server/configuration.md), [dev/README.md](../../dev/README.md))
### Client
- [x] Identity: keypair generation, Ed25519 auth
- [x] Node switcher — bookmarks with save/remove
- [x] Channel list: text + voice
- [x] Text chat
- [x] Voice chat: push-to-talk, VAD, always-on modes
- [x] Noise suppression (RNNoise, feature-gated)
- [x] Settings: voice, audio, network, identity, keybinds
- [x] Latency indicator
### Protocol
- [x] Packet format finalized (JSON framing in Phase 1)
- [x] Error codes documented
---
## Phase 1.1 — Hardening & Core Features
Goal: production-safe for small private communities.
### Encryption (Priority 1) ✅ DONE
- [x] Replace plaintext with ChaCha20-Poly1305 on all packets
- [x] X25519 ECDH key exchange during HELLO handshake
- [x] HKDF-SHA256 key derivation (client→server / server→client keys)
- [x] Encrypted TCP (control) + UDP (voice) paths
- [x] Forward secrecy via ephemeral session keys
- [x] Session nonce management for replay protection
All traffic is now encrypted. See [features/encryption.md](05-features/encryption.md).
### Direct Messages ✅ DONE
- [x] New packet type: `DM_MESSAGE` (separate from `CHAT_MESSAGE`)
- [x] Gateway routing: create private DM channel on first message
- [x] DB schema: `direct_messages` + `dm_messages` tables
- [x] UI: DM list in sidebar (like Discord)
- [x] Unread count tracking
- [x] Message sync to both participants
- [x] DM history search bar
See [features/direct-messages.md](05-features/direct-messages.md). **Backend and UI complete.**
### Private Mode ✅ DONE
- [x] Config flag: `[federation] enabled = false` / `[server] mode = "private"`
- [x] Server cannot see or reach other servers when private
- [x] No federation packets sent
- [x] Makes VNOX safe for single-server deployment (OwnCord-style)
### UI Refresh
- [x] Evaluate Slint vs improving egui design system — **staying on egui**
- [x] Custom dark theme with accent color support (#E67E22 orange)
- [x] Redesigned channel list and user bar
- [x] Consistency pass across all settings panels
- [ ] Slint migration plan exists at `docs/superpowers/plans/2026-05-31-slint-migration.md` (deferred to Phase 2+)
### Client Polish
- [x] Audio device labels in settings (live cpal enumeration)
- [x] Opus bitrate slider (8–128 kbps)
- [x] Jitter buffer size and adaptive mode
- [x] Per-user volume control (client-side mix)
- [x] Keybind recording UI (capture keystroke, not type string)
---
## Phase 1.2 — Community Foundation
Goal: guilds, roles, permissions, presence layer.
### Community Model (Priority 1) ✅ DONE
- [x] Guild system: create, list, delete, settings
- [x] Role system with permission bits (u64)
- [x] Permission resolution (owner → admin → roles → channel overrides)
- [x] Invite system: permanent and temporary
- [x] Guild member management: join, leave, kick
- [x] Audit log for admin actions
- [x] Invite accept popup dialog
- [x] Guild header with member count and Leave button
### Direct Messages UI ✅ DONE
- [x] DM list in sidebar (per-user, not per-guild)
- [x] DM conversation panel (similar to channel chat)
- [x] Unread badges and notification dots
- [x] Search DM history
- [x] Per-conversation volume controls
### Presence System ✅ DONE
- [x] Status types: ONLINE, IDLE, DO_NOT_DISTURB, OFFLINE, INVISIBLE
- [ ] Activity status: playing, listening, watching, streaming — **deferred**
- [ ] Custom status text — **deferred**
- [x] Broadcast on login/logout
- [x] Clickable status cycler in user bar
### Friends System ✅ DONE
- [x] Friend requests
- [x] Friends list with Online / All / Pending / Blocked tabs
- [x] Pending count badge on Friends tab
- [x] Block list (placeholder UI)
- [x] Friend notifications (incoming request badge)
- [x] Add Friend popup with user-id input
- [x] Per-friend DM shortcut and remove button
### UI Refresh ✅ DONE
- [x] Sidebar restructure for guilds + DMs
- [x] Guild switcher (vertical icons on left)
- [x] Role color display in user mentions
- [x] Category collapsing
- [x] Right-hand member list panel (online/offline per channel)
---
## Phase 1.3 — Advanced Features
Goal: typing indicators, read receipts, typing states.
### Typing & Read Status ✅ DONE
- [x] Typing indicators in text channels
- [x] Read receipts per message
- [x] Last read pointer storage
- [x] Multi-user typing indicator ("Alice and Bob are typing...")
### Voice Improvements ✅ DONE
- [x] Speaking indicators with volume levels
- [x] Voice activity detection (local visualization — green dot/border on speaking)
- [x] Adaptive bitrate negotiation
- [x] Voice activity banner ("you are talking" / "someone is talking")
### Client Polish ✅ DONE
- [x] Message reactions (emoji)
- [x] Message editing (with "(edited)" marker)
- [x] Message deletion with confirmation
- [x] Per-user volume control (client-side mix)
---
## Phase 2
Goal: scalability, federation preparation, advanced security.
### Server
- [ ] TLS 1.3 on TCP control plane
- [ ] Permission system enforcement in gateway
- [ ] Rate limiting refinement
- [ ] PostgreSQL backend (sqlx support ready, config not exposed yet)
- [ ] Prometheus metrics on gateway and voice-node
- [ ] Gateway admin API (HTTP endpoint)
- [ ] Identity keypair encryption at rest (Argon2id passphrase)
### Protocol
- [ ] Protobuf schemas (replacing JSON)
- [ ] E2EE for direct messages (optional)
- [ ] E2EE for private channels (opt-in)
- [ ] Voice regions: Warsaw, Frankfurt, Amsterdam, London, New York, Singapore
### Client
- [ ] Seed phrase backup UI
- [ ] Keyfile export / import
- [ ] Per-user volume control (client-side mix)
- [ ] Overlay: Windows, Linux X11, speaking indicators, mute/deafen state
### Federation Foundation
- [ ] LNEx federation protocol spec
- [ ] Node-to-node handshake and mutual auth
- [ ] Federation discovery (DNS SRV)
### Plugins Foundation
- [ ] Plugin runtime (Deno or QuickJS — decision required)
- [ ] WebSocket RPC API v1
- [ ] Plugin manifest and permissions
- [ ] Example plugins: moderation bot, music bot
---
## Phase 3
Goal: federation ecosystem and mobile clients.
### Federation
- [ ] Text chat bridging between nodes
- [ ] Voice relay across nodes
- [ ] Channel bridging
- [ ] Federation admin controls (trust levels, denylist)
- [ ] Shared user directory
### Plugins Ecosystem
- [ ] Plugin installer in client
- [ ] Community plugin registry (basic)
- [ ] Advanced plugins: relay-switcher, analytics, moderation suite
### Mobile
- [ ] Stack decision (Flutter / React Native / Native)
- [ ] MVP: connect, text, voice, push-to-talk
- [ ] Identity import from desktop (QR / keyfile)
---
## Future ideas (unscheduled)
Spatial audio for games, adaptive bitrate relay, distributed mesh,
VNOX SDK (Rust → TypeScript → Python), offline message queue.