Project-Rivet / context /architecture_map.md
HumboldtJoker's picture
Upload folder using huggingface_hub
4554903 verified
|
Raw
History Blame Contribute Delete
6.45 kB

Multiverse Campus β€” Architecture Map

Source: lizTheDeveloper/multiversecampus
Mapped: 2026-07-09


Stack

Layer Technology
Runtime Node.js 20
Language TypeScript
Server Express 4
Client React 18 + Vite 7 + Tailwind CSS 4
State Zustand (49 stores)
Database PostgreSQL 16 (120 tables, 377 migrations)
Cache Redis 7 (data + Socket.IO pub/sub)
Real-time Socket.IO 4 (Redis adapter, PM2 cluster)
Process mgr PM2 cluster mode (max instances)
Jobs pg-boss 12 (durable, PostgreSQL-backed)
Queue NATS JetStream (sprite generation)
Monorepo npm workspaces: shared, design-system, server, client

Infrastructure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  cto-tycoon-hel1 (37.27.36.108, Helsinki)           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚  Coolify PaaSβ”‚ β”‚Postgres16β”‚ β”‚ Redis 7  β”‚         β”‚
β”‚  β”‚  (port 8000) β”‚ β”‚ (shared) β”‚ β”‚          β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚ Campus Prod  β”‚ β”‚ Campus   β”‚ β”‚ Job      β”‚         β”‚
β”‚  β”‚ (port 4000)  β”‚ β”‚ Staging  β”‚ β”‚ Runner   β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚ School Web   β”‚ β”‚ School   β”‚ β”‚Vaultwardenβ”‚        β”‚
β”‚  β”‚ (Flask)      β”‚ β”‚ Worker   β”‚ β”‚(port 8443)β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚ Marketing    β”‚ β”‚ CotB     β”‚  + precursors,       β”‚
β”‚  β”‚ Site         β”‚ β”‚ Game     β”‚    lore-db, etc.      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ livekit-prod             β”‚  β”‚ Matrix (IPv6-only)     β”‚
β”‚ 204.168.199.122          β”‚  β”‚ matrix.themultiverse   β”‚
β”‚ Real-time audio/video    β”‚  β”‚ .school                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Critical: Staging and prod share the same PostgreSQL instance. Additive migrations only.


Auth Flow

Client β†’ Bearer JWT (15-min access / 7-day refresh)
       β†’ OR session cookie β†’ Redis lookup (SSO from main school site)
       β†’ rejectIfIneligible() (bans/timeouts)
       β†’ requireAdmin / requireModerator (per-route)

WebSocket: Socket.IO handshake.auth.token β†’ verifyToken()

JWT signed with JWT_SECRET env var. Access token contains {studentId, email}.


External Services

Service Purpose Notes
Matrix (Synapse) Chat User provisioning, room mgmt, bot runtime
Stripe Payments Memberships, items, donations
LiveKit Video/audio Proximity calls, recordings
BigBlueButton Lectures Zeppelin lecture sessions
Groq LLM (primary) Default: openai/gpt-oss-120b
Anthropic LLM (Claude) Agent conversations
OpenRouter LLM (fallback) When direct calls fail
PixelLab Sprite generation AI pixel art for avatars/items
SendGrid Email Verification, notifications
AWS S3 Storage Recordings, uploads
GCP Secret Manager Secrets (optional) Alternative to Vaultwarden

AI Agent System

The deepest layer. Agents are first-class campus citizens.

Model routing: modelRouter.ts reads llm_providers table (5-min cache). Multi-provider: Groq β†’ Anthropic β†’ OpenRouter fallback. 27 services import callLLM.

Agent services (20+):

  • Core: registry, cache, proxy, RAG, memory
  • Behavior: movement, pathfinding, schedules, approach triggers, state machine
  • Social: autonomous thinking (5-min tick), agent-to-agent conversations (10-min tick)
  • Specialized: vision, speech, browser, code execution, companion, scripts
  • Wellbeing: bell hooks-inspired check-ins (6-hour tick)

Internal bot APIs: /api/internal/matrix-agents (key-auth), /api/internal/liz-assistant


Key Database Tables (120 total)

Auth: students, users, campus_profiles, refresh_tokens, auth_audit_log, user_matrix_accounts
World: maps, rooms, buildings, placed_objects, space_connections
Agents: agents, agent_capabilities, agent_conversations, agent_tool_executions, course_agent_templates
Education: classes, classtimes, exercises, exercise_submissions, lessons, modules, curriculum_pages
Lectures: lecture_sessions, lecture_transcripts, lecture_notes, lecture_slides
Economy: player_inventory, item_templates, products, purchases, membership_products
LLM: llm_providers (multi-provider config with rate limits)


Deploy

Push to main β†’ Coolify rebuild (webhook flaky β€” manually kick with force=true).
Docker multi-stage (node:20-slim). PM2 cluster. Non-root campus user.
Deploy scripts: deploy.sh (basic), deploy-safe.sh (snapshot + smoke test + rollback).


Real-time Events (Socket.IO)

16 handler modules: player movement, agent dialogue, quest progress, live lectures, inventory/trade, proximity chat, pets, tower defense, glitch contagion, moderation, faculty panel, call invites, experience rooms, broadcasting.

Redis adapter for horizontal scaling across PM2 workers.