Deployment
Deployment
Section titled “Deployment”Each component is deployed independently. You can also run everything locally with Docker Compose.
Overview
Section titled “Overview”| Component | Platform | Configuration |
|---|---|---|
| Dashboard App | Railway | Nixpacks (PHP 8.3) |
| Brand Site | Vercel | Auto-detect (Next.js) |
| Docs | Cloudflare Pages | Auto-detect (Astro) |
| Agents Service | Railway | Docker |
| Postgres | Railway | Managed add-on |
Docker Compose (recommended for local dev)
Section titled “Docker Compose (recommended for local dev)”The project includes a docker-compose.yml that starts all services:
./start.shThis starts:
laravel-app— Dashboard + API on port 8080, Reverb WebSocket on port 8082brand-site— Marketing site on port 3000docs-site— Documentation on port 3002agents-service— Code improvement API on port 8081
All services share an agent-os-network Docker bridge. The Laravel app uses SQLite in a Docker volume.
Environment variables
Section titled “Environment variables”Copy .env.example to .env and set:
GROQ_API_KEY=... # For agents serviceAPP_KEY=... # Laravel app keyBROADCAST_CONNECTION=reverbREVERB_APP_ID=...REVERB_APP_KEY=...REVERB_APP_SECRET=...Dashboard App on Railway
Section titled “Dashboard App on Railway”Railway detects the Laravel app automatically via Nixpacks (PHP 8.3). composer.json defines a setup script (key:generate + migrate + cache) and the start command.
php artisan migrate --force && php artisan config:cache && php artisan serve --host=0.0.0.0 --port=8080Set these in the Railway dashboard:
APP_KEY— Laravel app key (php artisan key:generate --show)DB_CONNECTION=pgsql+ Railway Postgres connection variablesAPP_URL— public URL of the deployed appBROADCAST_CONNECTION=reverb— for real-time WebSocket updatesREVERB_APP_ID,REVERB_APP_KEY,REVERB_APP_SECRET— Reverb credentials
Brand Site on Vercel
Section titled “Brand Site on Vercel”Vercel detects Next.js automatically. Connect the repository and set the root directory to apps/brand-site/. No further setup required — Vercel Analytics and SpeedInsights are already integrated.
Docs on Cloudflare Pages
Section titled “Docs on Cloudflare Pages”Cloudflare Pages detects Astro automatically. Connect the repository, set root directory to apps/docs/, build command npm run build, output directory dist.
Local development (without Docker)
Section titled “Local development (without Docker)”# 1. Laravel App (Port 8000)cd apps/appcomposer install && npm installcp .env.example .envphp artisan key:generate && php artisan migratephp artisan servenpm run dev # Vite assets in a separate terminal
# 2. Reverb WebSocket servercd apps/appphp artisan reverb:start
# 3. Brand Site (Port 3000)cd apps/brand-sitenpm install && npm run dev
# 4. Docs (Port 4321)cd apps/docsnpm install && npm run devRequired environment variables in apps/app/.env:
DB_CONNECTION=sqliteBROADCAST_CONNECTION=reverbREVERB_APP_ID=my-appREVERB_APP_KEY=my-keyREVERB_APP_SECRET=my-secretREVERB_HOST=localhostREVERB_PORT=8082