# PRD: Premium Client Access Layer

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

---

## 1. Problem & User

**Target User:** Freelancers and boutique agencies targeting premium B2B buyers — B2B SaaS copywriters, demand-gen freelancers, product marketers, and small design studios billing $5K–$30K/project.

**Core Pain:** Premium buyers don't discover freelancers on public marketplaces. They source through founder communities, VC talent partners, RevOps agencies, private Slack groups, and operator networks. Freelancers have no map to these channels and no warm-intro path in. Result: talented service providers compete on Upwork on price rather than finding the clients willing to pay for quality.

**User Quote:** "高价值客户有自己的筛选机制，不在公开平台上找 freelancer"

---

## 2. Target Outcome & KPIs

- **Primary:** User finds and applies to at least 1 off-market opportunity within 7 days of signup
- **PLG conversion:** Free-to-paid rate ≥ 8% within 30 days
- **Retention:** 60-day retention ≥ 40% (at least one buyer-channel access action per week)
- **Revenue signal:** User lands 1 premium project → product pays for itself for 12+ months

**KPIs:**
- Time-to-first-opportunity-viewed < 5 minutes
- Paid conversion rate on trial → paid ≥ 8%
- Churn < 10%/month

---

## 3. MVP Scope (In)

1. **Buyer-source database** — curated list of 50–100 premium buyer sourcing channels (Slack groups, VC talent partner emails, founder communities, agency referral networks) organized by niche (SaaS copy, product marketing, demand gen, brand design)
2. **Off-market opportunity feed** — manually curated 5–10 new off-market project postings per week with buyer context (company size, budget signal, source channel)
3. **Intro-request workflow** — member submits intro request for an opportunity; admin routes warm intro or provides direct application instructions
4. **Save & track** — bookmark opportunities, mark as applied/won/lost
5. **Niche filter** — filter buyer-source map and opportunities by service category

---

## 4. Out of Scope

- AI matching or automated outreach
- Payment processing for projects
- Contract/invoice tooling
- Public profile pages for freelancers
- Two-sided marketplace (buyer sign-up)
- Email sequencing or CRM integrations

---

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

1. User lands on homepage → sees "See where $10K+ clients actually source freelancers in your niche"
2. Clicks "Join Free" → email signup, selects niche (SaaS copy / demand gen / product marketing / brand design)
3. **[Aha Moment — 3 min after signup]** → Lands on niche-filtered Buyer-Source Map showing 15+ specific channels (named Slack groups, VC partner contact patterns, agency referral scripts) they didn't know existed
4. Scrolls to "This Week's Off-Market Opportunities" → sees 3–5 live listings with company context + budget signals
5. Clicks "Request Intro" on one opportunity → free tier shows 3 intros/month; 4th request triggers paywall

**Paywall trigger:** 4th intro request → upgrade prompt → $39/mo or $299/yr

---

## 6. Functional Requirements (P0)

### Onboarding
- F1: Email signup with niche selection (single step, no phone/LinkedIn required)
- F2: Immediate redirect to niche-filtered buyer-source map (zero loading screen)
- F3: Welcome tooltip overlay: "These are real channels where your ideal clients source vendors"

### Core Features
- F4: Buyer-source map — filterable table/cards by niche, channel type (community/agency/VC), and access method (public/invite/apply)
- F5: Opportunity feed — weekly-updated list with fields: company type, budget range, service needed, source channel, deadline
- F6: Save/bookmark opportunities (unlimited for all tiers)
- F7: Intro-request form — captures user's portfolio URL, one-line pitch, relevant work sample; stored in admin queue
- F8: Free tier: 3 intro requests/month; paid tier: unlimited

### Paywall & Conversion
- F9: On 4th intro request: modal with "You've used your 3 free intros. Upgrade to unlock unlimited access + full buyer-source database."
- F10: Stripe checkout — $39/mo or $299/yr; redirect back to dashboard on success
- F11: Post-paywall email sequence (3 emails over 7 days): onboarding tips, featured opportunity, success story

### Admin
- F12: Simple admin panel to add/edit opportunities and buyer-source entries (manual curation workflow)

---

## 7. Data Model

```
users
  id, email, niche, tier (free|paid), created_at, stripe_customer_id

buyer_channels
  id, name, channel_type, niche[], access_method, description, url, added_at

opportunities
  id, company_type, budget_range, service_needed, source_channel_id, deadline, description, active, created_at

intro_requests
  id, user_id, opportunity_id, portfolio_url, pitch, sample_url, status (pending|sent|declined), created_at

bookmarks
  id, user_id, opportunity_id, created_at

subscriptions
  id, user_id, stripe_subscription_id, plan (monthly|annual), status, current_period_end
```

---

## 8. API / Integration Notes

- **Stripe:** Subscription checkout + webhook for `customer.subscription.created/deleted`
- **Resend (or similar):** Transactional emails — welcome, paywall nudge, weekly opportunity digest
- **No external data APIs in MVP** — buyer-source database and opportunities are manually curated by admin

---

## 9. Acceptance Criteria

- [ ] New user selects niche and sees filtered buyer-source map within 60 seconds of signup
- [ ] Opportunity feed shows ≥ 5 listings with budget range and source channel
- [ ] Intro request form submits and user receives confirmation email within 2 minutes
- [ ] 4th intro request triggers paywall modal with Stripe checkout link
- [ ] Stripe payment completes → user tier updates to "paid" → unlimited intros unlocked
- [ ] Admin can add a new opportunity in < 2 minutes via admin panel
- [ ] Free user cannot access > 3 intro requests per calendar month (enforced server-side)

---

## 10. Delivery Plan

### Milestone 1 — Core Data + Auth (Hours 1–7)
**Files:**
- `schema.sql` — users, buyer_channels, opportunities, intro_requests, bookmarks, subscriptions
- `app/api/auth/route.ts` — email signup with niche selection
- `app/api/buyer-channels/route.ts` — GET with niche filter
- `app/api/opportunities/route.ts` — GET active opportunities

**Exit Criteria:** `GET /api/opportunities` returns ≥ 5 seeded listings; `POST /api/auth/signup` creates user with niche and returns session token

### Milestone 2 — PLG Flow + Paywall (Hours 8–15)
**Files:**
- `app/dashboard/page.tsx` — buyer-source map + opportunity feed with niche filter
- `app/api/intro-requests/route.ts` — POST with free-tier gate (≤ 3/month check)
- `app/api/bookmarks/route.ts` — POST/DELETE
- `components/PaywallModal.tsx` — triggered on 4th request
- `app/api/stripe/checkout/route.ts` — create checkout session
- `app/api/stripe/webhook/route.ts` — handle subscription events

**Exit Criteria:** 4th intro request returns 402 and frontend shows PaywallModal; Stripe test checkout completes and user.tier updates to "paid"

### Milestone 3 — Admin + Email + Polish (Hours 16–20)
**Files:**
- `app/admin/page.tsx` — CRUD for buyer_channels and opportunities (password-protected)
- `lib/email.ts` — welcome email, paywall nudge (3-email sequence via Resend)
- `app/dashboard/components/OnboardingTooltip.tsx`
- `__tests__/paywall.test.ts`, `__tests__/intro-request.test.ts`

**Exit Criteria:** Admin can create opportunity visible in feed within 60s; welcome email delivered within 2 min of signup; all acceptance criteria pass

---

## 11. Risks & Mitigations

| Risk | Mitigation |
|------|-----------|
| Buyer-source database feels thin at launch | Seed with 80+ channels across 4 niches before soft launch; display last-updated date for transparency |
| Off-market opportunities are hard to source consistently | Build admin workflow to curate from 10 known channels weekly; be explicit that volume is intentionally curated, not algorithmic |
| Users churn if no intros are accepted | Set expectation in onboarding: "We route intros manually — 1–3 business days response"; track acceptance rate and surface it |
| Low urgency for upgrade (3 free intros feels like enough) | Reduce free intro quota to 2 if conversion rate < 5% at 30 days |

---

## 12. Chargeability Rationale

**Free tier:** Access to buyer-source map (15+ channels per niche) + 3 intro requests/month — enough to confirm the product delivers real intelligence, not just another directory.

**Paid tier ($39/mo):** Unlimited intro requests, full buyer-source database (all niches), and weekly off-market opportunity digest — scales with the user's pipeline effort.

**Paywall timing:** After the 3rd intro request — the moment the user has experienced the core value loop (find → request → wait for warm intro) and wants to repeat it at volume.

**One-sentence rationale:** Users pay because a single premium project won via the product yields $5K–$30K in revenue — the subscription pays for itself in hours, not months.
