Get Protocol Guide running locally with one command using Docker.
- Docker Desktop — download here
- Mac: Intel or Apple Silicon both work
- Windows: Requires WSL 2 backend (Docker Desktop installer handles this)
- Linux: Docker Engine + Docker Compose plugin
- Git — to clone the repo
That's it. No Node.js, no pnpm, no database setup needed.
git clone https://github.com/your-org/Protocol-Guide.git
cd Protocol-Guidecp .env.example .envOpen .env and fill in the required values. Ask Tanner for shared dev credentials.
Required variables:
SUPABASE_URL,SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEY— Supabase projectDATABASE_URL— Supabase PostgreSQL connection stringANTHROPIC_API_KEY— Claude API keyGOOGLE_API_KEY— Gemini Embedding 2 Preview key (Voyage removed 2026-03-24)JWT_SECRET,NEXT_AUTH_SECRET— generate withopenssl rand -base64 32
docker compose upFirst run takes 2-3 minutes to build the image and install dependencies. Subsequent runs start in seconds.
| Service | URL |
|---|---|
| Web app | http://localhost:8081 |
| API | http://localhost:3001 |
| API health check | http://localhost:3001/api/live |
# Start
docker compose up
# Start in background
docker compose up -d
# View logs
docker compose logs -f
# Stop
docker compose down
# Rebuild after package.json changes
docker compose up --buildSource code is volume-mounted. Edit files on your machine and changes reflect immediately:
- Server (
server/): tsx watch auto-restarts - Frontend (
app/,components/,hooks/,lib/): Metro hot reload
No need to restart Docker after code changes.
Start Docker Desktop. Wait for it to finish loading.
docker compose down
docker compose up --buildSomething else is using those ports. Stop it, or change ports in docker-compose.yml:
ports:
- "3002:3001" # Change 3002 to whatever you want
- "8082:8081"docker compose down
docker compose build --no-cache
docker compose upDependencies need reinstalling:
docker compose down -v # Removes anonymous volumes including node_modules
docker compose up --buildAdd this to docker-compose.yml under the app service:
environment:
- CHOKIDAR_USEPOLLING=truedocker compose --profile with-redis upThen set REDIS_URL=redis://redis:6379 in your .env.
docker compose up
└── app (Dockerfile.dev)
├── Express API server → localhost:3001
└── Expo Metro bundler → localhost:8081
│
├── Supabase (remote) ← DATABASE_URL in .env
├── Claude API (remote) ← ANTHROPIC_API_KEY
└── Google Gemini (remote) ← GOOGLE_API_KEY (Voyage removed 2026-03-24)
All external services (database, AI, payments) are remote. Docker only containerizes the Node.js runtime and dependencies.