# Lead Qualification and Long-Term Nurture — Lean MVP PRD

> **版本：** v1（首次生成）
> **生成时间：** 20260512-1454
> **评分：** 30/40
> **Source：** real-estate-ai-tools__scored-demand__20260511-0910.md

---

## 1. Problem & User

**Target User：** 每月接收混合质量询盘（Zillow / Realtor.com / 个人网站）的独立房产经纪人，大部分线索现在还不准备买卖，但半年后可能成交。

**Core Pain：** 没有系统持续跟进"未准备好"的线索。代理要么手动发邮件（忘记）、要么用 CRM 的复杂 drip 设置（配置太繁琐）、要么干脆放弃这批线索。结果是大量潜在佣金静静流失。

**User Quote：** "No system for warming leads who aren't ready to buy/sell"

---

## 2. Target Outcome & KPIs

**Primary Outcome：** 经纪人导入线索并分配时间线段后，5分钟内看到系统为每条线索自动匹配了一条个性化跟进邮件序列，代理确认后"设置完毕，系统会替我持续跟进"。

| KPI | 目标值 |
|-----|--------|
| 导入线索到首封自动跟进邮件发出 | < 10 分钟 |
| 线索热度评分激活率（3分以上线索占比） | > 40% |
| 7日留存 | > 45% |
| 免费→付费转化 | > 10% |

---

## 3. MVP Scope（In）

- CSV 导入或手动添加线索
- 资质表单：buyer/seller / 预算 / 时间线 / 融资状态 / 来源
- 简单评分规则引擎：基于字段自动打 1-5分，按 timeline 分段
- 6个预设时间线段：0-3月、3-6月、6-12月、12月+、卖家观望、投资/观望
- 每个时间线段对应预设邮件序列（3-5封，纯文本，代理署名）
- 可编辑邮件模板（{name} / {agent_name} 占位符）
- 每日 cron：发送当天到期的跟进邮件（Resend API）
- 代理标记线索为"已准备好"→ 停止自动跟进，状态变为"热线索"
- 简单 Dashboard：热线索 / 休眠线索 / 待跟进列表
- Stripe 计费：$29/mo（solo，无限线索）

---

## 4. Out of Scope

- SMS / WhatsApp 跟进（只做邮件）
- 双向邮件收件分析
- AI 动态生成邮件（用固定模板序列，不用 LLM 实时生成）
- 高级行为追踪（邮件打开率、点击率）
- 与任何 CRM 的原生集成
- 多代理团队版（MVP 单人使用）

---

## 5. User Flow（Happy Path）

**注册后 5 分钟 Aha Moment 路径：**

1. 用户注册 → 进入 Onboarding 引导页（"把不准备好的线索变成未来佣金"）
2. **Step 1 — 导入线索**：上传 CSV（姓名 + 邮箱 + 备注）或手动添加1条测试线索
3. **Step 2 — 快速资质**：填写线索的 timeline 和意向类型（约30秒，最少2个字段）
4. **Step 3 — 自动匹配序列**：系统根据 timeline 自动分配对应邮件序列，展示序列预览（第1封今天发、第2封+14天发…）
5. **⚡ Aha Moment（第4分钟）**：用户点击"确认启动"，看到第一封邮件即将发出的倒计时，序列已排好——"系统会替我跟进这条线索6个月"
6. 离开后收到系统确认邮件：第一封跟进邮件已发送
7. Dashboard 显示线索状态更新为"跟进中"

**付费墙触发：** 导入第 **10条线索** 后触发 paywall + 邮件序列。

---

## 6. Functional Requirements（P0）

**F1 — 线索导入**
- CSV 上传：解析 name / email / phone / notes 字段，允许字段映射
- 手动添加：单条线索表单

**F2 — 资质评分**
- 资质表单字段：buyer_or_seller / budget / timeline / financing / source
- 简单规则引擎：timeline=0-3月 → +2分；pre_approved=yes → +2分；budget >$500k → +1分
- 总分 1-5，自动分段：1-2 = Dormant，3 = Warming，4-5 = Hot
- 用户可手动覆盖时间线段

**F3 — 时间线段 + 序列匹配**
- 6个预设段，每段绑定对应邮件序列（3-5封）
- 每封邮件有：主题行 / 纯文本正文（{name} / {agent_name} 占位）/ 发送间隔（天）
- 用户可编辑邮件模板内容，不可删除序列结构（MVP 期间）

**F4 — 自动发邮件**
- Supabase Edge Function / Vercel Cron，每天 UTC 08:00 扫描当天到期邮件
- 通过 Resend API 发送，From 为用户配置的邮箱（Resend Custom Domain 或默认域）
- 发送后记录：sent_at / status / email_content 快照

**F5 — 手动接管**
- 代理可随时标记线索"已准备好" → 停止序列，线索进入"热线索"列表
- 支持手动暂停/恢复序列
- 支持为单条线索手动添加备注

**F6 — Dashboard**
- 三区：热线索（score 4-5）/ 跟进中（1-3，序列进行中）/ 休眠（手动归档）
- 每条线索显示：姓名 / 时间线段 / 评分 / 下一封邮件发出时间 / 状态

**F7 — 计费**
- 免费：前10条线索
- $29/mo：无限线索
- Stripe Checkout + paywall

**F8 — Onboarding**
- 3步引导：导入第一条线索 → 填写资质 → 确认启动序列
- 首次完成后展示"您的第一条线索已进入跟进序列"确认卡片

---

## 7. Minimal Data Model

```
users (id, email, agent_name, reply_to_email, plan, stripe_customer_id)
leads (id, user_id, name, email, phone, score, timeline_segment, status, notes, created_at)
lead_fields (id, lead_id, field_key, field_value)
sequences (id, user_id, timeline_segment, name)
sequence_emails (id, sequence_id, position, subject, body_template, delay_days)
email_jobs (id, lead_id, sequence_email_id, scheduled_for, sent_at, status)
email_logs (id, email_job_id, resend_id, sent_at, body_snapshot)
```

---

## 8. API / Integration Notes

| 服务 | 用途 | 备注 |
|------|------|------|
| Resend | 发送跟进邮件 | Custom Domain 配置，每封约 $0.0008 |
| Supabase Edge Function / Vercel Cron | 每日邮件调度 | UTC 08:00 触发 |
| Stripe | 订阅计费 | Checkout Session + Webhook |
| Supabase | DB + Auth + Storage | 单一后端依赖 |

**不需要 LLM：** 邮件内容为固定模板序列，仅做占位符替换，不调用 AI 动态生成。

---

## 9. Acceptance Criteria

- [ ] CSV 上传后，name / email 字段正确解析，允许用户手动映射列
- [ ] 资质评分规则正确运行：timeline=0-3月 + pre_approved 的线索评分 ≥ 4
- [ ] 系统根据 timeline_segment 自动匹配对应序列，展示完整序列预览
- [ ] 每日 cron 在 UTC 08:00 触发，发出当天到期的邮件，日志记录正确
- [ ] 手动标记"已准备好"后，后续序列邮件停止发送
- [ ] 第10条线索导入后 paywall 触发，Checkout 完成后立即解锁
- [ ] 用户注册后 5 分钟内完成首条线索进入序列（人工测试）

---

## 10. Delivery Plan

### M1 — 数据层 + 导入 + 评分（Day 1 上午，约 5 小时）

**创建/修改文件：**
- `prisma/schema.prisma` — leads / sequences / sequence_emails / email_jobs 表
- `lib/csv-importer.ts` — CSV 解析 + 字段映射
- `lib/lead-scorer.ts` — 简单规则引擎，返回 score + timeline_segment
- `app/api/leads/route.ts` — 导入 + CRUD API
- `app/leads/import/page.tsx` — CSV 上传页
- `app/leads/[id]/qualify/page.tsx` — 资质表单

**Exit Criteria：**
- 上传测试 CSV 后，leads 表正确插入记录
- 资质表单提交后，score 和 timeline_segment 正确写入 DB

### M2 — 序列匹配 + 邮件调度 + Dashboard（Day 1 下午 - Day 2 上午，约 8 小时）

**创建/修改文件：**
- `lib/sequence-matcher.ts` — 根据 timeline_segment 分配序列，生成 email_jobs
- `lib/email-sender.ts` — Resend API 封装 + 占位符替换
- `app/api/cron/send-emails/route.ts` — 每日调度端点（Vercel Cron 触发）
- `app/dashboard/page.tsx` — 三区 Dashboard（热/跟进中/休眠）
- `app/leads/[id]/page.tsx` — 线索详情 + 序列进度 + 手动操作
- `app/settings/sequences/page.tsx` — 邮件模板编辑页
- `app/onboarding/page.tsx` — 3步引导流

**Exit Criteria：**
- 分配序列后，email_jobs 表正确生成（各封邮件 scheduled_for 日期计算正确）
- 触发 /api/cron/send-emails 后，当天到期的邮件通过 Resend 发出，日志记录 sent_at
- Dashboard 正确显示三区线索分布

### M3 — 计费 + 模板编辑 + 上线（Day 2 下午，约 5 小时）

**创建/修改文件：**
- `lib/stripe.ts` — Checkout Session + Webhook
- `app/api/billing/route.ts` — 计费 API
- `middleware.ts` — 第10条线索 paywall 检查
- `lib/seed-sequences.ts` — 预设6个时间线段序列的种子数据
- vercel.json — Cron 配置（"0 8 * * *"）

**Exit Criteria：**
- 6个预设序列的邮件模板正确加载，用户可编辑主题行和正文
- 第10条线索导入后 paywall 触发，Checkout 完成后立即解锁
- Vercel Cron 配置正确，UTC 08:00 自动触发邮件调度
- 新用户 Aha Moment < 5 分钟（人工验证）

---

## 11. Risks & Mitigations

| 风险 | 缓解 |
|------|------|
| 邮件进垃圾箱，代理不信任系统 | Onboarding 引导配置 Resend Custom Domain 和 SPF/DKIM，提供邮件预览 |
| 线索时间线变化，序列不再匹配 | 允许用户随时更改时间线段，系统重新计算剩余序列 |
| 竞品（Follow Up Boss）已有 drip | 主打"10分钟上手、无需配置"vs FUB 复杂的 drip 设置 |
| cron 调度失败 | 每日调度失败时 fallback 到 +1小时重试，超过3次告警邮件到代理 |

---

## 12. Chargeability Rationale

**免费版价值：** 前10条线索完整体验自动跟进序列，亲眼看到系统发出第一封邮件，感受到"我不在线时系统在替我培育客户"的核心价值。

**付费版扩展：** 解锁无限线索、更多自定义邮件模板、CSV 批量导出、跟进历史超过90天。

**付费墙时机：** 第10条线索——用户已导入多批线索并启动序列，意识到系统在替自己做原本会忘记的事，$29/月换几个月后可能成交的佣金。

**一句话：** 一条培育6个月后成交的线索价值数千美元，$29/月的自动跟进系统是最低成本的流水线维护。
