A self-hosted customer care desk for one local business. It watches reviews, texts, WhatsApp and email for customers going quiet, drafts the recovery message with an LLM, and holds every word for your approval. Next.js, Postgres, Docker, Claude Code, from a clean machine.
What you build
| Part | What it is | What it does |
|---|---|---|
| Eyes | A Next.js dashboard with four pages | Command Center, Reputation Intelligence, Service Recovery Desk, Review Engine. Every number carries a sentence saying what it means in dollars. |
| Brain | Claude Code, then an LLM through OpenRouter or Ollama | Claude builds it. The runtime model drafts recovery replies, review asks and public review responses, with a fallback chain that never fails silently. |
| Memory | Postgres, ten tables, money in cents | Customers, events, signals, cases, drafts, reviews, jobs, requests, daily health snapshots. Every event is idempotent by channel and id. |
| Nervous system | One ingest API and one outbound contract | POST /api/ingest takes every channel in one shape. Approved drafts go out through signed webhooks; a send that is not confirmed is flagged, never assumed. |
| Judgment | A rules engine in a JSON file | Repeat customer gone quiet, unopened emails, unanswered texts, low reviews, negative sentiment. Weighted into a risk score and a business-wide health score you can tune per trade. |
| The human boundary | The Needs-your-OK queue | Edit, Hold, or Approve and send. There is no auto-send setting anywhere in the code, on purpose. |
Where this comes from
Structure Webworks published "The AI Customer Care Department For Local Business": an eight-module system where three modules do the work — Reputation Intelligence catches customers going quiet, a Service Recovery Desk drafts the apology, a Review Engine asks happy customers for reviews at the right moment — and an Orchestrator rolls it into one page with a human approval layer on top. The link is in the files box. It is a good map, and the human boundary in it is the part worth copying exactly.
Their article quotes a first-month dollar figure. This pack does not repeat it. The dashboard you build computes its numbers from job values you actually record, or says "not enough data yet." That is principle four of the project brief, and Claude is told to refuse to invent a number.
What you build
When it runs, it feels like a receptionist who remembers everyone. A customer who has not booked in ninety days, or opened the last three emails, or answered a text in two days, shows up on a table with a dollar value next to the name and the quiet signal that put them there. A reply is already drafted. You read it, fix a word, and press Approve. The one thing it deliberately does not do: send anything on its own. There is no setting for that, and the prompts tell Claude not to add one.
Every channel arrives through one door, POST /api/ingest, in one shape. The app never
learns what Google, Twilio or WhatsApp look like — that is the next pack, where n8n
becomes the nervous system and plugs each channel into that door. This pack ships with
a demo mode instead: forty fictional customers, seven of them slipping away, so the
whole story is on screen the first time you open it.
Do you need this? Be honest first
If you have thirty customers and you know all of them by name, you need a notebook and the discipline to text people back. This is for the business where reviews land unread, three people answer the same complaint on three channels, and a good customer fades out because nobody noticed the silence. It replaces the noticing and the first draft. It does not replace the owner's apology — that part stays yours by design.
What you need
Pick the machine first:
| Option | Good for | Runtime model |
|---|---|---|
| Any laptop — Windows with WSL, Mac, or Linux with Omarchy | Learning and building | OpenRouter free models |
| A Mac mini with 64 GB or more | Running it at home with local AI | Ollama with qwen3:32b or llama3.3:70b |
| A small VPS | Reachable from anywhere, 24/7 | OpenRouter |
Every option needs Claude Code logged in (Pro, Max or Team), Docker, Node and git. The
pack assumes none of them are installed: the setup guide starts at "open a terminal"
(or install one — Windows Terminal, Tabby, PuTTY, Terminal.app, or Super + Return on
Omarchy) and ends when claude, docker and node all answer. It covers the
OpenRouter account (free models first, $10 of credit when the drafts go to real
customers), Ollama on a 64 GB Mac, and a VPS if you go that way. Nothing of the
author's is in it; every credential is yours.
The setup guide is one HTML file you open in a browser. Every command has a copy button, every step has a checkbox, and a progress bar at the top shows how far along you are. Your progress is saved in that browser.
What is in the zip
customer-care-dept/
README.md the document: what, why, hosting, the accounts, the folder map
index.html the clickable setup guide with all ten prompts (same as the browser link above)
COSTS.md every cost, with the date it was read
TROUBLESHOOTING.md the errors people hit, per platform and per prompt, with fixes
CREDITS.md where the idea comes from, what was verified, terms
paths/ one README per platform: Windows WSL2, Mac Apple Silicon, Linux Omarchy
prompts/ 00-project-brief ... 09-tests-and-smoke
assets/ the cover art
What was verified and what was not
The setup guide was opened in a real browser and driven by a script: the three platform tabs, the progress bar, the checkboxes, the saved progress, and the copy buttons all work — including from a downloaded file, where the modern clipboard API silently fails and the guide falls back to the older method. The install commands are the current official ones for WSL, Homebrew, Docker, nvm, pacman and Claude Code as of 2026-08-30; they were not executed end to end on three fresh machines for this release.
The ten prompts were written against a reviewed design and have not been run as a sequence. Every prompt ends with a "how you know it worked" check, and prompt 09 makes Claude break the code on purpose to prove the tests can fail. If a prompt breaks on your machine, post the full error and the platform in the community.
Read the prompt before you run it
Hand each prompt to Claude first and ask what it plans to build. Compare that to what the prompt says. A prompt costs a minute to fix. A wrong build costs an afternoon.



