Architecture Overview
What components make up a personalized AI assistant and how they fit together.
This doc covers the full stack for a personalized AI assistant deployment — from the server to the agent to the site. Everything here is what's running on mcinnis.dev.
The Three-Layer Model
All components fit into one of three layers:
Infrastructure layer — The platform everything runs on. A Linux server, a reverse proxy (Caddy), a process manager (systemd), and the agent runtime (OpenClaw). Goal: a single setup script that takes a fresh Ubuntu droplet to a running platform.
Platform layer — The services the agent uses. Bridge services for email, SMS, and CRM. The agent routing config. The tool registry. These are modular — a deployment that doesn't need SMS shouldn't have the SMS bridge installed.
Identity layer — What makes a deployment unique. The domain, the SOUL.md files, the site content, the API credentials, the agent names. Swapping this layer is what turns "Coral on mcinnis.dev" into a different assistant on a different domain.
Component Map
Internet
│
▼
Caddy (reverse proxy, TLS, static files)
├── mcinnis.dev → serves public/ (11ty output)
├── reef.mcinnis.dev → OpenClaw dashboard
├── /api/chat → OpenClaw gateway (port 18789)
└── /api/sms → SMS bridge (port 3032)
│
▼
OpenClaw (agent runtime)
├── main agent (Opus 4.6) — CLI sessions, direct work
├── public-chat agent (Haiku 4.5) — site chat widget
├── discord agent (Haiku 4.5) — Discord channel
├── content-writer (Sonnet 4.6) — site publishing
├── gmail-assistant (Sonnet 4.6) — email triage
└── outreach-agent (Sonnet 4.6) — CRM + outreach
│
▼
Bridge services (localhost only)
├── GSuite bridge :3031 — Gmail + Calendar API proxy
├── SMS bridge :3032 — Twilio inbound/outbound
└── CRM service :3033 — SQLite lead pipeline
│
▼
External APIs
├── Anthropic API (Claude models)
├── Google Workspace (Gmail, Calendar)
├── Twilio (SMS)
└── Brave Search API (web research)
Server
DigitalOcean Ubuntu droplet. 4GB RAM, 2 vCPU is sufficient for this workload. The agent runs as the openclaw system user. Caddy handles TLS automatically via Let's Encrypt.
OpenClaw runs as a systemd service (openclaw.service). The three bridge services each run as their own systemd unit.
Agent Runtime
OpenClaw is the agent platform. It manages:
- Model API calls to Anthropic
- Tool execution (exec, read, write, web search, etc.)
- Session history and context
- Multi-agent routing via channel bindings
- The dashboard UI at
reef.mcinnis.dev
Each agent gets its own workspace directory with its own SOUL.md (identity/instructions), session history, and tool policy.
Site Pipeline
The site is optional — not every deployment needs one. When enabled:
Coral writes src/blog/2026-02-21-post.md
→ npm run build (Tailwind + Eleventy)
→ public/ updated
→ git push
→ Caddy serves updated static files
Eleventy (11ty) is the static site generator. Tailwind CSS handles styling. The agent publishes by writing a markdown file — no HTML generation needed.
What's Not Here
- No Docker in production (sandbox mode off — agent runs directly on host)
- No Kubernetes, no load balancer, no CDN (single droplet is fine at this scale)
- No database for the site (static files only)
- No build server — builds run directly on the production droplet