The Marketing Show

client_context / docs / the agency view

Two clients. Two brains. One Discord.

Every client gets a channel and a brain of its own. Somebody on the team types a question in a client's room and the answer comes back from that client's data — never from anyone else's. Multiply the whole picture by however many clients you have; the shape does not change.

One server, one room per client The agency server your team lives here # agency-ops your keys, your billing, your tools # all-things-handy wayne's room · his data only someone is typing… # go-kart-park same shape, different client # next-client # the-one-after-that add a room, add a brain. that is the whole onboarding. ath all things handy gkp go kart park row-level security between them one client's question cannot reach another client's rows Wayne's connections Google Business Profile reviews in · posts out his listing, his login Facebook Page a post goes out after every job page token, scoped to him Voice AI + the website calls in · new sections out his domain, his phone number Go Kart Park's connections Facebook Ads spend, reach, cost per lead rolls up every morning Google Business Profile a different listing entirely their login, not Wayne's The site + the blog a new post, deployed their domain, their repo
KKaylee · #all-things-handy
How did the ads perform over the weekend?
answered from wayne's rows only
Saturday and Sunday, steady. Cost per lead came down.
$41.20spend
7leads
$5.89per lead
facebook ads · rolling up
Weekend campaign — spend, reach, cost per lead
going out · facebook page
Bathroom remodel — six photos, before and after
going out · a new blog post
“What a birthday party actually costs” — now live

↔ swipe the diagram

Discord, one room per client All Things Handy Go Kart Park the seal between them

The room is the tenant

Which channel the question was typed in decides which brain answers. Nobody picks a client from a dropdown and nobody can forget to. Ask in Wayne's room, get Wayne's numbers.

Their keys, not yours

Each client's connections belong to that client — his listing, his page token, his phone number, his domain. The agency room holds the agency's own tools. The two never mix, which is what makes handing a client back to them a real possibility instead of a painful unwind.

Client three is a channel and a row

Nothing in this picture is per-client code. Adding a business means a new room and a new tenant row. The loaders, the agents, and the seal all work the same on day one as they do on client forty.

The interesting question is not how the answer gets written, it is how the system knows whose data to read. Here the channel carries the tenant. A question typed in #all-things-handy is scoped to Wayne before it reaches the database, and the database refuses to return anyone else's rows even if something upstream got it wrong — that is what the dotted line to the other brain means. SET LOCAL app.tenant_id is a belt, and row-level security is the suspenders.