LiveKit Dashboard
Vibe Coded version for LiveKit Dashboard
AI-Agent Assisted
Tier 2README
LiveKit Dashboard
A stateless, self-hosted, server-side rendered (SSR) dashboard for managing a private LiveKit server. Built with FastAPI and Jinja2 templates, using only the LiveKit Python SDK for real-time server management.
β¨ Features

- π― Stateless Architecture - No database, no Redis, no background workers
- π Simple Authentication - HTTP Basic Auth with one admin account
- π Comprehensive Analytics - Real-time analytics for all LiveKit services
- π Overview Dashboard - Server status, active rooms, participants count, SDK latency
- πͺ Room Management - List, create, close rooms; view participants and tracks
- π« Token Generation - Generate join tokens on-the-fly for testing
- π₯ Participant Control - Kick participants, view tracks, connection stats
- πΉ Egress/Recordings - Start/stop composite egress, view active jobs
- π₯ Ingress Monitoring - Stream analytics and connection quality metrics
- π€ Agent Management - Dispatch agents to rooms, view job status and success rates
- π SIP Integration - (Optional) Manage SIP trunks, outbound/inbound calls
- π Homer SIP Monitor - (Optional) Search and analyse SIP calls captured by Homer/SIPCAPTURE
- π§ Settings View - Read-only configuration and server info
- π§ͺ Sandbox - Token generator with HMAC verification helper
π Analytics Dashboard
Real-time Analytics
- Connection Success Rate - Based on room health and participant status
- Platform Distribution - Web, iOS, Android, React Native client detection
- Connection Types - WebRTC Direct vs TURN Relay analysis
- Session Duration - Live calculation from participant join times
Service-Specific Analytics
- Room Analytics - Active rooms, participant distribution, room sizes
- Egress Analytics - Job status, success rates, storage usage, type distribution
- Ingress Analytics - Stream monitoring, connection quality, bitrate analysis
- Agent Analytics - Dispatch counts, job status breakdown, success rates per agent
- SIP Analytics - Trunk status, call volume, dispatch rules (when enabled)
- Homer SIP Analytics - Per-call flow diagrams, SIP message inspection, session metrics (when enabled)
Visual Components
- Interactive Charts - Chart.js doughnut charts for data distribution
- Responsive Design - Mobile-friendly analytics cards
- Real-time Updates - Live data from LiveKit APIs
- Error Handling - Graceful fallbacks and debug information
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Browser β
β (HTTP Basic Auth) β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β HTTPS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FastAPI + Jinja2 (SSR) β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Routes: Overview, Rooms, Egress, SIP... β β
β βββββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββΌββββββββββββββββββββββββββββ β
β β LiveKitClient (SDK Wrapper) β β
β βββββββββββββββββββ¬ββββββββββββββββββββββββββββ β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββ
β SDK API Calls
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LiveKit Server β
β (Your Private Deployment) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Principles
- Stateless: All data is fetched directly from LiveKit on each request
- SSR: Server-side rendered HTML with Jinja2 templates
- Progressive Enhancement: HTMX for auto-refresh and better UX
- Secure: HTTP Basic Auth, CSRF protection, security headers
- Minimal: No external dependencies beyond FastAPI and LiveKit SDK
π Quick Start
Prerequisites
- Python 3.10 or higher
- A running LiveKit server instance
- LiveKit API key and secret
Option 1: Using Poetry (Recommended)
# Clone the repository
git clone <repository-url>
cd livekit-dashboard
# Install dependencies
make install
# Create and configure .env file
make env-example
# Edit .env with your LiveKit credentials
nano .env
# Run in development mode
make dev
Option 2: Using Docker
# Clone the repository
git clone <repository-url>
cd livekit-dashboard
# Create .env file
cp .env.example .env
# Edit .env with your credentials
nano .env
# Build and run with Docker Compose
make docker-run
# Or manually:
docker-compose up -d
Option 3: Manual Setup
# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Install dependencies
poetry install
# Set environment variables
export LIVEKIT_URL="https://your-livekit-server.com"
export LIVEKIT_API_KEY="your-api-key"
export LIVEKIT_API_SECRET="your-api-secret"
export ADMIN_USERNAME="admin"
export ADMIN_PASSWORD="secure-password"
export APP_SECRET_KEY="$(openssl rand -hex 32)"
# Run the application
poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000
π§ Configuration
All configuration is done via environment variables. Create a .env file:
# LiveKit Server Configuration
LIVEKIT_URL=https://your-livekit-server.com
LIVEKIT_API_KEY=your-api-key
LIVEKIT_API_SECRET=your-api-secret
# Admin Authentication
ADMIN_USERNAME=admin
ADMIN_PASSWORD=changeme
# Application Settings
APP_SECRET_KEY=your-secret-key-for-csrf-and-sessions
DEBUG=false
HOST=0.0.0.0
PORT=8000
# Feature Flags
ENABLE_SIP=false
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
LIVEKIT_URL | β | - | LiveKit server URL (e.g., https://your-server.com) |
LIVEKIT_API_KEY | β | - | LiveKit API key |
LIVEKIT_API_SECRET | β | - | LiveKit API secret |
ADMIN_USERNAME | β | admin | Dashboard admin username |
ADMIN_PASSWORD | β | changeme | Dashboard admin password |
APP_SECRET_KEY | β | - | Secret key for CSRF tokens (generate with openssl rand -hex 32) |
DEBUG | β | false | Enable debug mode |
HOST | β | 0.0.0.0 | Host to bind to |
PORT | β | 8000 | Port to listen on |
ENABLE_SIP | β | false | Enable SIP features |
ENABLE_HOMER | β | false | Enable Homer SIP Monitor tab |
HOMER_URL | β* | - | Homer server base URL (e.g., https://homer.example.com) |
HOMER_USERNAME | β* | - | Homer login username |
HOMER_PASSWORD | β* | - | Homer login password |
* Required when
ENABLE_HOMER=true
π Usage
Accessing the Dashboard
- Open your browser and navigate to
http://localhost:8000 - Enter your admin credentials when prompted
- You'll see the overview dashboard with server stats
Main Features
Overview Page (/)
- View server status and health
- See total rooms and participants
- Monitor SDK latency
- Quick access to recent rooms
Rooms (/rooms)
- List all active rooms
- Create new rooms with custom settings
- View room details and participants
- Close/delete rooms
- Generate join tokens for participants
Egress (/egress)
- List active egress jobs
- Start room composite recordings
- Stop active recordings
- View file outputs and download URLs
Agents (/agents)
- Fleet overview β all agent dispatches grouped by agent name
- Per-agent detail page with job status breakdown and success rate chart
- Dispatch agents to rooms with optional metadata
- Delete active dispatches
- Job-level metrics: running, success, pending, failed counts
SIP (/sip-outbound, /sip-inbound)
- View configured SIP trunks
- Create outbound SIP calls
- View inbound dispatch rules
Homer SIP Monitor (/homer) (optional)
Requires ENABLE_HOMER=true and Homer/SIPCAPTURE credentials in your .env.
- Search calls by Call-ID, From/To user, SIP method, source/destination IP, From/To tag, and time range
- Call-ID fast lookup β searches directly via the transaction endpoint, finding calls regardless of age (bypasses Homer's 200-record cap)
- Call detail with five tabs:
- Flow β ladder diagram with color-coded SIP arrows, port numbers, first SIP line, timestamps, and +offset per message; click any arrow to view the full raw SIP text in a modal
- Messages β sortable table of all SIP messages; expand any row to see the raw SIP headers and SDP body
- Session Info β call parties (UAC/UAS), timing metrics (ringing delay, setup time, disconnect delay, session duration), status badge, and method distribution doughnut chart
- Logs β HEP-LOG entries captured alongside the SIP messages
- Export β download the complete call transaction as a JSON file
Token Generator (/sandbox)
- Generate test tokens for development
- Customize permissions and TTL
- Copy tokens to clipboard
- Quick links to test apps
Settings (/settings)
- View server configuration
- Check connection status
- Review security settings
- See feature flags
π οΈ Development
Available Commands
make help # Show all available commands
make install # Install dependencies
make dev # Run in development mode with auto-reload
make run # Run in production mode
make test # Run tests
make test-cov # Run tests with coverage report
make fmt # Format code with Black
make lint # Lint code with Ruff and mypy
make clean # Clean up cache and temporary files
make docker-build # Build Docker image
make docker-run # Run with Docker Compose
make docker-stop # Stop Docker services
make docker-logs # View Docker logs
Project Structure
livekit-dashboard/
βββ app/
β βββ main.py # FastAPI application entry point
β βββ routes/ # Route handlers
β β βββ overview.py # Overview/dashboard
β β βββ rooms.py # Room management
β β βββ egress.py # Egress/recordings
β β βββ agents.py # Agent dispatch management
β β βββ sip.py # SIP telephony
β β βββ homer.py # Homer SIP Monitor
β β βββ settings.py # Settings page
β β βββ sandbox.py # Token generator
β β βββ auth.py # Authentication
β βββ services/ # Business logic
β β βββ livekit.py # LiveKit SDK wrapper
β β βββ homer.py # Homer JWT auth + API client
β βββ security/ # Security modules
β β βββ basic_auth.py # HTTP Basic Auth
β β βββ csrf.py # CSRF protection
β βββ templates/ # Jinja2 templates
β β βββ base.html.j2 # Base template
β β βββ index.html.j2 # Overview page
β β βββ rooms/ # Room templates
β β βββ egress/ # Egress templates
β β βββ agents/ # Agent templates
β β βββ sip/ # SIP templates
β β βββ homer/ # Homer SIP Monitor templates
β β β βββ index.html.j2 # Search + results page
β β β βββ call.html.j2 # Call detail (5 tabs)
β β βββ settings.html.j2 # Settings page
β β βββ sandbox.html.j2 # Token generator
β βββ static/ # Static assets
β βββ css/ # Stylesheets
β βββ js/ # JavaScript
βββ Dockerfile # Docker image definition
βββ docker-compose.yml # Docker Compose configuration
βββ pyproject.toml # Python dependencies
βββ Makefile # Development commands
βββ README.md # This file
π Security
Best Practices
-
Always use HTTPS in production
- Configure a reverse proxy (nginx, Caddy) with TLS
- Update security headers accordingly
-
Change default credentials
export ADMIN_USERNAME="your-admin-user" export ADMIN_PASSWORD="$(openssl rand -base64 32)" -
Generate a strong secret key
export APP_SECRET_KEY="$(openssl rand -hex 32)" -
Keep LiveKit credentials secure
- Never commit
.envfiles - Use environment variable injection in production
- Rotate API keys regularly
- Never commit
-
Enable security headers
- HSTS, CSP, X-Frame-Options (enabled by default)
- Adjust Content-Security-Policy for your needs
-
Rate limiting (optional)
- Consider adding rate limiting middleware
- Use a reverse proxy with rate limiting
Security Headers
The application automatically sets these security headers:
X-Content-Type-Options: nosniffX-Frame-Options: DENYX-XSS-Protection: 1; mode=blockReferrer-Policy: strict-origin-when-cross-originStrict-Transport-Security(in production)Content-Security-Policy(restrictive by default)
π³ Docker Deployment
Production Deployment with Docker
# 1. Build the image
docker build -t livekit-dashboard:latest .
# 2. Run with environment variables
docker run -d \
--name livekit-dashboard \
-p 8000:8000 \
-e LIVEKIT_URL="https://your-server.com" \
-e LIVEKIT_API_KEY="your-key" \
-e LIVEKIT_API_SECRET="your-secret" \
-e ADMIN_USERNAME="admin" \
-e ADMIN_PASSWORD="secure-password" \
-e APP_SECRET_KEY="$(openssl rand -hex 32)" \
livekit-dashboard:latest
Docker Compose
# Start services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
π§ͺ Testing
# Run all tests
make test
# Run with coverage
make test-cov
# Run linting
make lint
# Run formatting
make fmt
# Run all checks
make check
π API Endpoints
| Endpoint | Method | Description | Auth Required |
|---|---|---|---|
/ | GET | Overview dashboard | β |
/rooms | GET | List rooms | β |
/rooms | POST | Create room | β |
/rooms/{name} | GET | Room details | β |
/rooms/{name}/delete | POST | Delete room | β |
/rooms/{name}/token | POST | Generate token | β |
/egress | GET | List egress jobs | β |
/egress/start | POST | Start egress | β |
/egress/{id}/stop | POST | Stop egress | β |
/agents | GET | Agent fleet overview | β |
/agents/{name} | GET | Per-agent detail | β |
/agents/dispatch | POST | Create dispatch | β |
/agents/{id}/delete | POST | Delete dispatch | β |
/sip-outbound | GET | SIP outbound page | β |
/sip-inbound | GET | SIP inbound page | β |
/homer | GET | Homer SIP search | β |
/homer/call/{callid} | GET | Homer call detail | β |
/homer/call/{callid}/export.json | GET | Export call JSON | β |
/sandbox | GET | Token generator | β |
/settings | GET | Settings page | β |
/logout | GET | Logout page | β |
/health | GET | Health check | β |
π€ Contributing
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Code Style
- Use Black for Python formatting:
make fmt - Use Ruff for linting:
make lint - Follow existing patterns and conventions
- Add tests for new features
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Acknowledgments
- LiveKit - Open source WebRTC infrastructure
- FastAPI - Modern Python web framework
- Bootstrap - UI framework
- HTMX - Progressive enhancement library
π Support
- Documentation: LiveKit Docs
- Issues: GitHub Issues
- Community: LiveKit Discord
πΊοΈ Roadmap
- WebSocket live updates
- Advanced participant management
- Recording download management
- Multi-user support with roles
- Ingress management
- Analytics and metrics
- Dark mode theme
- Mobile-responsive improvements
β Definition of Done
- β App is stateless: no DB/Redis/background workers
- β All data fetched directly from LiveKit per request
- β HTTP Basic Auth using one admin account from env
- β
All routes protected except
/healthand/logout - β
SSR pages:
/,/rooms,/rooms/{name},/sip-outbound,/sip-inbound,/settings,/sandbox - β Docker image builds and runs with environment variables
- β Secrets never shown in full UI
- β Secure headers enabled
- β CSRF protection on POST forms
- β HTMX for auto-refresh and progressive enhancement
- β Token generation works on-the-fly
- β Room and participant management operational
- β Egress start/stop functionality
- β Agent dispatch management (fleet overview + per-agent detail)
- β SIP features (when enabled)
- β Homer SIP Monitor β call search, flow diagram, message inspection, session metrics, JSON export (when enabled)
Made with β€οΈ for the LiveKit community
Tags
Similar Tools
WindChat
v0.dev open-source alternative browser extension
TechEuphoria
Modern web application for technology enthusiasts event
100 Days of Code
Daily challenges - Vibe code with AI
unCover
VerifiedWrite AI-generated cover letters in seconds
Intellectia
VerifiedGuardian against misleading AI-generated content
BeyHub
Completely vibe-coded beyblade web application