Skip to main content

Web Platform Setup

Cap’s web platform lets you access, manage, and share your recordings from any browser. You can use the hosted version at cap.so or deploy your own self-hosted instance.

Using Cap Web (Hosted)

Creating an Account

1

Visit Cap.so

Go to cap.so in your web browser.
2

Sign Up

Click Sign Up and create an account:
  • Email and password
  • Or sign in with OAuth providers (if configured)
3

Verify Email

Check your email for a verification link and click it to activate your account.
Email verification is required before you can upload recordings.
4

Complete Profile

Set up your profile:
  • Username
  • Display name
  • Profile picture (optional)
  • Custom branding (Pro feature)

Connecting Desktop App

To upload recordings from the desktop app:
1

Open Desktop App Settings

Launch Cap desktop and click the settings icon.
2

Sign In

Click Sign In and enter your Cap.so credentials.
3

Verify Connection

Once signed in, your desktop app is connected to your Cap.so account.Recordings can now be uploaded directly from the desktop app.

Self-Hosting Cap

Deploy Cap on your own infrastructure for complete control over your data.

Quick Start (Docker Compose)

Get Cap running in one command:
git clone https://github.com/CapSoftware/Cap.git && cd Cap && docker compose up -d
Cap will be running at http://localhost:3000. That’s it!
Since email isn’t configured by default, login links will appear in the logs. View them with:
docker compose logs cap-web

What’s Included

The Docker Compose setup includes:
  • cap-web: Next.js web application (port 3000)
  • media-server: Video processing service (port 3456)
  • mysql: MySQL 8.0 database
  • minio: S3-compatible object storage (ports 9000, 9001)
  • minio-setup: Automatic bucket configuration

Deployment Options

Docker Compose

Best for: VPS, home servers, any Docker hostFull control over deployment

Railway

Best for: One-click managed hostingDeploy in minutes

Coolify

Best for: Self-hosted PaaSUse docker-compose.coolify.yml
Deploy on Railway

Production Configuration

1

Clone the Repository

git clone https://github.com/CapSoftware/Cap.git
cd Cap
2

Create Environment File

Create a .env file with your production configuration:
.env
# App URLs
CAP_URL=https://cap.yourdomain.com
S3_PUBLIC_URL=https://s3.yourdomain.com

# Database
DATABASE_URL=mysql://cap:YOUR_DB_PASSWORD@mysql:3306/cap
MYSQL_PASSWORD=YOUR_DB_PASSWORD
MYSQL_ROOT_PASSWORD=YOUR_ROOT_PASSWORD

# Security Keys (generate secure random strings)
DATABASE_ENCRYPTION_KEY=your_64_character_hex_string_here
NEXTAUTH_SECRET=your_32_character_secret_here
MEDIA_SERVER_WEBHOOK_SECRET=your_64_character_secret_here

# S3 Storage (MinIO)
MINIO_ROOT_USER=cap-admin
MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD
CAP_AWS_ACCESS_KEY=cap-admin
CAP_AWS_SECRET_KEY=YOUR_MINIO_PASSWORD
CAP_AWS_BUCKET=cap
CAP_AWS_REGION=us-east-1

# Email (optional but recommended)
RESEND_API_KEY=your_resend_api_key
RESEND_FROM_DOMAIN=[email protected]

# Ports
CAP_PORT=3000
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
Generate secure random values for all secrets and passwords. Never use the example values in production.Generate secure keys:
# For 64-character hex string
openssl rand -hex 32

# For 32-character secret
openssl rand -hex 16
3

Start Services

docker compose up -d
Monitor startup:
docker compose logs -f
4

Verify Installation

Check that all services are running:
docker compose ps
You should see:
  • cap-web (healthy)
  • cap-media-server (healthy)
  • cap-mysql (healthy)
  • cap-minio (healthy)
  • cap-minio-setup (exited 0)

Service Configuration

Email Setup (Resend)

For production, configure email to enable:
  • User registration and login
  • Password resets
  • Share notifications
1

Get Resend API Key

  1. Sign up at resend.com
  2. Verify your domain
  3. Generate an API key
2

Add to Environment

.env
RESEND_API_KEY=re_your_api_key_here
RESEND_FROM_DOMAIN=[email protected]
3

Restart Services

docker compose restart cap-web

AI Features (Optional)

Enable AI-powered transcription and summaries:
.env
# Deepgram for transcription
DEEPGRAM_API_KEY=your_deepgram_api_key

# Groq for AI summaries
GROQ_API_KEY=your_groq_api_key
AI features are optional. Cap works perfectly without them, but they enhance the user experience with automatic transcriptions and summaries.

Analytics (Tinybird)

For viewer analytics and insights:
.env
TINYBIRD_ADMIN_TOKEN=your_tinybird_token
TINYBIRD_HOST=https://api.tinybird.co
Set up analytics:
pnpm analytics:setup
The analytics:setup command is destructive and will synchronize your Tinybird workspace to match Cap’s schema. Run pnpm analytics:check first to verify.

External S3 Storage

Instead of MinIO, use AWS S3 or compatible services:
.env
# AWS S3
CAP_AWS_ACCESS_KEY=your_aws_access_key
CAP_AWS_SECRET_KEY=your_aws_secret_key
CAP_AWS_BUCKET=your-cap-bucket
CAP_AWS_REGION=us-east-1
S3_PUBLIC_ENDPOINT=https://s3.amazonaws.com
S3_INTERNAL_ENDPOINT=https://s3.amazonaws.com
S3_PATH_STYLE=false

# Or use Cloudflare R2, Backblaze B2, etc.

SSL/HTTPS Setup

For production, use a reverse proxy like Nginx or Caddy:
server {
    listen 443 ssl http2;
    server_name cap.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 443 ssl http2;
    server_name s3.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Allow large uploads
        client_max_body_size 5G;
    }
}

Connecting Desktop App to Self-Hosted Instance

To use your self-hosted Cap with the desktop app:
1

Open Desktop Settings

Launch Cap desktop app and open Settings.
2

Enter Server URL

In Cap Server URL, enter:
https://cap.yourdomain.com
3

Sign In

Sign in with your self-hosted account credentials.
4

Verify Connection

Upload a test recording to verify the connection works.

Maintenance

Viewing Logs

# All services
docker compose logs -f

# Specific service
docker compose logs -f cap-web
docker compose logs -f mysql
docker compose logs -f minio

Backing Up Data

1

Database Backup

docker exec cap-mysql mysqldump -u cap -p cap > backup.sql
2

Storage Backup

# Backup MinIO data
docker run --rm \
  -v cap_cap-minio-data:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/minio-backup.tar.gz /data
3

Store Backups Safely

  • Copy backups to remote storage
  • Test restore procedures regularly
  • Automate backups with cron

Updating Cap

1

Pull Latest Changes

cd Cap
git pull origin main
2

Rebuild Images

docker compose build --no-cache
3

Restart Services

docker compose down
docker compose up -d
4

Verify Update

docker compose ps
docker compose logs -f cap-web

Troubleshooting

Check Docker resources:
docker system df
docker system prune
Verify ports aren’t in use:
# Linux/macOS
lsof -i :3000
lsof -i :9000

# Windows
netstat -ano | findstr :3000
  1. Check MySQL is healthy: docker compose ps
  2. Verify DATABASE_URL in .env is correct
  3. Check MySQL logs: docker compose logs mysql
  4. Try restarting MySQL: docker compose restart mysql
  1. Check MinIO is running: docker compose ps minio
  2. Verify bucket exists: Access MinIO console at http://localhost:9001
  3. Check S3 credentials in .env match MinIO settings
  4. Look for errors in cap-web logs
Default credentials:
  • Username: Value of MINIO_ROOT_USER in .env
  • Password: Value of MINIO_ROOT_PASSWORD in .env
Access at: http://localhost:9001
Check Docker volumes:
docker system df -v
Clean up:
# Remove unused images
docker image prune -a

# Remove unused volumes (WARNING: data loss)
docker volume prune

System Requirements

Minimum Requirements

  • CPU: 2 cores
  • RAM: 4GB
  • Storage: 20GB + space for recordings
  • OS: Linux, macOS, or Windows with Docker
  • CPU: 4+ cores
  • RAM: 8GB+
  • Storage: 100GB+ SSD
  • Network: 100 Mbps+ bandwidth
Storage needs grow with usage. Plan for ~100MB per minute of recording, plus database overhead.

Getting Help

Self-Hosting Docs

Full self-hosting documentation

Discord Community

Get help from the community

GitHub Issues

Report bugs or request features

Contributing

Contribute to Cap development

Build docs developers (and LLMs) love