Spatial video lounge for informal, hallway-style interactions.
개요
Spatial video lounge for informal online and hybrid events — move freely in a shared 2D space with proximity-based audio. Built for Eventyay integration and self-hosted Jitsi. docs.loungemesh.com — built with TypeDoc + VitePress, deployed via GitHub Actions to GitHub Pages. See Publishing docs. - : Move freely as an avatar in a 2D room with real-time audio attenuation computed off-thread via Web Audio API and Web Workers. - : Infinite canvas with pen, eraser, shapes, color palettes, pan/zoom navigation, and live multi-user synchronization. - : Live collaborative markdown notes with optional templates, host broadcasting, and persistent state. - : Create instant single/multi-choice polls, collect anonymous votes, and publish real-time results. - : Spotlight speakers on stage with elevated video resolution and full-screen desktop screensharing. - : Configurable host claiming, moderator promotion, room join PIN protection, lobby admission, and participant permission grants.
README
LoungeMesh
Spatial video lounge for informal online and hybrid events — move freely in a shared 2D space with proximity-based audio. Built for Eventyay integration and self-hosted Jitsi.
Documentation: docs.loungemesh.com — built with TypeDoc + VitePress, deployed via GitHub Actions to GitHub Pages. See Publishing docs.
Features
- Spatial Video & Audio: Move freely as an avatar in a 2D room with real-time audio attenuation computed off-thread via Web Audio API and Web Workers.
- Collaborative Whiteboard: Infinite canvas with pen, eraser, shapes, color palettes, pan/zoom navigation, and live multi-user synchronization.
- Shared Session Notes: Live collaborative markdown notes with optional templates, host broadcasting, and persistent state.
- Live Polling: Create instant single/multi-choice polls, collect anonymous votes, and publish real-time results.
- Stage Presentation Mode: Spotlight speakers on stage with elevated video resolution and full-screen desktop screensharing.
- Room Access Control: Configurable host claiming, moderator promotion, room join PIN protection, lobby admission, and participant permission grants.
- Event Scheduling & Calendar Sync: Schedule rooms with recurring rules and synchronize events directly to Google Calendar with AES-256 encrypted OAuth.
- Ultra-Low Resource Scaling:
- Spatial viewport culling: only streams video for visible or on-stage peers; zero video bandwidth consumed for off-screen peers.
- Efficient resolution budgeting: 360p avatar camera, 720p @ 15–30 fps screenshare.
- Single-roundtrip
/api/meetings/state/:roomName/initendpoint bundling room state, role verification, notes, polls, whiteboard, and background. - Nginx rate-limiting (50 r/s burst 100) with client real-IP forwarding (
X-Forwarded-For). - Prosody rate limiting (128 kb/s) and expanded stanza buffer (25 unacked stanzas).
- Database connection pooling configured for high concurrency.
Architecture & Stack
| Layer | Technologies |
|---|---|
| Frontend SPA | Vue 3, TypeScript, Vite, Pinia, Web Audio API, Web Workers |
| Media Engine | lib-jitsi-meet (headless WebRTC, no iframe API) |
| Backend API | Node.js, Express, TypeScript, Prisma ORM, PostgreSQL, Redis |
| Media Server | Jitsi Videobridge (JVB), Prosody XMPP, Jicofo |
| Infrastructure | Docker Compose, Nginx (reverse proxy, Brotli/gzip compression, CSP headers) |
Quick Start
Option 1: Full Docker Stack (Recommended)
Spins up the full stack: LoungeMesh SPA, Backend API, PostgreSQL, Redis, and Jitsi media containers.
# 1. Install dependencies and initialize environment
npm run setup
# 2. Start all Docker containers
npm run docker:up
- LoungeMesh: http://127.0.0.1:8780
- Jitsi Meet: http://127.0.0.1:8001
Note: Use
127.0.0.1for local smoke testing; some systems resolvelocalhostto IPv6 first which may reset mapped container ports.
Option 2: Local Development Mode
Run the frontend SPA and backend API server locally with hot-reloading:
# Install root and backend dependencies
npm install
npm --prefix server install
# Initialize .env file (auto-detects local LAN IP)
npm run setup
# Run backend migrations
npm --prefix server run prisma:migrate -- --name init
# Start development servers
npm run dev # Frontend Vite dev server (port 5173)
npm --prefix server run dev # Backend Express API server (port 5000)
Scripts Reference
| Command | Description |
|---|---|
npm run dev |
Run Vite development server for the Vue SPA |
npm run build |
Build production SPA bundle to dist/ |
npm test |
Run Vitest unit tests with 100% code coverage enforcement |
npm run typecheck |
Run vue-tsc type-check across .ts and .vue files |
npm run docs:dev |
Run local VitePress documentation server |
npm run docs:build |
Build TypeDoc API reference and VitePress documentation |
npm run docs:preview |
Preview built documentation site locally |
npm run test:e2e |
Run Playwright end-to-end integration tests |
npm run setup |
Generate .env from template and detect LAN IP (loungemesh.sh dev) |
npm run docker:up |
Launch full stack in Docker Compose |
npm run deploy |
Rebuild and deploy Docker stack on server (loungemesh.sh deploy) |
npm run fix:jvb |
Re-advertise public IP on a running JVB instance |
Production server provisioning uses ./scripts/loungemesh.sh bootstrap — see Deployment Guide.
Contributor & AI Agent Workflow (Pre-PR & Commit Requirements)
[!IMPORTANT] Mandatory Quality Gates Before Committing or Submitting a Pull Request:
- All READMEs & AI Skills Must Be Updated: Whenever introducing or modifying user flows, features, or architectural components, all README files (
README.md,server/README.md) and all AI skills in.agents/skills/MUST be updated to reflect the newer user flows, API contracts, and testing instructions.- Vitest 100% Code Coverage: Run
npm test— all test files must pass with strict 100% statement, branch, function, and line coverage.- E2E Integration Testing: Run
npm run build && npm run test:e2e— all Playwright end-to-end integration tests must pass cleanly.- Typechecks & Server Builds:
npm run typecheckandnpm --prefix server run buildmust compile with zero errors.
1. Mandatory Pre-Commit & Pre-PR Testing
- Vitest Unit Test Suite & Coverage:
Must pass across all test files with 100% statement, branch, function, and line coverage enforced bynpm test@vitest/coverage-v8. - E2E Integration Tests:
Playwright smoke and integration tests must pass cleanly.npm run build && npm run test:e2e - TypeScript & Server Checks:
Zero TypeScript compiler errors in both frontend (npm run typecheck npm --prefix server run buildvue-tsc) and backend (tsc). - Documentation Build:
VitePress documentation and TypeDoc API references must compile with zero broken links or markdown errors.npm run docs:build
2. Documentation & Agent Skills Maintenance
Whenever introducing or modifying user flows, features, or architectural components:
- Update All READMEs: Update the root
README.md,server/README.md, and relevant guides indocs-site/(e.g.,features.md,scaling.md,architecture.md) with the newer user flows, API payloads, or config flags. - Update All AI Agent Skills: Update the corresponding skill definition in
.agents/skills/(e.g.,loungemesh-features-and-testing,loungemesh-architecture,loungemesh-eventyay-integration, etc.) so all AI models (Antigravity, Gemini, Claude, Cursor, Copilot) remain aligned on the newest user flows, contracts, and security patterns. - Keep Agent Rules Synchronized: Ensure
AGENTS.md,GEMINI.md,CLAUDE.md,.cursorrules, and.github/copilot-instructions.mdreflect any updated development directives.
License
See LICENSE.md.
추천 도구
다른 키워드를 입력하거나 필터를 제거해 보세요.
설치
npx skillfish add fossasia/loungemesh