# PRD: Predictable Freelance Growth System

> **Version:** v1
> **Created:** 2026-05-12 15:01
> **Score:** 30/40 | **Decision:** BUILD
> **Source:** freelance-client-visibility__scored-demand__20260508-0844.md

---

## 1. Problem & User

**Target User:** Solo freelancers and micro-agencies (1–3 people) who are competent at their craft — web design, brand design, no-code development, copywriting — but lack a repeatable system to win clients consistently. Revenue is unpredictable, outreach is sporadic, and pricing decisions are made by gut feel.

**Core Pain:** Most freelance business management tools (Bonsai, HoneyBook, Dubsado) focus on contracts and invoicing — admin work after the client is already won. Nobody focuses on the growth workflow: weekly lead targets, follow-up queues, referral asks, package pricing, and capacity-based revenue planning.

**User Quote:** "Most freelance web designers undercharge, overwork, and quit. Not because they lack skill. Because they lack systems."

---

## 2. Target Outcome & KPIs

- **Primary:** User completes first weekly planning session and identifies ≥ 3 follow-ups due within 5 minutes of signup
- **PLG conversion:** Trial-to-paid ≥ 12% within 14 days
- **Retention:** 60-day retention ≥ 45% (user logs at least one lead or follow-up per week)
- **Revenue signal:** User attributes ≥ 1 new project win to the system within 30 days

**KPIs:**
- Time-to-first-lead-entry < 5 minutes
- Weekly active users (logged action) ≥ 50% of paid users
- Churn < 8%/month

---

## 3. MVP Scope (In)

1. **Lead tracker** — pipeline stages: Identified → Contacted → Followed Up → Proposal Sent → Won/Lost; add leads manually or via quick import
2. **Follow-up queue** — system surfaces leads due for follow-up today based on last-contact date + configurable follow-up interval
3. **Package pricing** — define service packages (name, deliverables, price); used in capacity math
4. **Referral tracker** — log referral sources, send referral asks on a reminder cadence
5. **Weekly dashboard** — shows: leads to contact today, follow-ups due, booked capacity %, revenue gap to monthly target
6. **Revenue planner** — set monthly revenue target, see how many projects at current package prices are needed to hit it

---

## 4. Out of Scope

- Contracts, proposals, or invoicing
- Client portal
- Time tracking
- Calendar sync
- AI-generated outreach copy
- Email sending (reminders only, not sequences)
- Team collaboration / multi-user

---

## 5. User Flow (Aha Moment in ≤ 5 min)

1. User lands → headline: "Stop guessing. Start a weekly client system that actually works."
2. Clicks "Start Free Trial" → email signup (no credit card)
3. **Onboarding wizard (3 steps, < 2 min):**
   - Step 1: Set monthly revenue target ($X/mo)
   - Step 2: Add 1 service package (name + price)
   - Step 3: Add 3 leads you're currently pursuing (name, last contact date)
4. **[Aha Moment — 4 min after signup]** → Lands on Weekly Dashboard showing: "2 follow-ups overdue. You need 4 more projects at $2,500 to hit $10K this month. 1 referral ask due."
5. Clicks "Mark as Followed Up" on first lead → satisfying completion state
6. After 14-day trial, paywall: "Your trial ends in 2 days. You have 7 active leads in your pipeline."

**Paywall trigger:** Trial expiry (14 days) — user has live data in the system, making abandonment costly

---

## 6. Functional Requirements (P0)

### Onboarding
- F1: 3-step wizard — revenue target, first package, first 3 leads — completes in < 2 min
- F2: Immediate redirect to weekly dashboard post-wizard (no blank state)
- F3: Dashboard always shows actionable items on first load

### Core Features
- F4: Lead tracker — Kanban-style pipeline (5 stages); add/edit/move leads; log last-contact date and notes
- F5: Follow-up queue — surfaced automatically on dashboard; configurable interval (default 5 days); mark done updates last-contact date
- F6: Package pricing — CRUD for service packages; used in capacity and revenue calculations
- F7: Referral tracker — log who referred work, add referral sources, set reminders to ask for referrals (weekly/monthly cadence)
- F8: Revenue planner — inputs: monthly target, current booked projects; outputs: projects needed at each package price, % of target covered

### Paywall & Conversion
- F9: 14-day free trial, full access, no credit card
- F10: Trial countdown banner on day 10, 12, 14
- F11: Trial expiry → soft block (can view but not add new leads/packages); prompt to upgrade
- F12: Stripe checkout — $19/mo; success → full access restored
- F13: Post-signup email sequence: day 1 (setup checklist), day 3 (follow-up reminder), day 7 (revenue gap check), day 12 (trial expiry warning)

---

## 7. Data Model

```
users
  id, email, monthly_revenue_target, niche, trial_ends_at, tier (trial|paid), stripe_customer_id, created_at

packages
  id, user_id, name, deliverables, price, active

leads
  id, user_id, contact_name, company, stage (identified|contacted|followed_up|proposal|won|lost)
  last_contact_at, follow_up_interval_days, notes, package_id, value_override, created_at

follow_up_log
  id, lead_id, action_type, note, created_at

referral_sources
  id, user_id, source_name, projects_referred, last_ask_at, next_ask_reminder_at

subscriptions
  id, user_id, stripe_subscription_id, status, current_period_end
```

---

## 8. API / Integration Notes

- **Stripe:** Single plan ($19/mo) subscription + webhook for status changes
- **Resend:** Trial onboarding sequence (5 emails) + follow-up reminder digest (weekly)
- **No external CRM or calendar integrations in MVP**

---

## 9. Acceptance Criteria

- [ ] Onboarding wizard completes in < 2 min and lands user on populated dashboard
- [ ] Dashboard shows correct follow-up count based on last_contact_at + follow_up_interval
- [ ] Revenue planner correctly calculates projects needed at package price to hit monthly target
- [ ] "Mark as followed up" updates last_contact_at and removes lead from today's queue
- [ ] Trial expiry (day 14) blocks new lead creation and shows upgrade prompt
- [ ] Stripe checkout → payment → tier updates to "paid" → full access restored
- [ ] Referral reminder fires at correct cadence (server-side cron, not client-side)

---

## 10. Delivery Plan

### Milestone 1 — Data Model + Onboarding (Hours 1–7)
**Files:**
- `schema.sql` — all tables above
- `app/api/auth/route.ts` — email signup + session
- `app/onboarding/page.tsx` — 3-step wizard (revenue target → package → leads)
- `app/api/users/route.ts` — PATCH monthly_revenue_target
- `app/api/packages/route.ts` — CRUD
- `app/api/leads/route.ts` — POST (bulk create for onboarding)

**Exit Criteria:** 3-step wizard completes and creates user + 1 package + 3 leads in DB; `GET /api/leads` returns seeded data

### Milestone 2 — Dashboard + Core Workflows (Hours 8–15)
**Files:**
- `app/dashboard/page.tsx` — follow-up queue, revenue gap, referral reminder
- `lib/followup.ts` — query: leads where last_contact_at + interval ≤ today
- `app/api/leads/[id]/followup/route.ts` — POST (updates last_contact_at, logs action)
- `app/api/referrals/route.ts` — CRUD for referral sources + reminder logic
- `components/RevenueGapCard.tsx` — calculates projects needed
- `app/api/stripe/checkout/route.ts` + `webhook/route.ts`

**Exit Criteria:** Dashboard shows correct follow-up queue; marking done removes lead from queue; Stripe test payment upgrades tier

### Milestone 3 — Email Sequence + Polish + Tests (Hours 16–20)
**Files:**
- `lib/email.ts` — 5-email trial sequence via Resend; weekly digest cron
- `app/dashboard/components/TrialBanner.tsx`
- `app/api/cron/reminders/route.ts` — daily cron for follow-up and referral reminders
- `__tests__/followup-queue.test.ts`, `__tests__/revenue-planner.test.ts`

**Exit Criteria:** All acceptance criteria pass; welcome email sent within 2 min of signup; weekly digest fires on schedule in staging

---

## 11. Risks & Mitigations

| Risk | Mitigation |
|------|-----------|
| Positioning overlap with Bonsai/HoneyBook | Maintain hard boundary: zero contracts/invoicing; messaging = "growth system, not admin software" |
| Low urgency to upgrade after 14 days | Show live data summary in upgrade modal: "You have 7 leads and 2 follow-ups due — don't lose this" |
| Follow-up logic feels generic | Add niche-specific follow-up scripts in onboarding based on selected niche (web design, copywriting, etc.) |
| Users set target once and never return | Weekly email digest with "3 follow-ups due this week" drives re-engagement without requiring app open |

---

## 12. Chargeability Rationale

**Free tier:** 14-day full-access trial — enough for users to run a real pipeline week and see follow-ups surfaced automatically.

**Paid tier ($19/mo):** Unlimited leads, packages, referral tracking, weekly email digest — ongoing pipeline management.

**Paywall timing:** Trial expiry after 14 days — user has live pipeline data in the system, making the cost of switching (re-entering leads elsewhere) higher than $19/mo.

**One-sentence rationale:** Users pay because one additional project closed from the follow-up queue yields $1K–$10K, making the $19/mo subscription return 50–500x in the month it works.
