Live calls still require Twilio, OpenAI, and a public HTTPS endpoint for the dashboard. Phone calls also need a Twilio Elastic SIP trunk that sends calls to your OpenAI project.
Deploy on Railway
The LobbyStack Railway template deploys the admin, worker, and migration services with PostgreSQL, Redis, and a storage bucket. Railway generates every secret and database password. You enter an OpenAI API key and your Twilio credentials, then create your account on the admin domain and finish the steps in After deploying.After deploying
Browser test calls work as soon as the deploy finishes. Email, phone calls, website import, and Google Calendar need more setup, and the phone and calendar steps use the admin domain that Railway assigns. Set each variable on the service named below, then deploy the staged changes in Railway.Set up email
Password resets, verification codes, team invites, and operator alerts fail until the worker can send email. On theworker service, set:
SMTP_HOST,SMTP_USERNAME, andSMTP_PASSWORDfrom your email providerSMTP_PORT, which defaults to587, andSMTP_SECURE, which defaults tofalse. Use465andtrueif your provider needs TLS from the start.EMAIL_FROM, an address your provider lets you send from, such asLobbyStack <no-reply@example.com>EMAIL_REPLY_TO, if replies should go to another address
Finish phone calls
Browser calls work without these steps. Phone calls need an OpenAI project with SIP enabled and a Twilio Elastic SIP trunk:- In the OpenAI dashboard, add a webhook for
live.transport.incomingthat points tohttps://your_admin_domain/api/webhooks/openai/live. - Set the webhook’s signing secret as
OPENAI_WEBHOOK_SECRETon theadminservice. - In Twilio, create an Elastic SIP trunk with the origination URI
sip:your_openai_project_id@sip.api.openai.com;transport=tls. - Set the trunk’s SID as
TWILIO_SIP_TRUNK_SIDon theworkerservice. The worker can’t provision a phone number without it.
Import websites (optional)
SetFIRECRAWL_API_KEY on the worker service. Without it, website import fails.
Connect Google Calendar (optional)
In Google Cloud, enable the Google Calendar API and create an OAuth client for a web application. Addhttps://your_admin_domain/api/calendar/google/callback as an authorized redirect URI. Set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET on the admin service. The template fills in GOOGLE_REDIRECT_URI, and the worker reads all three from the admin.
With both values set, the sign-in and sign-up pages also offer Continue with Google. Add https://your_admin_domain/api/auth/callback/google to the same OAuth client as a second authorized redirect URI.
Use a custom domain
Add the domain to theadmin service, then set APP_BASE_URL on the admin service to https://your_domain. These variables reference it and follow the change:
SITE_URL,AUTH_TRUSTED_ORIGINS,TWILIO_SMS_WEBHOOK_URL,TWILIO_STATUS_CALLBACK_URL, andGOOGLE_REDIRECT_URIon theadminserviceAPP_BASE_URL,TWILIO_STATUS_CALLBACK_URL, andGOOGLE_REDIRECT_URIon theworkerservice
Official baseline
The repository’sdocker-compose.yml runs:
- PostgreSQL with pgvector for durable data, authentication state, and knowledge embeddings
- Redis for queues, rate limits, and realtime coordination
- a persistent Docker volume for recordings and uploaded documents
- the Next.js admin dashboard and HTTP API
- the background worker and transactional outbox dispatcher, which also runs each GPT-Live call
- Caddy to route the dashboard hostname over plain HTTP, behind the proxy or load balancer that terminates HTTPS
Data flow
- The dashboard and API read and write PostgreSQL through role-specific connections and row-level security.
- Durable side effects enter the PostgreSQL outbox in the same transaction as business state changes.
- The worker dispatches queued jobs and refreshes business context snapshots.
- OpenAI hosts call audio. The admin starts each call with the business snapshot, and the worker answers GPT-Live’s requests for bookings, messages, and transfers.
- The admin and worker share the configured storage provider. Single-host Compose deployments use a persistent local volume by default.
Responsibilities
You are responsible for:- PostgreSQL, Redis, and file-storage durability
- backups, restore drills, upgrades, and monitoring
- public DNS and TLS for the dashboard
- Twilio, OpenAI, email, calendar, billing, and analytics credentials
- secret rotation and least-privilege database roles