Skip to main content

Documentation Index

Fetch the complete documentation index at: https://launchpad.datalumina.com/llms.txt

Use this file to discover all available pages before exploring further.

The Launchpad uses a modular Docker Compose architecture that lets you include or exclude services based on your needs. All services run on a shared bridge network for seamless communication.

Compose File Structure

The Docker setup is split into four compose files:
FilePurpose
docker-compose.ymlMain orchestrator that includes other files
docker-compose.launchpad.ymlCore application services
docker-compose.supabase.ymlSupabase backend services
docker-compose.caddy.ymlReverse proxy with automatic HTTPS

Main Compose File

The docker-compose.yml file controls which services to include. By default only the core Launchpad stack is on; Supabase and Caddy are commented out. Uncomment Supabase when you need Studio/Auth/Realtime/Storage, and uncomment Caddy when you need HTTPS in front of the API (typical for VPS deployments):
include:
  - path: ./docker-compose.launchpad.yml
  # - path: ./docker-compose.supabase.yml  # Uncomment to enable Supabase services
#  - path: ./docker-compose.caddy.yml      # Uncomment to enable Caddy/HTTPS

networks:
  default:
    driver: bridge
    external: true
    name: "${PROJECT_NAME}-network"

Core Application Services

The docker-compose.launchpad.yml file contains the essential application services:
ServiceImagePortPurpose
apiCustom (Dockerfile.api)8080FastAPI application server
celery_workerCustom (Dockerfile.celery)-Async task processing
redisredis:latest6379Message broker & cache
dbsupabase/postgres:15.8.1.0855432PostgreSQL database
The API and Celery services mount the host app/ into /workspace/app for live code reloading during development. The package is installed editable inside the image, so edits in the host app/launchpad/ tree take effect without a rebuild.

Supabase Services

The docker-compose.supabase.yml file is opt-in and provides the full Supabase stack:
ServiceImagePurpose
studiosupabase/studioDashboard UI
kongkong:2.8.1API gateway (ports 8000, 8443)
authsupabase/gotrueAuthentication service
restpostgrest/postgrestAuto-generated REST API
realtimesupabase/realtimeWebSocket subscriptions
storagesupabase/storage-apiFile storage
imgproxydarthsim/imgproxyImage transformations
metasupabase/postgres-metaSchema introspection
functionssupabase/edge-runtimeDeno edge functions
analyticssupabase/logflareLog aggregation
vectortimberio/vectorLog collection
supavisorsupabase/supavisorConnection pooling
When Supabase is enabled, access the Studio dashboard at http://localhost:8000 with credentials from docker/.env.

Caddy Reverse Proxy

The docker-compose.caddy.yml file provides:
  • Automatic HTTPS certificate management
  • Reverse proxy to application services
  • HTTP/2 support
  • Ports: 80 (HTTP), 443 (HTTPS), 2019 (admin API)

Including and Excluding Services

Option 1: Edit docker-compose.yml

Uncomment the services you need:
include:
  - path: ./docker-compose.launchpad.yml      # Always include
  # - path: ./docker-compose.supabase.yml     # Enable Supabase
  # - path: ./docker-compose.caddy.yml        # Enable Caddy

Option 2: Use CLI flags

Specify which compose files to use:
# Default core stack
docker compose -f docker-compose.launchpad.yml up

# Core + Supabase
docker compose -f docker-compose.launchpad.yml \
               -f docker-compose.supabase.yml up

# Whatever is enabled in docker-compose.yml
docker compose up

Management Scripts

The docker/ directory includes helper scripts:

start.sh

Creates the network if needed and starts all services:
cd docker && ./start.sh

stop.sh

Stops all running containers:
cd docker && ./stop.sh

logs.sh

Interactive log viewer with service selection:
cd docker && ./logs.sh

Architecture Overview

┌─────────────────────────────────────────────────────────┐
│                    Caddy (optional)                     │
│                   :80, :443, :2019                      │
└────────────────────────┬────────────────────────────────┘

┌────────────────────────▼────────────────────────────────┐
│                 Kong API Gateway                        │
│                  :8000, :8443                           │
└───────┬─────────────┬─────────────┬─────────────────────┘
        │             │             │
┌───────▼───────┐ ┌───▼───────┐ ┌───▼───────────────────┐
│  Auth/GoTrue  │ │ PostgREST │ │ Storage / Realtime /  │
│    :9999      │ │   :3000   │ │ Functions / etc.      │
└───────┬───────┘ └─────┬─────┘ └───────────┬───────────┘
        │               │                   │
┌───────▼───────────────▼───────────────────▼─────────────┐
│              PostgreSQL Database                        │
│              supabase/postgres:15.8.1.085              │
│              :5432 (direct) / :6543 (pooled)           │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│               Application Services                      │
│  ┌─────────────────┐  ┌──────────────┐  ┌───────────┐  │
│  │ FastAPI (:8080) │  │ Celery Worker│  │   Redis   │  │
│  │ /workspace/app  │  │  async tasks │  │   :6379   │  │
│  └─────────────────┘  └──────────────┘  └───────────┘  │
└─────────────────────────────────────────────────────────┘

All services connected via: ${PROJECT_NAME}-network

Environment Variables

The Launchpad has two .env files because local Python runs and Docker Compose read configuration in different ways.
FileUsed byPurpose
.env at the repo rootLocal Python commands, including playground scripts, unit tests, notebooks, and one-off scripts run with uvKeeps local development credentials close to the Python process that loads them with python-dotenv
docker/.envDocker Compose, containers, the database, and optional Supabase servicesFeeds Compose interpolation, container environment variables, database credentials, ports, JWT/secrets, and Supabase-specific settings
docker/.env is intentionally much larger than the root .env because self-hosted Supabase requires many variables for Auth, Realtime, Storage, Studio, Kong, analytics, and related services. Those values stay in docker/.env even when Supabase is commented out by default, so opting in later is a compose-file change rather than a config migration. For local Python runs that connect to the Docker database through localhost, the root .env database user depends on whether Supabase is enabled. Use DATABASE_USER=postgres with the default Launchpad-only stack. When docker-compose.supabase.yml is included, port 5432 is served by Supavisor, so use DATABASE_USER=postgres.<POOLER_TENANT_ID>, for example postgres.launchpad. Key environment variables in docker/.env:
CategoryVariables
ProjectPROJECT_NAME
DatabasePOSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_PORT
JWTJWT_SECRET, JWT_EXPIRY, ANON_KEY, SERVICE_ROLE_KEY
LLM ProvidersOPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, etc.
LangfuseLANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL
Copy docker/.env.example to docker/.env and configure your values before starting.