DEV Community

komugi
komugi

Posted on • Originally published at komugipan.gumroad.com

How solo web designers lose $8k/year to bad client tracking (2026 fix)

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:

  1. Leads — everyone who inquired, including cold ones
  2. Clients — leads that converted, one row per company
  3. Projects — one row per scoped engagement
  4. 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)
Enter fullscreen mode Exit fullscreen mode

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:

  1. What does your business do? (Situation)
  2. What's not working about your current site? (Problem)
  3. What happens if it stays broken for another 6 months? (Implication)
  4. What would a successful redesign unlock for you? (Need-payoff)
  5. What's your budget range? ($2-5k / $5-10k / $10k+ / Not sure)
  6. 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';
Enter fullscreen mode Exit fullscreen mode

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/Lost and Next 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 = Sent and Due 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 estimate where Stage = 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
Enter fullscreen mode Exit fullscreen mode

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_date when 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
)
Enter fullscreen mode Exit fullscreen mode

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.

  1. Pipeline — sum of Project value estimate where Lead stage = Proposal sent
  2. Booked this month — sum of Project Quoted amount where Start date is this month
  3. Invoiced this month — sum of Invoice Total where Issued date is this month
  4. Collected this month — sum of Invoice Total where 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 overdue formula 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 DesignersView on Gumroad →


Want the complete Client OS for Solo Web Designers I used? View on Gumroad →

Top comments (0)