Back to all posts
    I Run a $48K Business With Zero Employees. Here's Every System.
    Case Study

    I Run a $48K Business With Zero Employees. Here's Every System.

    CRM, email automation, blog publishing, client delivery, accounting, content creation. 30 systems. 12 connections. One terminal.

    March 1, 2026
    Updated July 14, 2026
    14 min read
    142 views
    by Iwo Szapar

    Everyone shows AI writing one email. Or building one dashboard. Or fixing one bug.

    Nobody shows what happens when 30 systems talk to each other, 24 hours a day, without you touching anything.

    I run a solo business. $48,000+ in revenue. 85 clients served. Zero employees. One terminal window.

    This is not a productivity hack. This is the full architecture of a one-person company where AI handles operations, sales, content, accounting, and client delivery. Every system I built. Every connection between them. Every automation that runs while I sleep.

    Most case studies cherry-pick the impressive parts. This one shows everything, including the parts that break.

    The Stack: One Tool, 12 Connections, 30 Skills

    My entire business runs through Claude Code connected to 12 external systems via MCP (Model Context Protocol):

    • Supabase - Database for CRM, blog posts, client data, accounting
    • Gmail - Email sending and tracking via CLI
    • Google Calendar - Meeting scheduling and reminders
    • Stripe - Payments, invoices, subscription management
    • Resend - Transactional email templates and drip campaigns
    • GitHub - Code repos, issues, pull requests
    • WhatsApp - Client communication via CLI
    • LinkedIn - Prospect research and profile data
    • Google Analytics - Traffic and conversion tracking
    • Chrome automation - Browser tasks, LinkedIn actions
    • Health Check MCP - Product scoring and diagnostics
    • npm registry - Open-source package publishing

    On top of these connections, I built 30+ skills. A skill is a reusable workflow. When I type /draft-email, Claude knows my voice, checks if the recipient is already a client, searches recent sends to avoid duplicates, enriches the prospect via LinkedIn, drafts the email, scores it against a 5-dimension rubric, and only sends if it scores above 75.

    That is one skill. I have thirty.

    Together, this forms a 5-layer context engineering architecture: CLAUDE.md (persistent instructions) → Memory (learned patterns) → MCP (external connections) → Skills (reusable workflows) → Hooks (automated triggers). Each layer compounds on the one below it. The file system is not just storage. It is the prompt itself.

    Monday, 9:14 AM: What Actually Happens

    I open my terminal. Type /begin Fix email template formatting. Here is what fires automatically before I write a single line of code:

    1. Session tracking creates a task in the database with auto-detected priority
    2. GitHub issue gets created and linked to the task
    3. Git branch gets created from latest main (session/task-2738-fix-email-template)
    4. Branch guard hook activates, blocking any accidental edits to production

    I have not typed any code yet. Four systems already coordinated. The branch name follows a pattern that lets every commit auto-link to the task. When I finish and run /end, the system calculates hours worked, creates a pull request, closes the GitHub issue, and marks the task done.

    This is the part nobody talks about: the scaffolding. Every coding session is tracked, branched, and reversible. Not because I am careful. Because the system forces it.

    The CRM That Writes Its Own Follow-Ups

    My CRM lives in Supabase. 10 pipeline stages. 18 filters. Every prospect has: stage, package interest, budget range, timeline, use case, fit score, priority, pain points, and a full activity log.

    When a new prospect comes in from the website chatbot, this happens:

    1. Chatbot captures their name, email, and interest via one of 7 tools (search blog posts, get checkout links, check purchase status, search testimonials, preview questionnaire, get session availability, submit bootcamp application)
    2. Prospect record gets created in CRM with source tracking
    3. Email automation cron picks them up at the next 5-minute interval
    4. System enriches the prospect via LinkedIn (job title, company, recent posts)
    5. Claude drafts a personalized follow-up using my voice profile
    6. Quality gate scores the email: personalization (25 pts), voice consistency (25 pts), tone (20 pts), structure (15 pts), CTA effectiveness (15 pts)
    7. If score is 75+, it queues for sending. If under 60, it regenerates once. If still under 60, it escalates to me as a manual handoff.

    The follow-up emails space themselves: day 3, day 7, day 14. Rate limited to 48 hours between sends. Bounce detection skips bad addresses. Complaint detection permanently removes contacts.

    All of this runs on two cron jobs. One finds targets and generates emails at the top of every hour. The other sends queued emails five minutes later.

    I check the pipeline on Monday mornings. By then, most follow-ups have already happened.

    The Sales Chatbot With 7 Security Layers

    The website chatbot is not a wrapper around ChatGPT. It is a custom agent with function calling, conversation persistence, and 7 security layers:

    1. Cloudflare Turnstile blocks bots with invisible verification
    2. HMAC-SHA256 session tokens prevent spoofing (expire after 1 hour)
    3. Server-side history rebuilding never trusts the client's message history
    4. HTML sanitization caps messages at 500 characters
    5. Output leak detection scans every response for system prompt fragments
    6. Prompt-level guardrails prevent off-topic or harmful responses
    7. Cost controls enforce rate limits (10 messages/minute) and a daily budget cap

    The chatbot auto-opens after 3 seconds on product pages. It handles package recommendations, purchase status checks, and even bootcamp applications. After 20 messages, it transitions to an email capture CTA.

    Admin gets digest notifications twice daily with conversation summaries. If someone seems ready to buy, the system flags them as a hot lead.

    Blog Publishing: Database to SEO in One Command

    I type /publish-blog. Here is the full pipeline:

    1. Essay writer agent creates the draft following a structured protocol
    2. Content evaluator scores it across 5 dimensions (contrarian authenticity, structural clarity, voice consistency, data density, engagement mechanics)
    3. AI slop remover strips banned phrases, hype words, and fake transitions
    4. SEO agent optimizes meta tags, generates OG images, adds JSON-LD structured data
    5. Content gets inserted into blog_posts table with full-text search vectors
    6. Published at /p/[slug] with automatic view counting, reading time calculation, and CDN caching

    The blog archive at /blog shows all published posts with search functionality. Every post has OG tags, Twitter Cards, canonical URLs, and BlogPosting schema markup.

    I have 85+ published posts. Most of the recent ones went from idea to published in under 90 minutes.

    Client Delivery: From Payment to Working System

    When someone buys a Second Brain package through Stripe:

    1. Stripe webhook fires and hits my API endpoint
    2. Webhook handler creates the user, logs the purchase, and sends the confirmation email
    3. For DIY packages: email delivers a ZIP file with the complete system. Done.
    4. For premium packages: email sends questionnaire link. Client fills it out. Calendly link follows.
    5. After the onboarding call: Repo Generator builds their personalized GitHub repository

    The Repo Generator is a Supabase Edge Function. 9-phase pipeline. It reads from a template_files database table (not the filesystem), personalizes 16 placeholders (name, email, expertise areas, content platforms, voice tone, workflow mode, MCP tools), and pushes a fully configured repository to GitHub.

    85 clients have gone through this pipeline. The early ones took me a full day of manual setup. Now it takes 20 minutes of human time per client, and most of that is the onboarding conversation.

    Accounting: Five Banks, One Dashboard

    I run a Polish sole proprietorship. Two income streams. Five bank accounts across four banks. Different currencies. Different CSV formats.

    The accounting system I built handles:

    • Monthly checklist with 6 items (ISG invoice, SB invoices, bank statement, ZUS payment, docs to accountant, tax payment)
    • ISG hours tracking with weekly entries and Monday reminders
    • Bank reconciliation that imports mBank CSVs and auto-classifies transactions
    • Personal finance tracking that imports Revolut and mBank personal statements, auto-categorizes across 16 spending categories, and flags internal transfers
    • Accountant email drafts pre-filled in Polish with revenue summaries, hours breakdown, and signed document links

    The whole system was built in a single 3-hour session because Claude already knew my database schema, API patterns, and coding conventions from previous work.

    The Hook System: Automation Without Thinking

    Hooks are deterministic shell scripts that fire at specific lifecycle events. They are the connective tissue between everything.

    When I send an email via Gmail CLI, a hook auto-logs it to the CRM. When I send a WhatsApp message, another hook tracks it. When I try to edit code on the main branch, a hook blocks me and reminds me to start a tracked session. When I push code, a hook runs type checks and tests.

    11 project hooks. 5 global hooks. 6 lifecycle events. All running silently in the background.

    The Gmail tracking hook was the most valuable. Before it existed, I would send 5 prospect emails and forget to update the CRM. The prospect would get a duplicate follow-up from the automation because the system did not know I had already reached out manually. Now every send auto-syncs. Zero duplicates.

    Content Creation: From Idea to Multi-Platform

    When I create content, the system follows a collaborative workflow:

    1. Research surfaces what people are actually discussing on Reddit, X, and LinkedIn
    2. Formula selection picks from 6 proven structures (Decision Documentation, Failure Arbitrage, Strategic Controversy, Inside Baseball, Trajectory Sharing, Subtle Anxiety)
    3. Hook generation creates 5-7 variations scored on pattern match, curiosity, specificity, and emotion
    4. Structure outline maps each section with engagement triggers
    5. Full draft follows approved structure with voice rules applied
    6. Validation scores 0-100 across three dimensions (viral hook patterns, creator archetype alignment, engagement mechanics)

    LinkedIn posts auto-save to a content queue. Newsletter content goes through a separate evaluation rubric. Everything gets checked against a global banned phrases list.

    One piece of content multiplies into 15+ formats: LinkedIn post, newsletter section, tweet thread, YouTube script, blog post.

    What Breaks

    This system is not perfect. Here is what still fails:

    Context window exhaustion. Long sessions hit Claude's context limit. I lose working memory mid-task. The workaround: structured session notes in the database that persist across context compactions. (The research confirms this is the universal challenge with coding agents.)

    LinkedIn DM tracking. Gmail and WhatsApp sends auto-track to CRM. LinkedIn DMs through browser automation do not. I still manually sync those.

    Template drift. The repo generator reads from a database table, not the filesystem. I spent an entire session editing filesystem templates before realizing they had zero effect on production. Expensive lesson.

    Email quality variance. The 75-point quality gate catches most bad emails. But occasionally a technically-passing email sounds robotic. The rubric measures structure better than soul.

    Branch hygiene. Session branches accumulate. Old branches get accidentally reused for new work. Commits pile up across unrelated tasks. The /end command now auto-cleans merged branches, but I learned this one the hard way.

    I list these because most AI case studies pretend everything works perfectly. It does not. The system works well enough that the failures are manageable, not invisible.

    The Numbers

    Revenue$48,000+ from 85 clients
    Team size1 person + 1 part-time assistant
    AI cost~$200/month (Claude Code + API usage)
    Commits in 90 days1,182 across 78 active days
    Features shipped347
    Bugs fixed327
    MCP connections12 external systems
    Skills30+ reusable workflows
    Hooks16 automated triggers
    Blog posts85+ published
    Email sequences4 active automated flows

    What This Actually Costs to Build

    I will not pretend this was easy. The first month was rough. Building the CRM from scratch. Writing CSV parsers that handle Polish number formatting. Debugging webhook timing issues. Learning that Vercel serverless functions timeout differently than you expect.

    The second month was better. Systems started connecting. The email automation meant I stopped forgetting follow-ups. The blog pipeline meant I could publish weekly instead of monthly. The accounting system meant I stopped dreading tax season.

    By month three, the system ran most of my business operations without daily intervention. I check in on Monday mornings. I handle client calls. I write content. Everything else happens automatically.

    The total build investment was roughly 300 hours across 90 days. That sounds like a lot. But those 300 hours replaced what would have been a part-time operations hire, a CRM subscription, an email marketing tool, a content management system, and an accounting dashboard. Combined cost of those alternatives: $500-1,000 per month, plus the time to manage them.

    My system costs $200/month and gets better every day I use it.

    The Point

    AI did not make me faster. It made me a different kind of worker.

    I do not have a team that handles operations. I have a system. I do not subscribe to 12 SaaS tools. I have one terminal. I do not spend Monday mornings catching up on what happened over the weekend. The system already handled it.

    The gap between "I use AI sometimes" and "AI runs my operations" is not a productivity hack. It is an architectural decision. You either build the connected system or you keep copying and pasting between ChatGPT and your inbox.

    Most people will read this and think "that is cool but I could never build that." Some of them are right. Building this from scratch requires comfort with a terminal and willingness to invest upfront time.

    But you do not have to build it from scratch. That is literally what I sell.

    85 people already have a version of this running. Not identical to mine. Personalized to their work, their tools, their voice, their workflows. But the architecture is the same: persistent memory, connected systems, automated operations, compounding intelligence.

    Go Deeper

    If you want the full system, it starts at Second Brain AI.

    If you want to understand the context engineering principles behind it, grab the free Context Engineering Guide.

    If you want to see a narrower case study first, read how I built the accounting system in 3 hours or why I canceled all my AI subscriptions except one.

    If the technical architecture interests you, The File System Is the Prompt explains the context engineering model underneath. Your Second Brain Is Blind Without MCP goes deeper on how the 12 integrations actually connect. And From Prompt Engineer to Context Architect covers why this skill is becoming the most important career shift of 2026.

    What part of your business would you automate first if you had a system like this?