I trade as a sole trader in Ireland. A handful of clients, a few ongoing projects, the usual mix of retainers and one-off engagements. The natural place for that kind of operation is a stack of SaaS — Xero for the books, HubSpot for the CRM, Notion for the docs, Docusign for the contracts. Maybe Stripe. Maybe a project tool. Maybe a separate invoicing app that doesn't talk to any of them properly.
I don't use any of that. I use one private Git repo with about thirty markdown files in it, a templates folder, and an inbox/ directory where I dump raw messages and receipts for Claude Code to sort out. That's the whole stack.
It's better than it sounds. Here's how it works.
The structure
One directory on my laptop. Everything lives there.
havenga-labs/
├── CLAUDE.md # Instructions for Claude Code
├── README.md # For humans
├── _config/
│ ├── business-details.md # IBAN, CRO no., addresses, email
│ ├── rates.md # Day, hourly, per-client rates
│ ├── tax-thresholds.md # PRSI cliff, VAT threshold, etc.
│ └── invoice-template.md
├── clients/
│ ├── _index.md # Master list
│ ├── client-a/
│ │ ├── client.md # Legal entity, contacts, billing model
│ │ ├── notes.md # Rolling notes, latest at top
│ │ └── messages/
│ └── client-b/...
├── projects/
│ ├── _index.md
│ └── 2026-05-shortname/
│ └── project.md # Scope, fees, status
├── finances/
│ └── 2026/
│ ├── income.md # Invoices issued + payments
│ ├── expenses.md # By category
│ ├── infrastructure.md # Subscription costs allocated per client
│ └── tax-summary.md # Running calc — PRSI cliff, VAT threshold
├── invoices/
│ ├── _register.md # Sequential master register
│ └── 2026/
│ └── HL-2026-0001.html
├── contracts/
│ └── client-a/
│ └── 2026-consulting.docx
├── templates/
│ ├── invoice.html # The actual PDF template
│ ├── proposal.md
│ └── email-templates.md
└── inbox/
└── _dump-here.md # Drop raw stuff, ask Claude to file
Nothing exotic. Folders for what you'd expect. The shape is the same shape an accountant or a tax inspector would draw on a whiteboard — clients, projects, money in, money out, the contracts behind it all.
The two files that make it work
1. CLAUDE.md — the system spec
Claude Code reads this file on every session. It's the constitution. Mine includes the conventions (“invoice numbers are HL-YYYY-NNNN, sequential, never reused”), the workflows (“when I dump something in inbox/, file it; when I ask for an invoice, get the next number from the register and update both _register.md and finances/YYYY/income.md”), and the cautions (“flag the PRSI cliff at €5,000 net profit, flag VAT threshold approach, never give definitive tax advice”).
It's about 80 lines. It replaces a small SaaS contract's worth of automation rules.
2. inbox/_dump-here.md — the funnel
When a client WhatsApps me, I paste the message into inbox/ with a quick filename. When I get a receipt, I drop the email text or screenshot in there. When I have a half-formed idea, same. Maybe once a week I open Claude Code and say “file the inbox.”
Claude reads everything, identifies what it is (client message? receipt? proposal idea?), files it into the right folder, updates the relevant indexes, logs it as income or expense if it's a money movement, and tells me what was filed. The inbox empties. The repo state catches up with reality. Total elapsed time: about thirty seconds.
Why it's better than the SaaS stack
It's all one source of truth
When I want to know how DPL is going commercially, I open one client file. The contacts, the billing model, the rates, the open items, the notes. Not five tabs. When I want to know my year-to-date numbers, I open finances/2026/tax-summary.md. When I want to find the last message a client sent, it's in their messages/ folder.
Cross-referencing is just file paths. Claude can read a client file and an income file and a tax-summary file in one breath and tell me how the picture changes if I take on a new engagement. Try doing that across Xero, HubSpot, and three Notion databases.
The audit trail is free
Every change is a Git commit. If Revenue ever asks me when I issued an invoice or recorded an expense, I have a timestamped, immutable record of every modification. No SaaS gives you that for free.
It's portable
The repo lives on my laptop and pushes to a private GitHub. If GitHub disappears tomorrow, I have a zip backup. If I want to move to a different machine, I clone and I'm running. No proprietary export format, no “sorry, that feature is on the next tier.”
It compounds with Claude Code
This is the part that surprised me. The repo isn't just readable by Claude — it's operable. I can say “generate an invoice for Client X for the May DPL platform fee” and Claude will look up the rate, get the next invoice number from the register, render the HTML template, update the register and the income log, and tell me where the file is. The whole loop, in one prompt.
The same operation through Xero is at least five clicks, a separate trip to the bank app, and a manual reconciliation if anything was non-standard. The SaaS is faster than paper but slower than this.
What it's not good for
I want to be honest about this.
- Anything where statutory submission is automated. I still file my tax returns manually through Revenue's portal. The repo gives me the numbers, but no API hands them off. For a higher-volume business that needs Making-Tax-Digital style integration, plain markdown isn't enough.
- Multi-user workflows. I'm a sole trader — one head, one set of decisions. The moment two people need to edit the same client file, you've reinvented Notion and you're going to want the real one.
- People who don't like the command line. The repo is friendly. Claude Code is friendlier than people expect. But there's still a moment where you're in a terminal and that has to feel okay.
If you're a sole trader, freelancer, or one-person operation who's already comfortable with Git, the trade is great. If you're scaling past two or three people, this will groan; pick a real tool.
Set-up time
The whole thing took an afternoon to scaffold and a few sessions of iteration after that to get the conventions right. The CLAUDE.md file changed a few times in the first month as I noticed Claude making the same small mistake twice. After that, it's stable.
Maintenance is: a quick “file the inbox” once or twice a week, a monthly review of the tax-summary file, a quarterly clean-up of the indexes. Less than the SaaS stack it replaced — possibly significantly less.
If you want to try it
I'm planning to open-source a stripped version of the scaffolding — a generic CLAUDE.md, the folder layout, the invoice template — so anyone can fork it and adapt. Ping me if you'd find that useful and I'll prioritise it.
The pitch isn't that markdown is magical. It's that your operation probably needs less software than the industry has convinced you it does — and a small, well-named directory you fully control is a surprisingly good place to run a business from.