Ops messaging concierge

One desk for & SMS.

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.

fd-dashboard · owner PWA
WhatsApp
Baileys connected
SMS
TextNow polling
Router
fd-router · pm2
Claude billing · account-assistant within budget

Message queue

Move my 3pm with Dr. Cohen to Thursday?→ account-assistant · draft ready
Reply
Photo: business_card.jpg→ card-intake · vision parse
Intake
SMS
Promo blast — no action neededarchived · low priority
Low

Architecture

A thin router — intelligence lives in the backends

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.

wa-baileys tn-keeper HMAC-signed forward fd-router routes by sender · hot-reloaded rules account-assistant Gmail · Drive · Calendar card-intake vision · voice · sheets tutor-loop approval loop Y/N staged writes
backend stage write await Y/N strict match else → fall through Y N commit abort

Capabilities

Reads, routes, confirms, files

Four focused backends behind one router — each sender gets the right tool without sharing a single inbox brain.

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.

Business card intake

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.

Y/N staged writes

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.

Owner PWA dashboard

Routing rules, contact directory, deploy log, health panel, and NDJSON audit trail — surfaced in a mobile-friendly owner console installable as a PWA.


Operations

Built to run unattended

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.

  • 01

    pm2 process fleet

    wa-baileys, tn-keeper, fd-router, and backends as long-lived pm2 processes with on-disk sessions.

  • 02

    GCP mirror + home writes

    Public GCP ingress for read-only dashboard; privileged writes stay on the home VM.

  • 03

    Origin-bound security

    SMS can never be admin. Each transport signs with its own secret; identity in verified headers.

  • 04

    Web-push alert cascade

    Dashboard PWA service worker delivers VAPID-signed push when WhatsApp self-alert is down.


Stack

Always-on, self-hosted

Long-lived sockets and on-disk sessions under pm2 — deployed to a Google Cloud VM, live day and night.

Node.js broker + router WhatsApp Web TextNow SMS keeper fd-router hot-reload HMAC-SHA256 signed forwards Python card-intake pm2 process manager Owner PWA dashboard web-push alerts
⌂ DashboardDesign ·ClaudeCodexGrokGeminiDeepSeek