How one freelancer billed 3 client apps on autopilot — and what their "ops dashboard" looks like.
Spoiler: it's not a Notion page with screenshots. It's a chat window the agent updates without me asking. Here's the actual setup, with numbers.
I run 3 client SaaS products on monthly retainers. Combined MRR for the clients: ~$28k. My time per app: about 2 hours per week. The setup is: each app on its own Cloudflare account, an agent that reports daily at 8 AM, alerts that only page me for 4 specific things. Below is the actual config — including the prompts that kept me sane.
The portfolio
Three products, all on retainer:
- Client A — fitness studio booking SaaS, ~600 paying users, MRR ~$12k. Built by me, running 11 months.
- Client B — accounting tool for small e-commerce shops, ~200 users, MRR ~$8k. 6 months in production.
- Client C — coaching marketplace, ~150 active coaches, MRR ~$8k. 4 months in production.
I charge $2k/month flat per client for ops + small features. I do not bill hours. We agreed on a monthly cap of 12 hours per client; I almost never use them.
The morning routine (15 minutes)
Every weekday at 8 AM, the agent posts a summary to a private Slack channel for each client. Same template across all three:
📊 [Client A] Morning report — Mon Apr 27
Yesterday: 87 sign-ups (+12% vs avg), 4 churned
MRR: $11,890 (+$140)
Errors: 2 (both 502s on /export, retried successfully)
Slow queries: 1 (find_bookings, 1.2s p95 — flagged)
Latest deploy: 2 days ago, no regressions
Pending tasks from you (3): see this thread
I read three of those over coffee. Most days, that's it. The "pending tasks" line is the agent reminding me of things I said I'd do, not things it's blocked on.
What only the agent does
Things I used to do every week, that the agent now does:
- Database backups verified. Nightly D1 export to R2. Agent restores it to a sandbox once a week and runs a smoke test.
- Failed payment retries. Stripe webhook → agent retries 3, 7, 14 days, drops to grace period if all fail.
- Onboarding emails. Cron-triggered, sent through Resend, content evolves with feature releases.
- Weekly client digest email. Different from my morning Slack — this goes to the client's CEO with a polished summary.
- Cleanup of stale uploads. R2 orphans removed after 30 days, with a one-line audit log.
None of these were special requests. I told the agent the rule once, in plain English. It built the cron, wired the alert, and pinged me when it was done.
The 4 things that page me
I only get a phone notification for four things:
- 5xx error rate > 1% for 5 minutes. Almost never fires.
- Stripe webhook failed 3x in a row. Critical, billing breaks fast.
- Database storage > 80% of plan limit. Buys me a week.
- SSL cert expiring in <7 days. Cloudflare-managed, basically never fires, but it's a free check.
That's it. No email storm. No dashboard I have to remember to check. The boring stuff is suppressed unless it's actually wrong.
If your ops setup pages you for everything, you stop reading the pages. The job is to page you only for the things that need a human.
The "small feature" loop
Clients ask for things. They used to text me. Now they email a single shared address — and the agent triages.
The triage is simple:
- Bug → agent investigates, drafts a fix, asks me to review
- Tiny feature (under 4 hours) → agent drafts the change, I review, we ship
- Real feature → agent files it as a TODO, I quote it in next month's call
- Out of scope → agent drafts a polite "this is custom work, can we schedule a scope call"
I review every single agent action before deploy. The agent doesn't push to prod without me. That's a hard rule.
The numbers that matter
| Metric | Per client | Total (3 clients) |
|---|---|---|
| Time per week | ~2 hrs | ~6 hrs |
| Retainer revenue | $2,000 | $6,000 |
| Effective hourly | $250 | $250 |
| Infra cost (Cloudflare) | ~$15 | ~$45 |
| buildr subscription | — | $140 (Pro annual) |
| Margin after infra | ~$5,815/mo |
The cap is honest: I'm not pretending I work zero hours. I work 6 hours a week on these three. The other 30 hours of my week go to two new projects on fixed-price scopes, where the rate is even better.
What I'd do differently
- Set the morning report up day 1. I added it for Client A in month 4 and immediately wondered why I'd waited.
- Get every client on the same alerting setup. Three different alert channels was a small chaos.
- Do the weekly client digest from the start. Clients pay retainers happily when they see what they're paying for.
- Don't accept "fix the demo" tickets after launch. Demos are scoped work. Ops is the retainer.
Three SaaS apps on autopilot is a lifestyle, not a hack.
The trick isn't doing more — it's offloading the boring stuff to an agent that posts a morning summary and only pages you when something actually needs a human. The rest of the week is for new work and a long lunch.
Run your client portfolio with a morning report instead of an inbox.
buildr's agent stays after launch — it operates the database, ships small features, files alerts, and posts the morning summary. Built for freelancers, charged once.
Build my app free