It's Tuesday at 11 PM. You just finished a landing page revision for a client, opened Gmail, and saw three unread threads from last month. One is asking for a quote you never sent. Another is a client wondering where their invoice went. The third is a referral that went cold because you never replied.
I've been there. For the first two years of freelancing, I ran my web design business out of Gmail stars, a messy Trello board, and a Google Sheet called invoices_final_v3. I thought I was organized. Then I did the math.
The real cost of not having a client system
I audited my 2023 pipeline and found this:
- 4 leads ghosted because I replied >72 hours late — average project value $2,200 = $8,800 lost
- 6 invoices paid 30+ days late because I forgot to send reminders — cash flow gap of ~$14k across the year
- 11 hours/week spent digging through email, Figma links, and Slack DMs to find project context
- 2 scope creep incidents where I did ~$1,500 of unpaid work because I never wrote down what was agreed
That's roughly $10k in missed revenue plus ~570 hours of admin in one year. For a solo designer charging $75/hr, that admin time alone is worth $42k if you could bill it instead.
This article is the system I wish I'd built in year one. It's a Notion-based Client OS with four connected databases, a weekly review ritual borrowed from GTD, and an invoice pipeline that actually gets paid on time. No SaaS subscriptions, no Zapier bills, no Honeybook lock-in.
Let's build it.
Why Notion (and not Honeybook, Dubsado, or a real CRM)
Before I get emails: yes, Honeybook and Dubsado exist. I used Dubsado for 8 months. Here's why I migrated out:
| Tool | Monthly cost | Flexibility | Learning curve | Client-facing UX |
|---|---|---|---|---|
| Honeybook | $39/mo | Low | Low | Polished |
| Dubsado | $40/mo | Medium | High | Dated |
| Bonsai | $25/mo | Low | Low | OK |
| Notion + Stripe | $10/mo | High | Medium | DIY |
| Airtable + Stripe | $20/mo | High | Medium | DIY |
For a solo designer doing 2-5 projects per month, the SaaS tools cost $400-500/year and force you into their workflow. Notion costs ~$10/mo, bends to how you actually work, and lets you embed Figma, Loom, and Stripe payment links directly in project pages.
The tradeoff: you have to build it. That's what the rest of this post is for.
The four databases every freelance Client OS needs
At minimum, a solo designer's system needs four linked databases:
- Leads — everyone who inquired, including cold ones
- Clients — leads that converted, one row per company
- Projects — one row per scoped engagement
- Invoices — one row per invoice, linked to a project
Here's how they relate:
Lead (1) ──converts──▶ Client (1) ──has many──▶ Projects (N) ──has many──▶ Invoices (N)
The key insight most people miss: Leads and Clients should be separate databases. Why? Because 60-70% of your leads won't convert, and you don't want dead leads polluting your active client list. But you also don't want to delete them — cold leads often reheat 6 months later.
Lead database schema
Minimum fields:
- Name (title)
- Source (select: Referral, Twitter, Cold email, Webflow showcase, etc.)
- Inquiry date (date)
- Stage (select: New → Replied → Call booked → Proposal sent → Won / Lost / Ghosted)
- Project value estimate (number, currency)
- Next action (text)
- Next action date (date)
- Notes (text)
The two fields that changed my life: Next action and Next action date. Every lead always has a defined next step and a date. If it doesn't, it's not a lead — it's a wish.
Client database schema
- Company name (title)
- Primary contact (text)
- Email, timezone, preferred communication (Slack / email / Loom)
- Relationship status (select: Active, Paused, Past, Do not work with again)
- LTV (rollup from linked invoices)
- Projects (relation → Projects DB)
The Do not work with again tag sounds petty. It's not. Three months in, you will have a client who pays late, scope-creeps, and responds to every Figma comment with "can we jump on a call?" Flag them. Future-you will thank present-you.
Projects database schema
- Project name (title)
- Client (relation → Clients)
- Status (select: Proposed, In progress, In review, Complete, On hold)
- Deliverables (multi-select or checkbox list)
- Start date, deadline
- Quoted amount, quoted hours
- Actual hours (rollup from time entries, or manual)
- Figma link, GitHub repo, staging URL
- Scope doc (text — paste the agreed scope here, dated)
Invoices database schema
- Invoice number (title, format:
INV-2026-001) - Project (relation)
- Amount, tax, total
- Issued date, due date, paid date
- Status (select: Draft, Sent, Paid, Overdue, Disputed)
- Stripe/payment link
- PDF (file attachment)
The SPIN-style intake form that filters bad leads
Most solo designers book every discovery call. That's a mistake. An hour on Zoom with a tire-kicker is an hour you could've spent on billable work.
Borrow from the SPIN selling framework (Situation, Problem, Implication, Need-payoff). Before booking a call, send a 6-question form:
- What does your business do? (Situation)
- What's not working about your current site? (Problem)
- What happens if it stays broken for another 6 months? (Implication)
- What would a successful redesign unlock for you? (Need-payoff)
- What's your budget range? ($2-5k / $5-10k / $10k+ / Not sure)
- When do you need this live?
Question 5 is the filter. If someone selects "Not sure" and their business has under 5 employees, I reply with my rate card instead of booking a call. This alone saved me ~4 hours/week.
Here's a Tally/Typeform redirect snippet for the Thanks page:
// On form submit, route based on budget
const budget = formData.get('budget');
const redirectMap = {
'10k+': '/book-strategy-call',
'5-10k': '/book-discovery-call',
'2-5k': '/rate-card',
'not-sure': '/rate-card'
};
window.location.href = redirectMap[budget] || '/rate-card';
The Friday review ritual (borrowed from GTD)
David Allen's Getting Things Done has one practice that matters more than all the others combined: the Weekly Review. For a freelance Client OS, here's the 30-minute version I run every Friday at 4 PM:
Friday Review checklist
- [ ] Open Leads DB, filter by
Stage != Won/LostandNext action date <= today - [ ] For each overdue lead: reply now, or move to Lost with a reason
- [ ] Open Projects DB, filter by
Status = In progress - [ ] For each active project: is the next deliverable on track? If not, message client today, not Monday
- [ ] Open Invoices DB, filter by
Status = SentandDue date <= today + 7 - [ ] Send reminder for any invoice due in the next 7 days (template below)
- [ ] Open Invoices DB, filter by
Status = Overdue - [ ] Send firm follow-up with late fee reference
- [ ] Update pipeline total in dashboard (sum of
Project value estimatewhereStage = Proposal sent)
30 minutes. Every Friday. Non-negotiable. This one ritual is what turned my freelance income from "lumpy" to "predictable."
The invoice follow-up sequence that actually works
Here's the dialogue that plays out with 40% of clients if you don't have a system:
You (day 0): "Hey Marcus, invoice INV-2026-014 attached, due in 14 days."
Marcus: (silence)
You (day 45, awkwardly): "Hey, just checking in on that invoice from last month 😅"
Marcus: "Oh! I thought my assistant paid it. Let me check and get back to you."
(Marcus does not get back to you. You send another email day 60. Paid day 73.)
Here's the sequence I run now, templated in Notion and copy-pasted into Gmail:
Day 0 (invoice sent):
Hi Marcus, invoice INV-2026-014 for the homepage redesign is attached. Amount: $3,200. Due: Feb 14. Payment link: [Stripe]. Let me know if anything looks off.
Day -2 (friendly reminder, 2 days before due):
Hi Marcus, quick heads up — INV-2026-014 is due this Friday. Here's the link again in case it got buried: [Stripe]
Day +3 (past due, still warm):
Hi Marcus, INV-2026-014 was due on Feb 14 and I haven't seen payment come through yet. Could you confirm it's queued up, or let me know if there's a blocker?
Day +10 (firm):
Marcus, INV-2026-014 is now 10 days past due. Per our agreement, a 5% late fee of $160 applies after 14 days overdue. Please settle by Feb 28 to avoid the fee.
Day +21 (final):
Marcus, this is my final notice on INV-2026-014 before I pause all active work on your account and forward this to collections. Please remit $3,360 (invoice + late fee) by end of week.
I've used this exact sequence for two years. Zero invoices have made it to day 21. The firm-but-professional day +10 message is where 90% of slow payers suddenly remember to pay.
Pricing: the RICE-style decision matrix for taking projects
Saying yes to the wrong project costs more than saying no to a good one. I use a simple scoring rubric (loosely inspired by the RICE prioritization framework product teams use) before accepting any project above $3k:
| Factor | Weight | Score (1-5) |
|---|---|---|
| Project value vs. my minimum rate | 3x | ? |
| Timeline realism (not rushed) | 2x | ? |
| Client communication quality so far | 2x | ? |
| Scope clarity | 2x | ? |
| Portfolio value (would I show this?) | 1x | ? |
| Referral potential | 1x | ? |
Multiply each score by the weight, sum them up. Anything under 30/55 is a pass. Anything 30-40 is a "negotiate". Above 40, take it.
This felt overly mechanical at first. After I used it to turn down a $12k project that scored 22 (vague scope, rushed timeline, client who "just wants it clean") and later heard the designer who took it ended up in a scope-creep nightmare for 4 months, I stopped questioning the rubric.
Scope docs: the one-pager that prevents scope creep
Every project, before I start, gets a one-page scope doc inside the Notion project page. The structure:
## Project: [Name]
## Agreed scope (as of [date])
### In scope
- Home, About, Services, Contact pages
- Mobile responsive breakpoints at 375/768/1440
- 2 rounds of revisions per page
- Webflow CMS setup for blog (max 3 collection types)
### Out of scope (billable at $95/hr if requested)
- Copywriting
- Custom illustrations
- SEO audit
- Migrating old blog content
### Timeline
- Kickoff: Feb 3
- Design review: Feb 17
- Dev handoff: Mar 3
- Launch: Mar 14
### Payment
- 50% deposit ($3,200) on signing
- 50% ($3,200) on launch
- Late fee: 5% after 14 days overdue
The magic is the Out of scope section. When the client says week 3, "oh, can you also migrate the 40 old blog posts?", you paste this doc back and say "happy to — that's 6 hours at $95, I'll add it to the final invoice." No arguments. It's written down.
Automations worth building (and ones that aren't)
A lot of YouTube tutorials will have you wiring up Notion + Zapier + Stripe + Gmail with 15 zaps. Most of it isn't worth the setup time for a solo designer.
Worth building:
- Stripe webhook → Notion: when invoice paid, update status automatically
- Notion formula: auto-calculate
Days overdue=today() - due_datewhen status = Sent - Calendly → Notion: new lead auto-created when someone books a call
Not worth building (for under 10 clients):
- Auto-send invoice emails (just use Stripe's built-in)
- Slack notifications for every Notion change (noise)
- Complex lead scoring (your gut works fine at this scale)
- Client portals with custom auth (share Notion pages publicly with view-only)
Here's the one formula I actually recommend — it drives my weekly review:
// Notion formula for "Days overdue" in Invoices DB
if(
and(prop("Status") == "Sent", prop("Due date") < now()),
dateBetween(now(), prop("Due date"), "days"),
0
)
Sort the invoices database by this column descending. Anything >0 gets a reminder that day.
The dashboard view that tells you if this month is bad
One Notion page. Four numbers. Updated live via rollups.
-
Pipeline — sum of
Project value estimatewhere Lead stage = Proposal sent -
Booked this month — sum of Project
Quoted amountwhere Start date is this month -
Invoiced this month — sum of Invoice
Totalwhere Issued date is this month -
Collected this month — sum of Invoice
Totalwhere Paid date is this month
If Pipeline drops below 2x your monthly target for more than 2 weeks, it's time to do outreach. Don't wait until you have no work and panic-discount yourself.
I review these four numbers every Monday morning, before email. Takes 90 seconds. It's the difference between steering the ship and being steered by it.
Putting it all together
If you build this from scratch, here's a realistic timeline:
- Week 1: Set up 4 databases with all fields and relations
- Week 2: Build intake form, connect to leads DB, write SPIN questions
- Week 3: Create invoice templates, wire up Stripe links, write the 5-email follow-up sequence
- Week 4: Build dashboard, formulas, and migrate existing clients in
About 25-35 hours of setup. If you're charging $75/hr, that's ~$2,500 of your time — but it pays for itself within 2 months by not losing a single lead or late invoice.
Or, you can skip the setup.
The shortcut: Client OS for Solo Web Designers
I got tired of rebuilding this for every designer friend who asked, so I packaged the entire system into a single Notion template: Client OS for Solo Web Designers.
What's inside:
- All 4 pre-built databases (Leads, Clients, Projects, Invoices) with relations wired up
- SPIN intake form template + redirect logic
- The 5-email invoice follow-up sequence (copy-paste ready)
- RICE-style project scoring rubric
- Scope doc one-pager template
- Friday Review checklist built as a recurring Notion task
- Live dashboard with pipeline / booked / invoiced / collected rollups
- 12 pre-built invoice templates (deposits, milestones, retainers, late fees)
- The exact
Days overdueformula and Stripe integration instructions
It's $39 one-time, not a subscription. Cheaper than one month of Honeybook, and you own it forever.
I use this exact system for my own client work. The Notion template is the one I duplicate at the start of every year.
CTA
If you've been running your freelance business out of Gmail stars and a messy spreadsheet, the cost isn't the hours — it's the ghosted leads and late-paid invoices you never noticed. Build your own from this guide, or grab the one I already built.
I systematized all of this into Client OS for Solo Web Designers — View on Gumroad →
Want the complete Client OS for Solo Web Designers I used? View on Gumroad →
Top comments (0)