Nadia โ€” payments & billing
Clients ยท Nadia ยท biz/clients/nadia/PAYMENTS-AND-BILLING.md

Nadia โ€” payments & billing

How Nadia Omidosu (Nadia O. Educational Psychologist, Centurion) pays us: the once-off build, the monthly care plan, the rails, and the decisions still open. She is the first paying client, so this doubles as the pattern the next one inherits.

Created 2026-07-29. Money ledger: PAYMENTS.md ยท terms playbook: process/03 ยท recurring: process/04 ยท locked prices: PRICING.md.


1. Where it stands today (2026-07-29)

Build invoice INV-2026-001 โ€” INVOICE-2026-001.{html,pdf} in this folder
Amount 5.5 h ร— R1 000/hr = R5 500 โˆ’ 50% founding = R2 750 due
Dated / due 29 July 2026 ยท due 5 Aug 2026 (net 7)
Status DRAFTED, NOT SENT โ€” 4 placeholders unfilled ([EMAIL], [PHONE], bank line)
Deposit taken None โ€” work was delivered first (see ยง5, the exception)
Monthly plan Offered, not chosen: Host R450 R225 ยท Maintain R850 R425 ยท Grow R2 500 R1 250, founding ร—12 from go-live
Client state Approved the preview on WhatsApp ("I like it"), round-1 changes shipped and live
Go-live Not done. Site is still nadiapreview.danielslater.dev (noindexed); nadiaoedpsych.co.za still points at Domains.co.za Sitebuilder

Two things gate the money: Daniel's bank details (build invoice) and go-live on her own domain (monthly billing). Everything below hangs off those.


2. The once-off build โ€” R2 750

Rail: EFT bank transfer, reference INV-2026-001. No payment gateway account exists yet (the business is pre-revenue), and the invoice already says "by EFT or card" โ€” so do not block the send on standing up Paystack. EFT costs nothing, a psychologist in Centurion pays that way by default, and R2 750 is a single transfer, not a subscription.

Sequence:

  1. Fill the 4 placeholders โ†’ re-render the PDF ([NEEDS DANIEL], in COMMANDS.md โ–ถ).
  2. Get the founding trade in writing first โ€” the 50% off the build and the 50%-for-12-months care rate are traded for a named case study + before/after metrics rights. Policy is explicit: no written rights, no discount. A WhatsApp line is enough. Send it with the invoice, not after.
  3. Send the PDF on WhatsApp (the channel she already answers on), email as backup.
  4. Re-date if it slips. The PDF says due 5 Aug; if it goes out in August, regenerate so net-7 still reads honestly.
  5. Log the payment in PAYMENTS.md (status DRAFT โ†’ SENT โ†’ PAID) and send a one-line receipt/"received, thank you" on payment.

Chasing, if it comes to that โ€” she is a healthcare practitioner whose clients rely on the site; this is a relationship, not a collections file:

When Action
Due date + 2 days Friendly WhatsApp nudge, PDF re-attached
+ 7 days Second nudge, offer to split it into two payments
+ 14 days Pause new work (change orders, growth work) โ€” say so plainly
Ever Never take her live site down. Not for R2 750, not for a monthly. It's her practice's front door and it would cost us the case study and the reference

3. The monthly care plan โ€” the part that actually matters

The build is acquisition; the subscription is the business. So the real billing question is not the R2 750, it's whether her R425/mo is still arriving in month 11.

Tier: pitch Maintain (R425/mo founding, list R850) as the default. It's the one that fits her โ€” a solo practice that will want the odd copy change and benefits from the monthly security/performance check. Host is the fallback only if she balks at the price; never lead with it. Grow only if she starts talking about leads and Google rather than upkeep.

Billing starts at go-live on nadiaoedpsych.co.za โ€” not at invoice, not at preview approval. That is also when the 12-month founding clock starts, so:

  • Diarise the revert date (go-live + 12 months) โ†’ R425 โ†’ R850. Tell her the revert date in writing when she signs up, so month 13 is not a surprise that cancels the plan.
  • Send the one-paragraph "what your plan covers / what's extra" note at go-live: the tier, that the included hour is one hour, use-it-or-we-spend-it-on-SEO, that it doesn't roll over, and that anything else is R1 000/hr, minimum 1 hour, half-hour increments, quoted in writing first.
  • Book the recurring monthly slot in the calendar now. An unused month is a cancellation in three months' time.

Rail for the recurring โ€” the one real decision

Nothing is set up. Three options, honestly:

Option Setup Fit for Nadia Verdict
Manual invoice + EFT each month Zero Works, but it's 12 invoices and 12 chases per client, per year Fine for client #1 only
Paystack subscription (card-on-file, ZAR) Account + verification; ~2.9% + R1 โ†’ ~R13 on R425 The intended primary rail in process/03 ยง4; recurring is its whole point Recommended โ€” stand it up in parallel, move her onto it at go-live
Debit order (Netcash / Sage) Mandate paperwork, usually a registered entity Cheapest per-collection, highest friction and the most "corporate" ask Later, if the book grows past ~10 recurring clients

Recommendation: send INV-2026-001 by EFT now; open the Paystack account this week; put her on a Paystack subscription at go-live. If Paystack isn't live by go-live, start her on manual EFT and migrate โ€” do not delay her go-live for a payment rail. [NEEDS DANIEL] โ€” the Paystack account itself, and confirmation that a sole prop (no CIPC registration yet) can onboard.

Updated 2026-08-01 โ€” the once-off goes through Paystack too. Both [NEEDS DANIEL] items above are resolved: the Paystack account exists, and a sole prop can onboard โ€” Paystack SA treats Sole Proprietorship as a Starter sub-type verified on ID + proof of address + a bank confirmation letter, with no CIPC needed (see COMMANDS.md โ–ถ "Leachie Paystack"). So Daniel's call: INV-2026-001 is raised as a Paystack payment request, not EFT โ€” spec at paystack-invoice.json, sent via biz/tools/paystack.mjs invoice. The "EFT now" line above is superseded for the once-off; the recurring plan (subscription at go-live) is unchanged and now has its links ready.

Two consequences: it costs ~R81 (2.9% + R1 on R2 750, netting ~R2 669) where EFT was free; and the Paystack invoice carries a single R2 750 line, because payment requests have no discount field and halving the five line items would restate the rate as R500/hr. The itemised breakdown and the founding-discount narrative stay in the PDF, which goes to her alongside the pay link, not instead of it.

โœ… Unblocked 2026-08-01 โ€” her email is nswart81@gmail.com (Daniel). Worth an eyeball before sending: the surname doesn't match the billing name on the invoice (Nadia Omidosu).


4. Hosting, domain & what she pays for directly

Item Who pays Note
Hosting (Cloudflare Pages, static) Us โ€” inside every care tier Real cost โ‰ˆ R0; this is why Host at R450 works at all
SSL, backups, uptime monitoring Us โ€” inside every care tier
Domain nadiaoedpsych.co.za She pays her registrar directly Keep it in her name. We get delegated access, we don't resell it. Protects her ownership claim and keeps us out of being a domain reseller
Her existing Domains.co.za Sitebuilder hosting She cancels it Once the new site is live and stable. Flag this โ€” it's a saving for her and a good line in the go-live message
Anything new (pages, features, integrations) Hourly, quoted first R1 000/hr, min 1 hr โ€” never absorbed into the monthly

[NEEDS DANIEL] โ€” confirm the "domain stays in the client's name" rule as the standing policy; it isn't written down anywhere yet.


5. Deliberate deviations from the standard terms โ€” read before client #2

Her deal breaks the playbook in three places. All three were correct for a first client and none should become the default:

  1. No 50% deposit. process/03 says 50% books the slot; here the whole build was delivered on spec as the Repaint proof, so there was nothing to deposit against. Client #2 pays 50% up front.
  2. Hourly, not fixed-fee. She's billed 5.5 h ร— R1 000 = R2 750. The campaign material and the site advertise Refresh R2 500 / New site R3 500. Both can't stay true โ€” PRICING.md ยง8.1 holds the open question, and the working answer is fixed-fee for the two campaign SKUs, hourly for bespoke. Practical consequence: don't send Nadia the campaign pamphlet โ€” it prices comparable work R1 000 below her invoice. No retro adjustment; her deal is her deal.
  3. The discount is 50%, not the retired 25โ€“30% band. That's now the settled founding number (PAYMENTS.md, PRICING.md ยง7) โ€” but it is still one founding slot per package, so this closes the founding Repaint slot.

6. Admin hygiene

  • VAT: none. Not VAT-registered, so the invoice shows no VAT line and must not call itself a "tax invoice" โ€” it's an invoice, and the R2 750 is the final number. Watch the R1 m turnover threshold; registering later means every quoted price needs a +VAT decision.
  • Invoice numbering is sequential business-wide, not per-client: INV-2026-001, -002, โ€ฆ Her next one (a change order, or the first monthly if billed manually) is the next number in the book, not INV-2026-001b.
  • Ledger every state change in PAYMENTS.md: DRAFT โ†’ SENT โ†’ PAID, plus a row in the Recurring (MRR) table once the plan starts. That table currently reads MRR R0 โ€” her go-live is the first entry.
  • Keep the PDF + proof of payment in this folder. This is the first revenue in the business;**** it's the record for any future accounting or registration.
  • Time-tracking is on from client 1. Log actual support minutes against her Maintain hour โ€” the M6 checkpoint (>2 h/mo โ†’ bill overflow or move her up a tier) needs real numbers, and hers are the only ones we'll have.

7. Not in scope: payments on her site

Worth stating so it doesn't get assumed. Her site takes no online payments โ€” the funnel is WhatsApp + mailto to her own inbox (POPIA: enquiries go to the practitioner, never to our Discord). Educational-psych assessments are quoted per case and settled by EFT or medical aid, so a checkout would be wrong for her practice today.

If she ever wants deposits for assessment bookings, that's a hosted payment link (Paystack or Yoco) + a confirmation back to her โ€” a new scope item quoted hourly, or the natural first project on a Grow tier. Not a care-plan inclusion.


8. Open items โ€” [NEEDS DANIEL]

# Item Blocks
1 Email, phone, bank name / account holder / account number / branch code Sending INV-2026-001
2 Founding case-study + metrics rights, agreed in writing with her The 50% discount being legitimate
3 Open the Paystack account (confirm sole-prop onboarding) Recurring billing at go-live
4 Confirm her tier โ€” recommend Maintain R425 The go-live message + MRR row
5 Set the go-live date on nadiaoedpsych.co.za Both the billing start and the founding revert date
6 Ratify: domain stays in the client's name; deposit returns to 50% for client #2 Standing policy for the next client