CASE FILE 001 · SOFTWARE
The back office.
One system that lets a tiny agency sell online, set up every client by itself and run AI agents with guardrails.
- Built byGrady, with AI coding agents
- StackPHP · SQLite · plain JS
- FrameworksNone
- StatusLive since Oct 2026
the demo is a made-up HVAC company. look around, nothing saves.
The problem
A one-person agency can’t afford a stack of SaaS subscriptions, and it can’t afford to type the same client details into five places either. So we built the whole back office once, as one system on plain shared hosting.
What’s in it
- A store with real checkout. Fixed-price packages, a cart with rules, Stripe payments and subscriptions. Prices live in one file, so the site and the bill can’t disagree.
- A CRM that sets itself up. Paying turns into a contact, a won deal, an invoice, a project and to-dos, with no typing.
- Client portals. Sign-in links instead of passwords. Projects, approvals, files, invoices, plans and live stats.
- Our own analytics. Cookie-free visitor stats we wrote ourselves, for our sites and every client site.
- Website care. Uptime checks every 15 minutes, weekly security scans, monthly reports.
- A free website checkup anyone can run on syndicatemarketing.co, plus a help center, booking, quotes and invoices.

Where the AI fits
Four agent jobs run on schedules. Each one does a narrow job through an API we designed, and the rules sit in code it can’t argue with.
- Outreach writer. Researches local businesses and drafts a personal first email.agent
- The send rules. Daily limits, opt-outs, a do-not-contact list, allowed links only.code
- Reply handler. Answers replies, or hands them to Grady when a person should.agent
- Website builder. Drafts paid client sites into a sandbox that can’t publish.agent
- Draft review. Grady approves every draft before a client sees it.person
- Blog drafts. One a week, published only when Grady says so.person
Calls we made
- Boring on purpose. PHP and SQLite on ordinary shared hosting. No framework upgrades to chase and no stack of SaaS bills.
- Webhooks can’t be trusted alone. Every payment is double-checked against Stripe on a schedule, so a lost message never loses an order.
- Tests on the money. The store, quotes and booking each have end-to-end browser tests we rerun before shipping changes to them.
