RunoSO - Business OS for Solo Operators LogoRunoSO
FeaturesPricingTemplatesBlogAbout
Sign inStart free
RunoSO LogoRunoSO

Run your solo business. From one place.

Built in India 🇮🇳

Product

FeaturesPricingBlogChangelogRoadmap

Legal

Terms & ConditionsPrivacy PolicyRefund PolicyCookie PolicyData Deletion

Connect

Twitter/XLinkedInInstagramhello@runoso.in
Made by RunoSO
© 2026 RunoSO. All rights reserved.
Back to Blog

Featured Articles

Build in Public

Why I Ditched Notion & Sheets to Build RunoSO

7 min read
Technical Deep-Dive

How I Built a Zero-Knowledge Vault with AES-256

10 min read
Productivity

Best Freelance Tools in 2026 — Honest Stack Review

11 min read
View all posts
  1. Home
  2. Blog
  3. Client Offboarding That Earns Referrals: The Handover System
Productivity

Client Offboarding That Earns Referrals: The Handover System

By Gautam Parmar15 September 20268 min read
Client Offboarding That Earns Referrals: The Handover System — featured image

Project done. Acme Growth Revamp ships, invoice GOS/25-26/014 ₹1.35L paid, tasks 14/14 done src/app/api/projects/route.ts:28. You send Done, thanks! on WhatsApp, share Drive Final assets, forward hosting IP you DM'd 4 weeks ago now guessing which of 3 acme-server in flat 1Password, and move Notion Acme → Completed. Two weeks later client: Where's repo? Domain expires when? Can you send invoice again? You hunt Drive + GoDaddy + Sheet expiry — 35 minutes. They don't refer. Not because work bad, because ending messy.

Offboarding is not thanks + files. It's the last memory that triggers referral.

Why Go-Live Then Ghost Fails (Notion / Sheets / HubSpot + Drive)

Your current close:

  • Drive / Notion — Final folder with v4_final_really + handover doc link anyone-with-link that breaks in 30 days. No portalTokens tenantId+clientId unique revokedAt src/lib/db/schema-public.ts:169 stable share, no projects status:completed src/lib/db/schema.ts:21 visibility, no expiryDate src/lib/db/schema.ts:153 truth beside asset.
  • Sheets — Assets tab with acme.com GoDaddy expiry 2027-03-12 you typed manually; hosting renewalDate src/lib/db/schema.ts:197 in head, not assetsHosting vaultItemId src/lib/db/schema.ts:198 link. Client asks autoRenew? you re-open GoDaddy — 12-minute hunt × 6 clients = 1 hour weekly.
  • Vault flat — 1Password acme-server, acme-server prod, acme GitHub old flat list 200 entries src/lib/db/schema.ts:125 no clientId/projectId src/lib/db/schema.ts:133. You DM api key in Slack, they DM again next month — leak loop. No AES-256-GCM per-workspace src/lib/vault/crypto.ts:22 + masked •••• src/app/api/vault/route.ts:25 one dossier.
  • HubSpot — Deal Closed Won moves to Completed but vault + assets_domains expiry + assetsCloudflare domainAssetId src/lib/db/schema.ts:169 stay in other tools. Offboarding is 4 hunts, not one export.
  • Invoices — INV-12 in FreshBooks detached from projects budget src/lib/db/schema.ts:35 clientId. Client asks resend last invoice — you search email, not portal.

Result: client remembers chaos, not craft. Referral rate 1:20 vs 1:4 for system handover. You lost 5 referrals/year × ₹1L avg = ₹5L for 30 min missing system.

A great project with messy offboard earns thanks. A tidy offboard earns introductions.

The Linked Offboarding Graph: Portal + Assets + Vault Rotation

In RunoSO tenant_${id} src/lib/db/tenant.ts:47, offboarding is query, not archaeology:

clients(id, status lead|active|inactive src/lib/db/schema.ts:5)
  projects(clientId fk notNull onDelete:cascade src/lib/db/schema.ts:25, status active→completed src/lib/db/schema.ts:21, budget, advance, deadline, githubUrl)
    tasks(projectId fk, status done src/lib/db/schema.ts:42)
  invoices(clientId fk, projectId fk nullable, amount numeric, status paid src/lib/db/schema.ts:58)
  vaultItems(clientId, projectId, category password|server|api-key src/lib/db/schema.ts:123, encrypted)
  assetsDomains(clientId, projectId, expiryDate, autoRenew boolean src/lib/db/schema.ts:154)
  assetsHosting(provider, renewalDate src/lib/db/schema.ts:197, vaultItemId fk src/lib/db/schema.ts:198)
  portalTokens(tenantId+clientId unique, token, revokedAt, lastAccessedAt src/lib/db/schema-public.ts:169)

The 15-minute referral-grade handover:

  1. Mark done. Set projects status:completed src/lib/db/schema.ts:21, verify tasks 14/14 done, invoices status:paid. ClientDetailPageClient src/app/(dashboard)/clients/[id]/page.tsx now shows green completed timeline — client sees finish, not on-hold limbo you left in Trello.
  2. Asset export one view. Open Assets src/app/(dashboard)/assets/page.tsx → filter clientId=Acme → domains expiryDate autoRenew, hosting renewalDate vaultItemId, cloudflare domainAssetId, github repo visibility src/lib/db/schema.ts:178, social handle vaultItemId visible together. Export/paste summary into portal handover note — no GoDaddy + Cloudflare hop.
  3. Vault handover — rotation, not DM. Open vaultItems filtered clientId=Acme masked src/app/api/vault/route.ts:25 → for each server/api-key linked hosting, rotate secret to client-owned vaultItem if required, revoke your vaultItemId link, note rotation in project.notes src/lib/db/schema.ts:32. Client gets credentials via their vault, not Slack plaintext history. Link shows How to store SSH keys & API tokens src/lib/vault/crypto.ts:22.
  4. Portal handover packet. POST /api/clients/[id]/portal src/lib/db/schema-public.ts:169 → portal/[token] holds project progress totalTasks/doneTasks, paid invoices PDF (sendInvoiceEmail portal link src/lib/emails/send.ts:347), asset summary. Client self-serves resend invoice? without ping. Keep revokedAt null for 14 days, then revoke src/lib/db/schema-public.ts:175 — clean ownership.
  5. Referral ask — timed, not needy. Day 3 post-delivery: message Loved shipping Acme Growth Revamp together — portal/[token] holds everything. If you know 1 founder needing similar, intro'd love — I prioritize referred clients. Day 14 if active: personalTasks category:work isToday src/lib/db/schema.ts:237 reminder Follow Acme referral. clientStatus stays active 30 days → inactive src/lib/db/schema.ts:5 automatically if you filter, keeping win-back list warm.

Done becomes closed + referred, not delivered + forgotten.

Offboarding Checklist (Paste into project.notes → Share via Portal)

ItemSource tenant_${id}Done
Projects → completed + 14/14 tasks doneprojects status src/lib/db/schema.ts:21 + tasks status:done☐
Invoices paid GOS/25-26/014invoices status paid amount numeric src/lib/db/schema.ts:58☐
Asset summary domains expiry autoRenew true + hosting renewal + vaultItemIdassetsDomains expiryDate src/lib/db/schema.ts:153, assetsHosting renewalDate vaultItemId src/lib/db/schema.ts:197☐
Vault rotation server/api-key handed, your access revokedvaultItems category server/api-key src/lib/db/schema.ts:123 AES-256-GCM☐
Portal/[token] live revokedAt null lastAccessedAt trackedportalTokens src/lib/db/schema-public.ts:169☐
Referral ask day 3 + day 14 task isTodaypersonalTasks category work src/lib/db/schema.ts:237☐
Client status active→inactive after 30dclientStatusEnum src/lib/db/schema.ts:5☐

One checklist replaces Drive folder v4_final guess.

Mistakes That Kill Referrals

Mistake 1: Treating Drive link as handover.

Drive link anyone-with-link expires, no portalTokens revokedAt control, no invoices self-serve. Client re-asks Where's repo? → reminder of mess. Portal is stable single URL with lastAccessedAt proof they saw it.

Mistake 2: Forwarding vault via Slack DM.

Pasting API key in DM feels fast, trains client your vault = Slack. Insecure pattern where never store passwords https://runoso.in/blog/where-freelancers-should-never-store-passwords explains risk. Use linked vaultItems clientId/projectId handover — rotate, not forward.

Mistake 3: Asking referral at invoice moment.

Paid invoice + same message referral ask reads transactional. Separate: deliver portal packet day 0, referral ask day 3 after they felt organized handover. personalTasks scheduledDate src/lib/db/schema.ts:248 + runDailyRollover keeps ask from being forgotten.

Drive + Notion + HubSpot vs Linked Portal

Offboarding momentDrive + Notion + Sheets + HubSpot + 1Password flatRunoSO tenant_${id} graph
Where's repo?Hunt Drive final folder → Slack DM againprojects githubUrl src/lib/db/schema.ts:34 + assetsGithub techStack src/lib/db/schema.ts:184 one dossier
Domain expiry?Open GoDaddy, check Sheet typoassetsDomains expiryDate autoRenew src/lib/db/schema.ts:153 badge 14/7/3/1/0 src/app/api/cron/daily/route.ts:275 one view
Resend invoiceSearch email INV-12portalTokens portal/[id] shows invoices paid PDF sendInvoiceEmail portal link
Credential staging loginDM acme-server ?? 3 entries which?vaultItems clientId/projectId masked AES-256-GCM linked hosting vaultItemId
Referral generationHope they rememberDay 3 portal + day 14 isToday task → 1:4 referral rate you track via clients status

Messy ending loses future; linked ending multiplies it.

Earn the Intro This Week

  1. Pick one active → completed project deadline passed. Run checklist 15 min.
  2. Generate portal POST /api/clients/[id]/portal → send Handover packet — progress, invoices, assets, logins — live here 14 days.
  3. Schedule personalTasks Follow Acme referral in 3d status:todo isToday → scheduledDate auto rolls until ask day.
  4. After week, count portal lastAccessedAt vs referral intro. System turns done into pipeline.

RunoSO offboards referral-ready — portalTokens handover, assets summary, vault rotation, and timed referral task in one linked flow.

→ Turn Done Into Referrals — Try RunoSO Free


By Gautam Parmar src/app/(marketing)/about/page.tsx:44 — solo founder, Next.js 16 Tailwind v4 Neon Drizzle AES-256-GCM, building in public on X.


Keep Reading

  • Retain before churn: retainer management for freelancers.
  • Never lose credentials at exit: where freelancers should never store passwords.
  • Proposal → project hygiene: freelance proposal to project handover.

FAQ

When do I revoke portal? Keep portalTokens revokedAt null 14 days → client re-download window. Then revokedAt=now src/lib/db/schema-public.ts:175 — clean ownership. Log rotation in project.notes so revive later uses new vaultItem.

What if vault has 30 items for one client? Filter vaultItems clientId/projectId category src/lib/db/schema.ts:123 — rotate only server/api-key linked hosting, archive other. Linked filter finds 3 relevant, not 200 flat list hunt.

How does this earn referrals vs just asking? Portal organization is the proof you run ops — they forward organized packet to peer. Ask without packet is favor; ask after packet is referral with evidence.

Try RunoSO for Free

Manage clients, invoices, vault, content, and finances — all from one beautiful dashboard.

Start free
Meet RunoSO
SaaS
Unified Workspace
Finance & Invoicing
Credentials Vault
Content Pipeline

Unified Workspace

The ultimate command center for solo operators. Replace Notion, Sheets, and password managers.

  • Unified client database
  • Real-time key metrics
  • Intuitive navigation
Start free todayLearn more about RunoSO

Featured Articles

Build in Public

Why I Ditched Notion & Sheets to Build RunoSO

7 min read
Technical Deep-Dive

How I Built a Zero-Knowledge Vault with AES-256

10 min read
Productivity

Best Freelance Tools in 2026 — Honest Stack Review

11 min read
View all posts
Meet RunoSO
SaaS
Unified Workspace
Finance & Invoicing
Credentials Vault
Content Pipeline

Unified Workspace

The ultimate command center for solo operators. Replace Notion, Sheets, and password managers.

  • Unified client database
  • Real-time key metrics
  • Intuitive navigation
Start free todayLearn more about RunoSO

Related Posts

Productivity

Worksuite vs RunoSO: Freelancer Management System India 2026

Worksuite vs RunoSO for India — enterprise FMS for 190+ countries vs solo freelance system with GST, UPI & vault linked. Compare pricing & vault India.

Productivity

Flinggle vs RunoSO: Freelance Management System India 2026

Flinggle vs RunoSO for India — compare GST, UPI, vault & pricing. Flinggle leads + proposals, RunoSO is GST + vault + assets linked India-native system.