Vibe Coding version for Livekit Dashboard
1.1K
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.

βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 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
# 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
# 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
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
| 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
http://localhost:8000/)/rooms)
/egress)
/agents)
/sip-outbound, /sip-inbound)

/homer) (optional)
Requires ENABLE_HOMER=true and Homer/SIPCAPTURE credentials in your .env.
/sandbox)
/settings)
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
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
Always use HTTPS in production
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
.env filesEnable security headers
Rate limiting (optional)
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)# 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
# Start services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
# Run all tests
make test
# Run with coverage
make test-cov
# Run linting
make lint
# Run formatting
make fmt
# Run all checks
make check
| 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 | β |
Contributions are welcome! Please follow these guidelines:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)make fmtmake lintThis project is licensed under the MIT License - see the LICENSE file for details.
/health and /logout/, /rooms, /rooms/{name}, /sip-outbound, /sip-inbound, /settings, /sandboxMade with β€οΈ for the LiveKit community
Content type
Image
Digest
sha256:48fbfbe13β¦
Size
112.6 MB
Last updated
3 months ago
docker pull skiinder/livekit-dashboard