Route by sender
Every inbound message matches its sender and forwards to that person's configured backend. Rules live in one file that hot-reloads on every message — no restart to change a route.
frontdesk sits in front of incoming messages — reading each one, routing by sender to the right backend, and relaying replies. Business cards and voice memos file themselves; staged writes wait for a strict Y/N.
Message queue
WhatsApp (Baileys) and SMS (TextNow) are transports with no logic. Every message is HMAC-signed, forwarded to fd-router, and handed off to the backend configured for that sender.
Four focused backends behind one router — each sender gets the right tool without sharing a single inbox brain.
Every inbound message matches its sender and forwards to that person's configured backend. Rules live in one file that hot-reloads on every message — no restart to change a route.
Snap a photo of a card over WhatsApp. The card-intake backend runs vision, transcribes voice memos, and appends rows to a contact sheet — no typing, no separate app.
A backend can stage a write and ask for confirmation. Only a strict yes or no resolves it — free text always falls through, so nobody gets trapped in a menu.
Routing rules, contact directory, deploy log, health panel, and NDJSON audit trail — surfaced in a mobile-friendly owner console installable as a PWA.
frontdesk deploys under pm2 on a home VM with an owner PWA for routing, contacts, and billing status. GCP mirrors read-only; writes stay home-only. Alerts cascade — WhatsApp self-message, then web-push, then a logged error.
wa-baileys, tn-keeper, fd-router, and backends as long-lived pm2 processes with on-disk sessions.
Public GCP ingress for read-only dashboard; privileged writes stay on the home VM.
SMS can never be admin. Each transport signs with its own secret; identity in verified headers.
Dashboard PWA service worker delivers VAPID-signed push when WhatsApp self-alert is down.
Long-lived sockets and on-disk sessions under pm2 — deployed to a Google Cloud VM, live day and night.