Skip to main content

Environment Configuration

Copy .env.example to .env at the repo root. The Docker simple setup passes all variables to containers automatically. For local development, each app reads config from:
AppConfig Source
backend-core.env in its own directory (DJANGO_READ_DOT_ENV_FILE=True)
api-services.env from monorepo root via python-dotenv
webapps/web/.env.local (copy from .env.local.example)
super.env from monorepo root via python-dotenv

Frontend (apps/web/.env.local)

VariableDefaultDescription
API_URLhttp://localhost:8000Backend API base URL
PRODUCT_IDunpodProduct identifier
IS_DEV_MODEtrueEnable development mode
CURRENCYUSDDefault currency
LIVEKIT_URLws://localhost:7880LiveKit WebSocket URL
CENTRIFUGO_URLws://localhost:8000/connection/centrifugoCentrifugo WebSocket URL

Backend Core (.env)

VariableRequiredDescription
DJANGO_SECRET_KEYYesDjango secret key
POSTGRES_HOSTYesPostgreSQL host (localhost)
POSTGRES_PORTYesPostgreSQL port (5432)
POSTGRES_DBYesDatabase name (unpod_db)
POSTGRES_USERYesDatabase user (postgres)
POSTGRES_PASSWORDYesDatabase password
MONGO_DSNYesMongoDB connection string
REDIS_URLYesRedis URL (redis://localhost:6379/1)
BASE_URLYesBackend base URL (http://localhost:8000)
BASE_FRONTEND_URLYesFrontend URL (http://localhost:3000)

Voice AI (apps/super)

VariableRequiredDescription
LIVEKIT_URLYesLiveKit WebSocket URL
LIVEKIT_API_KEYYesLiveKit API key
LIVEKIT_API_SECRETYesLiveKit API secret
OPENAI_API_KEYYesOpenAI API key
ANTHROPIC_API_KEYYesAnthropic API key
DEEPGRAM_API_KEYYesDeepgram STT API key
CARTESIA_API_KEYYesCartesia TTS API key
PREFECT_API_URLYesPrefect orchestration URL

Optional Variables

VariableDescription
AWS_ACCESS_KEY_IDS3 storage access key
AWS_SECRET_ACCESS_KEYS3 storage secret key
AWS_STORAGE_BUCKET_NAMES3 bucket name
SENDGRID_API_KEYSendGrid API key for emails
See .env.example for the full list.

Development Commands

Make (uses docker-compose.simple.yml)

CommandDescription
make quick-startFull setup: env + deps + docker + db + migrate
make devStart frontend + backend dev servers
make dockerStart Docker containers
make migrateRun Django migrations
make stopStop Docker containers
make cleanStop containers and remove all data
make logsTail Docker container logs
make superuserCreate Django superuser

NPM

CommandDescription
npm run devStart web + backend-core (via NX)
npm run dev:frontendFrontend only (port 3000)
npm run buildBuild frontend
npm run testRun tests
npm run e2eE2E tests (Playwright)
npm run lint:allLint all projects
npm run graphView NX dependency graph

Docker

Uses docker-compose.simple.yml — single PostgreSQL instance, all services pre-configured:
docker compose -f docker-compose.simple.yml up -d        # Start
docker compose -f docker-compose.simple.yml logs -f       # Logs
docker compose -f docker-compose.simple.yml down          # Stop
docker compose -f docker-compose.simple.yml down -v       # Stop + remove data
ContainerPortService
unpod-postgres5432PostgreSQL 16
unpod-mongodb27017MongoDB 7
unpod-redis6379Redis 7
unpod-centrifugo8100Centrifugo v5
unpod-backend-core8000Django API
unpod-api-services9116FastAPI
unpod-web3000Next.js

Full Infrastructure

Uses docker-compose.yml — separate PostgreSQL per service + Kafka (KRaft). For microservices development:
docker compose up -d

Database Commands

cd apps/backend-core

# Run migrations
python manage.py migrate

# Create new migrations after model changes
python manage.py makemigrations

# Seed reference data
python manage.py seed_reference_data

# Setup scheduled tasks
python manage.py setup_schedules

Testing and Quality

cd apps/backend-core

# Run tests
pytest

# Run tests with coverage
pytest --cov

# Type checking
mypy unpod

# Code formatting
black unpod

Next Steps