🔒
Restricted page
Roadmap is limited to superadmins and leadership. If you believe you should have access, ask a superadmin to check your role or team tags.
Back to OfficeDevelopment Roadmap
& Architecture
The build plan to take Roam from a deploy boilerplate to a live presence-first virtual office — and the tech stack that powers it.
Development Roadmap
8 phases · presence-firstPhase 0
Foundation & Delivery
Done- CI/CD: GitHub Actions builds app + API images → Amazon ECR → Coolify pull-and-restart (
restart?latest=true) Shipped - Deploy consolidated into one workflow (single Coolify trigger + concurrency group) to stop the parallel-workflow race Shipped
- Edge routing via Caddy;
main→ staging at roam.recruitai.studio Shipped
GitHub ActionsDockerAWS ECRCoolifyCaddy
Phase 1
Identity & Live Presence
Done- Auth, orgs, floors & rooms data model Shipped
- Bird's-eye office map (2D Canvas) with avatars & status, home-seat vs. ephemeral room-visit, 8-desk cap + overflow, WhatsApp deep links Shipped
- Realtime presence over WebSockets (who's online / where / talking), with
last_seen_at"last online" tracking for the Team directory Shipped - Superadmin "Edit layout" mode on the 2D floor: drag-to-reassign home seats (server-persisted); room rename/reorder saved to localStorage only for now Shipped
Vanilla JSWebSocket (ws)PostgresExpress
Phase 2
Drop-in Audio & Video
Planned- Click-to-talk, knock-to-join, audio-first drop-ins
- Video conference rooms + screen share via an SFU
WebRTCLiveKit / mediasoupTURN/STUN
Phase 3
Chat — AInbox
In progress- DMs, group chats (incl. auto-provisioned per-project team chat), one level of reply threading Shipped
- Custom folders & message bookmarking Planned — not yet built (message pinning —
POST /:id/messages/:mid/pin— has since shipped separately, see below) - Message search (case-insensitive, not yet full-text/tsvector) & desktop notifications for new messages Shipped
- 7-day default history window with "load older" pagination, image attachments (client-compressed, stored in Postgres, pencil/pin annotation), participant-only access on every conversation route Shipped
- Leave-a-group, per-participant archiving, conversation-list privacy scoping, unread badges (nav + rail + widget + per-conversation), and a self-healing live feed (reconnect + poll) Shipped
- Message edit/delete, emoji reactions, @mentions, message pinning, read receipts, typing indicators, and user-reported-message moderation (report → admin Reports queue) Shipped
- Link previews — SSRF-guarded server-side URL unfurl (fetch a shared link's title/description/image server-side, never client-side, with private-IP/redirect guarding) rendered as a preview card in chat Planned — not yet built
WebSocketPostgres (BYTEA)Web Notifications API
Phase 4
AI Layer — Magic Minutes & On-It
In progress- Meeting transcription → AI summaries posted to chat Planned — no audio/STT pipeline yet
- On-It assistant: reminders, scheduling, action items Planned — not built as a standalone assistant
- Text-based AI helpers (DeepSeek-powered): office concierge, leave assistant, admin activity digest — all participant/role-gated Shipped (the chat-transcript "Summarize" button was pulled from the chat UI this session; the endpoint remains)
DeepSeek APIWhisper / STT (planned)Vector store (planned)
Phase 5
Scale, Mobile & Integrations
In progress- Theater / all-hands, recordings (Magicast), mobile app
- GitHub / Figma surfacing on the map; observability & autoscaling
- Per-project Miro boards (multi-board, restricted creator) & Google Calendar/Meet integration (per-member OAuth, encrypted tokens, auto-refresh, real Calendar API meeting scheduling) Shipped
- Platform hardening: app-wide auto-save on field-exit, site-wide error reference codes (ERR-XXXXXX), a Status page with uptime chart + downtime log, and two-way Clicking sync scaffolding Shipped
React NativeMiro APIGoogle Calendar APIClicking
Phase 6
Consistency & Office Authoring
Planned- Form-validation consistency pass — one shared validation/error pattern across every create/edit form (required fields, inline messages, disabled-until-valid) Planned — not yet built
- Office room-sizing + a 16×16-grid office layout editor — author room shapes/positions on a real grid, superseding today's localStorage-only room label/order overrides (server-persisted layout) Planned — not yet built
Vanilla JSCanvasPostgres
Phase 7
Security Hardening, Research & Platform Reuse
In progress- Three sequential Fable-5-model code reviews — server security, chat frontend, and projects/admin/shared frontend+deploy — found and fixed 2 CRITICAL, 5 HIGH, ~14 MEDIUM, and ~20 LOW/suspected findings across authentication, WebSocket authorization, XSS, rate-limiting, and cross-project data leaks; every finding fixed and verified Shipped
- Market-research comparison against ro.am, Gather, Kumospace, and other virtual-office tools, with per-area copy/skip/build recommendations for Roam (
docs/competitor-research.md,docs/roam-features.md) Shipped - iOS/Android mobile app strategy — completed as a planning document; no mobile app has been built yet Shipped (planning only)
- CSS / design-system extraction — pulling
roam.css's tokens and shared components into a form reusable across other 5 Miles Lab platforms, not just this app In progress - Commercializing this platform for other companies — business/packaging plan Planned — not yet written
Fable 5Security reviewroam.cssDesign system
Tech Architecture
request & media flow, top → bottom🖥️Clientbrowser · mobile
Web app
React / Next.js, TypeScript
Office map
Canvas / SVG, Zustand state
Media client
WebRTC, getUserMedia
Mobile
React Native (later)
▼
🛡️EdgeTLS · routing
Caddy reverse proxy
Auto-HTTPS, routes on
edge Docker networkCDN / static
Nginx for app shell & assets
▼
⚡Realtimepresence & media
Presence gateway
WebSocket fan-out, heartbeats
SFU
LiveKit / mediasoup audio+video
TURN / STUN
NAT traversal for WebRTC
▼
🧩Application servicesREST / GraphQL
Core API
Node (NestJS) / Go · auth, orgs, rooms
Chat service
AInbox messaging & threads
AI service
Transcription & summary jobs
▼
🗄️Data & statepersistence
Postgres
Users, orgs, rooms, messages
Redis
Presence, pub/sub, sessions
S3
Recordings, uploads, assets
OpenSearch
Chat & minutes search
▼
🤖AIMagic Minutes · On-It
Speech-to-text
Whisper / streaming STT
DeepSeek API
Concierge, leave assistant, activity digest (live today)
Vector store
Retrieval over meeting history
☁️Infrastructure & deliverycross-cutting
AWS EC2 (arm64)
Docker Compose host
ECR
Container registry
GitHub Actions
Build → push → SSH deploy
CloudWatch
Logs & metrics
Roadmap is presence-first: ship the live map (Phase 1) before media (Phase 2), since presence is the signature feature and the hardest realtime piece. Stack choices are indicative and can flex (e.g. LiveKit vs. mediasoup) as load and team familiarity dictate.