Photo: Unsplash
The Freelancer's AI Stack — Run Your Whole Business From a MacBook
I run a one-person business from a MacBook Pro. No assistant, no bookkeeper on retainer, no agency back office. Two years ago the admin side of freelancing ate 8-10 hours of my week. Today it eats about three, and the difference is a stack of AI workflows that cost almost nothing to run. This is the full inventory — every function, the actual prompts and tools, honest numbers on time saved, and the hard line on what AI never touches in my business.
The baseline hardware: an M-series MacBook Pro with 32 GB+ RAM so local models run comfortably. Everything below works on that one machine.
Proposals: from project notes to first draft in four minutes
Proposals used to be my most-procrastinated task — 90 minutes each, maybe three per month. Now I keep a proposal template in Markdown and dump raw call notes next to it. The prompt that does the work:
You are drafting a project proposal. Use the TEMPLATE structure
exactly — same sections, same order. Fill it using only facts
from the NOTES. Where the notes don't cover a section, write
[NEEDS INPUT: question] instead of inventing anything.
Tone: direct, confident, no buzzwords. Scope section must list
explicit exclusions. Do not state a price; write [PRICE].
TEMPLATE: <paste>
NOTES: <paste>
The [NEEDS INPUT] instruction is the load-bearing part — it converts hallucination risk into a checklist. The draft is 80% done in four minutes; I spend 20 minutes on the remaining 20%, which is the part that actually wins the work. Saved: ~3 hours/month.
Invoices and follow-ups: Shortcuts plus a template
I’m in the Czech system, so invoices (faktury) go out through Fakturoid, but the surrounding communication is automated with Apple Shortcuts. One shortcut takes a client name and amount, fills an email template, and queues the “invoice attached, due in 14 days” message. A second shortcut handles the awkward part: payment follow-ups. It drafts an escalating sequence — friendly at day +3, firm at day +14 — from templates an LLM helped me write once and I’ve reused for two years. Writing one polite-but-firm reminder in English when you’re annoyed in Czech is exactly the kind of emotional labor AI is good at removing.
Time saved here is small per event but the consistency is the real win: follow-ups actually happen now, and my average days-to-payment dropped from 19 to 12. Saved: ~1 hour/month, plus measurably faster cash flow.
Client calls: local Whisper, because confidentiality isn’t optional
This is the one place where local-first is non-negotiable. Clients tell me things on calls — roadmaps, budgets, internal politics — that I have no right to upload to a transcription SaaS. So: record with permission, then transcribe on-device.
brew install whisper-cpp
whisper-cli -m ggml-large-v3-turbo.bin -f call.wav \
-l auto --output-txt
A one-hour call transcribes in about four minutes on my M3 Pro, and large-v3-turbo handles my Czech-accented English and full-Czech calls equally well — -l auto even survives the mid-sentence language switching Czech clients love. Then a local model (Qwen 2.5 14B via Ollama) extracts structure:
From this transcript, extract: 1) decisions made, 2) action
items with owner and deadline if stated, 3) open questions,
4) anything that changes project scope. Quote the transcript
for #4.
Nothing leaves the laptop. The post-call writeup that used to take 30 minutes takes five, and I’ve stopped losing action items. Saved: ~2 hours/week in a heavy call week.
Contracts: a first-pass reviewer, not a lawyer
When a client sends their standard contract, I run it through a local model before deciding whether it needs my actual lawyer: “List every obligation this places on the contractor, every liability or indemnity clause, IP assignment terms, termination conditions, and anything unusual for a software services agreement. Quote each clause.” Running locally matters again — unsigned contracts are confidential.
This catches the obvious landmines (unlimited liability, work-for-hire overreach, 90-day payment terms) in ten minutes and tells me whether to pay for an hour of legal review. It has flagged real problems twice. It is a triage tool, not legal advice — the model misses Czech-law-specific nuance, which is exactly why the lawyer still exists. Saved: ~1 hour per contract, and one avoided bad clause pays for the whole stack forever.
Bookkeeping: let the LLM write the pandas, not touch the data
My favorite pattern in the whole stack. I don’t paste bank data into a chatbot. Instead I export the bank CSV and have the model write the categorization code:
Here are the column headers and 5 anonymized sample rows from
my bank export. Write a pandas script that categorizes
transactions by counterparty/description keywords into:
software, hardware, travel, subcontractors, tax, personal.
Unmatched rows go to 'review'. Output a per-category monthly
sum and write categorized.csv.
The model sees five fake rows; the script runs locally on twelve months of real ones. The keyword map lives in a dict I extend each quarter. Monthly bookkeeping prep for my accountant went from a dreaded two-hour session to 25 minutes. Saved: ~1.5 hours/month.
The same trick works on time-tracking exports (Toggl CSV): a generated script that shows hours per client per week exposed that my smallest client consumed 22% of my hours for 9% of revenue. I raised the rate. They stayed. That single analysis was worth more than every other item on this page.
The voice problem: making drafts sound like you
AI drafts have a tell — agreeable, padded, slightly American. Clients notice. My fix is a reusable style prompt, built once by feeding the model ten of my real sent emails:
Write client emails in my voice: short sentences, no
exclamation marks, no "I hope this finds you well", direct
asks stated in the first two lines, one closing line max.
Mild dry humor allowed, enthusiasm adjectives banned.
I keep it as a saved system prompt. Drafts now need word-level edits, not tone surgery.
The economics, added up honestly
- Proposals: ~3 h/month
- Invoicing and follow-ups: ~1 h/month
- Call transcription + notes: ~6 h/month
- Contract triage: ~1 h/month (amortized)
- Bookkeeping + time analysis: ~2 h/month
That’s roughly 13 hours a month, or 3+ hours a week — call it 6,000-9,000 CZK of billable time monthly at typical Czech freelance rates. The cost side: whisper.cpp, Ollama, and the models are free; Shortcuts ships with macOS; Fakturoid I’d pay for anyway; one cloud subscription (~$20/month) for the occasional task that needs a frontier model. The MacBook is the only real investment, and you already own it.
What never goes to AI without my eyes on it
The stack works because of what it’s not allowed to do. Three hard rules:
- Pricing decisions. AI can format a quote; it never decides a number. Pricing is judgment about value, relationship, and my pipeline — a model has none of that context and will happily anchor you low.
- Scope commitments. Every sentence in a proposal that promises a deliverable gets read by me, slowly. An AI-hallucinated “includes ongoing support” costs real unpaid weeks.
- Anything legally binding. Contracts, GDPR processing terms, tax filings. AI triages; humans sign. My accountant and my lawyer review less material now, but they review everything that matters.
The honest framing: this stack didn’t replace anyone, because there was no one — it replaced the worst 13 hours of my month so I can sell the best ones. Start with the call transcription pipeline; it’s the highest-leverage piece and the one where local AI’s privacy story isn’t a nice-to-have but the entire point.
One email a month: the upcoming live event + free recording access for subscribers. No spam, unsubscribe anytime.

