Getting Started

Get a Llamenos hotline running locally or on a server. Only Docker is required — no Node.js, Bun, or other runtimes needed on the host.

How it works

When someone calls your hotline number, Llamenos routes the call to all on-shift users simultaneously. The first user to answer gets connected, and the others stop ringing. After the call ends, the user can save encrypted notes about the conversation.

Call Routing

The same routing applies to SMS, WhatsApp, Signal, and other messaging channels — they appear in a unified Conversations view.

Prerequisites

  • Docker with Docker Compose v2
  • openssl (pre-installed on most Linux and macOS systems)
  • Git

Quick start

git clone https://github.com/rhonda-rodododo/llamenos-platform.git
cd llamenos-platform
./scripts/docker-setup.sh

This generates all required secrets, builds the application, and starts the services. Once complete, visit http://localhost:8000 and follow the setup wizard:

  1. Create your admin account — set a display name and your PIN
  2. Name your hotline — set the display name shown in the app
  3. Choose channels — enable Voice, SMS, WhatsApp, Signal, and/or Reports
  4. Configure providers — enter credentials for each enabled channel
  5. Review and finish

Try demo mode

To explore with pre-seeded sample data:

./scripts/docker-setup.sh --demo

Production deployment

For a server with a real domain and automatic TLS:

./scripts/docker-setup.sh --domain hotline.yourorg.com --email admin@yourorg.com

Caddy automatically provisions Let’s Encrypt TLS certificates. Make sure ports 80 and 443 are open. The --domain flag activates the production Docker Compose overlay, which adds TLS, log rotation, and resource limits.

See the Docker Compose deployment guide for full details on server hardening, backups, monitoring, and optional services.

Core services

The Docker setup starts these core services:

ServicePurposePort
appLlamenos application (Bun)3000 (internal)
postgresPostgreSQL database5432 (internal)
caddyReverse proxy + automatic TLS8000 (local), 80/443 (production)
minioS3-compatible file storage9000 (internal)
strfryNostr relay for real-time events7777 (internal)

Optional profiles add: signal-notifier sidecar, sip-bridge (Asterisk/FreeSWITCH/Kamailio), Ollama/vLLM inference, Prometheus monitoring.

Health probes

The app exposes two health endpoints used by Docker health checks and Kubernetes probes:

  • GET /health/ready — returns 200 when the app is ready to serve traffic (DB connected, migrations applied)
  • GET /health/live — returns 200 when the app process is alive

Configure webhooks

After deploying, point your telephony provider’s webhooks to your deployment URL:

WebhookURL
Voice (incoming)https://your-domain/api/telephony/incoming
Voice (status)https://your-domain/api/telephony/status
SMShttps://your-domain/api/messaging/sms/webhook
WhatsApphttps://your-domain/api/messaging/whatsapp/webhook
SignalForward to https://your-domain/api/messaging/signal/webhook

For provider-specific setup: Twilio, SignalWire, Vonage, Plivo, Asterisk, SMS, WhatsApp, Signal.

Next steps