# LegalFlow V2 — 全流程法律案件管理平台 PRD（PLG版）

> Generated: 2026-04-29
> Source: legalflow-v2__scored-demand__20260424-1519.md
> PLG Framework: v1.0（强制要求，2026-04-29起）
> Tech Stack: Next.js (App Router) + Prisma + PostgreSQL + Tailwind CSS + Resend + Stripe

---

## 1. Problem & User

**目标用户：** 中小型律所（5-50人）的律师、合伙人、律师助理（paralegal）和法务行政人员。

**核心痛点（按情绪强度排序）：**

1. **漏记工时**（5/5）：律师出庭、开会结束后忘记记时，月末才发现漏记，直接导致收入流失。保守估计每位律师每月漏记 2-5 小时，$300-800 的直接损失。
2. **截止日期失控**（5/5）：错过法院截止日期可能导致案件败诉甚至律师执照风险，现有工具无法自动计算管辖区规则、无法强制确认机制。
3. **文档重复劳动**（4/5）：每个新案件需要手动填充相同的合同/备忘录模板，法律文档高度格式化但当前无自动化工具。
4. **客户状态催问**（4/5）：客户频繁电话/邮件询问进展，占用律师大量时间，根本原因是客户无法自助查询。

**竞品缺口：** Clio（$49-139/user/mo）、MyCase（$39-89/user/mo）功能完整但价格高、Onboarding 复杂，中小律所实际采用率低。

---

## 2. Target Outcome & KPIs

| KPI | 目标值 | 测量方式 |
|-----|--------|---------|
| **Aha Moment 到达率** | 注册后 5 分钟内完成第一个计时条目 ≥ 60% | 事件埋点：`first_time_entry_created` |
| **7日留存率** | ≥ 40% | 注册后第7天仍有登录 |
| **计时功能 MAU 渗透** | ≥ 60% 月活用户使用计时功能 | 月度活跃用户中有 `time_entry` 记录的比例 |
| **免费→付费转化率** | ≥ 8%（14天试用期） | Stripe 订阅激活事件 |
| **付费墙触发后转化** | ≥ 20% | 触发付费墙后 7 天内订阅 |

---

## 3. MVP Scope (In)

**PLG 核心原则：功能设计服务于漏斗转化，不是功能完整性。**

**P0 — Aha Moment 核心路径（注册后 5 分钟内必须可完成）：**
- 邮箱注册 → 2步建案（案件名+客户名） → 一键启动计时器 → 停止 → 生成第一条时间记录

**P0 — 免费版功能（让用户上瘾）：**
- 认证：邮箱注册/登录 + Magic Link
- 案件管理：CRUD + 状态流转 + 联系人关联（无限）
- 时间跟踪：手动录入 + 计时器（**每月限额 10 条未计费条目**，作为付费墙触发点）
- 截止日期：创建/提醒（**每月限额 5 个截止日期**）
- 文档：上传（**总容量限额 500MB**）

**P0 — 付费版扩展功能（解锁价值）：**
- 时间跟踪：无限条目 + 发票生成 + PDF导出 + Stripe 在线收款
- 截止日期：无限 + 自动日期计算（管辖区规则）+ 确认机制 + 升级提醒链
- 文档：无限容量 + 模板自动填充（变量替换）
- 客户门户：Magic Link 自助查看案件进展
- 报表：利用率 + 营收 + AR aging
- 团队：多用户管理 + 角色权限（Admin/Attorney/Paralegal）

**P1 — 后续版本（不在 M1-M3）：**
- PWA / 移动端优先优化
- Google/Outlook 日历同步
- AI 辅助（文档摘要、案情分析）
- 企业 SSO（SAML/OKTA）
- 深度邮件集成

---

## 4. Out of Scope

- 原生 iOS/Android App
- 电子签名（DocuSign/HelloSign）
- 法院规则数据库自动同步
- 多语言/国际化
- IOLTA 信托账户合规（法律风险，附免责声明后仅做基础标记）

---

## 5. User Flow (Happy Path) — PLG 优先设计

### 🎯 Aha Moment 路径（注册后 ≤5 分钟）

```
Step 1: 访问 legalflow.huangbo.ai → 点击"Start Free Trial"
Step 2: 邮箱注册（姓名+邮箱+密码）→ 自动跳转 /onboarding
Step 3: Onboarding Step 1 — "创建你的第一个案件"
        输入：案件名称（如"张三 vs 李四"）+ 客户姓名
        → 系统自动生成案件编号，跳转案件详情页
Step 4: Onboarding Step 2 — "记录你的第一笔时间"
        页面顶部出现计时器横幅："开始为这个案件计时"
        → 点击"开始"→ 工作 → 点击"停止"
        → 弹窗：时长确认 + 工作描述（2个字段）→ 保存
        ✅ Aha Moment 触达：显示"你刚记录了 XX 分钟，价值 $XX"
Step 5: Onboarding 完成提示 + 引导至 Dashboard
```

**Aha Moment 定义：** 用户看到第一条时间记录出现在列表中，并看到"预估计费金额"。这是具体的、可量化的价值展示。

### 付费用户典型工作流

```
律师：登录 → Dashboard（今日待办 + 未计时提醒）
  → 打开案件 → 启动计时器（出庭/开会）
  → 结束 → 确认时间条目
  → 月末：筛选未计费条目 → 一键生成发票 → 发送 → 客户在线支付

合伙人：登录 → Dashboard → 查看律师利用率 + 本月营收
  → 发现未出账 → 催账
```

---

## 6. Functional Requirements (P0 only)

### Onboarding（零人工介入）

| ID | 需求 | PLG意义 |
|----|------|---------|
| F-01 | 2步创建第一个案件（名称+客户，其余字段可选） | 降低注册摩擦 |
| F-02 | 案件创建后自动显示计时器引导横幅 | 引导到 Aha Moment |
| F-03 | 第一条时间记录保存后显示"价值确认"弹窗（时长×费率=预估金额） | Aha Moment 触达 |
| F-04 | Onboarding 进度条（3步：建案/计时/设费率），无强制步骤可跳过 | 不阻断用户 |

### 时间跟踪（付费墙核心触发点）

| ID | 需求 | 说明 |
|----|------|------|
| F-05 | 手动录入时间条目（时长+日期+描述+案件关联） | 基础功能 |
| F-06 | 实时计时器（启动/暂停/停止） | 核心差异化 |
| F-07 | 时间条目列表（按日期/案件筛选） | 基础功能 |
| F-08 | **免费版：第10条时间条目触发付费墙**，行内提示"升级解锁无限计时" | 付费墙设计 |
| F-09 | 付费版：发票生成（从未计费条目一键创建），PDF导出，Stripe 在线收款 | 付费核心价值 |

### 截止日期管理

| ID | 需求 | 说明 |
|----|------|------|
| F-10 | 截止日期 CRUD + 负责人分配 | 基础功能 |
| F-11 | 72h/24h/1h 邮件提醒（Resend API） | 刚需提醒 |
| F-12 | **免费版：第5个截止日期触发付费墙** | 付费墙触发 |
| F-13 | 付费版：强制确认机制（律师必须 acknowledge）+ 审计日志 | 高价值合规功能 |
| F-14 | 付费版：逾期自动升级提醒链（24h → 主管 → 合伙人） | 差异化 |

### 自动转化序列（产品内部触发，无需人工）

| ID | 触发事件 | 动作 |
|----|---------|------|
| F-15 | 注册后第 3 天未完成 Onboarding | 邮件：标题"你的案件还在等待第一条时间记录" |
| F-16 | 触碰付费墙（计时器第10次/截止第5次） | In-app banner + 邮件：标题"你已记录了 X 小时，解锁无限计时" |
| F-17 | 试用期第 10 天 | 邮件：标题"你还有 4 天试用期，已帮你记录 $XX 价值工时" |
| F-18 | 试用期第 13 天（到期前1天） | 邮件：标题"明天试用结束，用数据说话：你这周记录了 X 条" |
| F-19 | 试用到期未付费，第 3 天 | 邮件：标题"你的数据还在，随时回来" + 折扣码（首月8折） |

### 认证与权限

| ID | 需求 |
|----|------|
| F-20 | 邮箱注册/登录 + Magic Link |
| F-21 | 付费版：多用户邀请 + 角色权限（Admin/Attorney/Paralegal） |
| F-22 | 多租户律所隔离（Row Level Security） |

---

## 7. Minimal Data Model

```sql
-- 核心租户
firms (id, name, plan[free/pro], trial_ends_at, stripe_customer_id, created_at)
users (id, firm_id, email, password_hash, role[admin/attorney/paralegal], name, rate_per_hour, created_at)

-- 案件与联系人
contacts (id, firm_id, name, email, phone, type[individual/org])
cases (id, firm_id, case_number, title, status[open/active/pending/closed], 
       practice_area, assigned_to, client_contact_id, opened_at, closed_at)

-- 时间与计费
time_entries (id, case_id, user_id, date, duration_min, rate, description, 
              billable BOOL, billed BOOL, invoice_id, created_at)
invoices (id, firm_id, case_id, contact_id, number, status[draft/sent/paid/overdue], 
          total, issued_at, due_at, paid_at, stripe_payment_intent_id)

-- 截止日期
deadlines (id, case_id, firm_id, title, due_at, owner_id, status[pending/acked/overdue],
           acked_at, escalation_level)

-- 文档
documents (id, case_id, firm_id, name, path, size, mime_type, 
           template_id, version, uploaded_by, created_at)
doc_templates (id, firm_id, name, content_html, variables JSONB, category)

-- 客户门户（付费）
client_portal_tokens (id, contact_id, case_id, token, expires_at, created_at)

-- 自动化邮件队列
email_sequences (id, firm_id, user_id, trigger_event, scheduled_at, sent_at, template_key)

-- 限额追踪（付费墙核心）
usage_counters (id, firm_id, user_id, month, time_entries_count, deadlines_count)
```

---

## 8. API / Integration Notes

- **认证：** NextAuth.js（Credentials + Magic Link）+ JWT，session 存 Postgres
- **数据库：** PostgreSQL + Prisma ORM，Row Level Security 通过 Prisma middleware（每个 query 自动注入 `WHERE firm_id = ?`）
- **支付：** Stripe Checkout（订阅）+ Stripe Payment Links（客户发票支付）+ Webhooks
- **邮件：** Resend API（所有通知邮件 + 自动转化序列）
- **PDF：** `@react-pdf/renderer`（发票 PDF、报表导出）
- **文件存储：** 本地文件系统 → 后期迁移 S3 兼容存储
- **限额检查：** 每次写入 `time_entries` / `deadlines` 前，middleware 检查 `usage_counters`，超限时返回 `402 Payment Required` + 付费墙组件

---

## 9. Acceptance Criteria

1. 新用户从注册到完成第一条时间记录，全程 ≤5 分钟，无需阅读文档或联系客服
2. 第一条时间记录保存后，Aha Moment 弹窗展示预估计费金额（时长 × 费率）
3. 免费版第 10 条时间条目写入时，页面显示付费墙 banner，无法保存，并触发邮件序列 F-16
4. 触发付费墙后邮件在 5 分钟内送达
5. 试用期第 10 天邮件包含实际计时数据（条数、预估金额），非模板占位符
6. 截止日期 72h 前邮件通过 Resend 触达，响应时间 < 500ms
7. 不同律所数据完全隔离（跨 firm_id 查询返回 0 结果）
8. 发票 PDF 包含律所信息、客户信息、时间条目明细、Stripe 支付链接

---

## 10. Delivery Plan（PLG 顺序：先打通 Aha Moment，再加付费墙，最后加付费功能）

### M1 — Aha Moment 核心路径（Week 1）
**目标：** 注册用户能在 5 分钟内完成"建案→计时→生成第一条记录"

- [ ] `prisma/schema.prisma` — firms, users, contacts, cases, time_entries, usage_counters
- [ ] `prisma/seed.ts` — 测试律所 + 用户 + 2条示例案件
- [ ] `lib/auth/` — NextAuth Credentials + Magic Link
- [ ] `middleware.ts` — 路由保护（未登录跳 /login）
- [ ] `app/auth/register/page.tsx` — 注册页（姓名/邮箱/密码，2个字段优先，律所名可选）
- [ ] `app/onboarding/page.tsx` — 3步 Onboarding（建案/计时/费率）
- [ ] `app/cases/new/page.tsx` — 极简建案表单（标题+客户名，其余可选）
- [ ] `app/api/cases/route.ts` — 案件 CRUD
- [ ] `components/timer/Timer.tsx` — 实时计时器（启动/暂停/停止）
- [ ] `app/api/time-entries/route.ts` — 时间条目 CRUD + 限额检查 middleware
- [ ] `components/time/AhaMomentModal.tsx` — 保存后弹窗（时长 × 费率 = 预估金额）
- [ ] `app/dashboard/page.tsx` — 最简 Dashboard（今日待办 + 未计时提醒）

**Exit Criteria：** 新注册用户从 `/register` 到看到 Aha Moment 弹窗，全程 ≤5 分钟，无需帮助

---

### M2 — 付费墙 + 自动转化序列（Week 2）
**目标：** 免费用户触碰付费墙，自动转化序列运行，Stripe 订阅可购买

- [ ] `lib/paywall/check-usage.ts` — 限额检查逻辑（time_entries ≥10 或 deadlines ≥5）
- [ ] `components/paywall/PaywallBanner.tsx` — 行内付费墙组件（触发后展示）
- [ ] `app/billing/upgrade/page.tsx` — 升级页面（展示计时数据 + 定价）
- [ ] `app/api/billing/checkout/route.ts` — Stripe Checkout Session 创建
- [ ] `app/api/billing/webhook/route.ts` — Stripe Webhook（订阅激活/取消）
- [ ] `lib/email/sequences.ts` — 自动邮件序列引擎（F-15 到 F-19）
- [ ] `emails/` — Resend 邮件模板（onboarding-reminder / paywall-hit / trial-day10 / trial-day13 / win-back）
- [ ] `app/api/cron/email-sequences/route.ts` — 定时任务（每小时检查并发送到期邮件）
- [ ] `prisma/schema.prisma` — 补充 email_sequences 表
- [ ] `app/settings/billing/page.tsx` — 账单页面（当前套餐 + 用量 + 升级/取消）

**Exit Criteria：**
1. 写入第10条时间条目时，`check-usage.ts` 返回 402，PaywallBanner 渲染，邮件在 5 分钟内发出
2. Stripe Checkout 完成后 Webhook 自动升级 firm.plan 为 pro
3. 试用第10天邮件含真实计时数据（用 seed 数据验证）

---

### M3 — 付费功能完整化（Week 3-4）
**目标：** 付费用户能跑完完整律所工作流（计时→发票→收款→报表）

- [ ] `app/billing/invoices/page.tsx` — 发票管理
- [ ] `app/api/invoices/route.ts` — 发票 CRUD + 从未计费条目生成
- [ ] `lib/billing/invoice-pdf.ts` — `@react-pdf/renderer` 生成发票 PDF
- [ ] `app/api/billing/invoice-payment/route.ts` — Stripe Payment Link 生成
- [ ] `app/deadlines/page.tsx` — 截止日期管理（含强制确认 + 升级提醒链）
- [ ] `app/api/deadlines/route.ts` — 截止日期 CRUD
- [ ] `lib/deadlines/escalation.ts` — 升级提醒 cron job（逾期自动升级）
- [ ] `app/documents/page.tsx` — 文件上传/管理（付费：无限容量 + 模板）
- [ ] `lib/documents/template-engine.ts` — 变量填充引擎（`{{client_name}}` 等）
- [ ] `app/portal/[token]/page.tsx` — 客户门户（案件状态 + 文档 + 消息）
- [ ] `app/api/portal/route.ts` — Magic Link 生成 + 验证
- [ ] `app/settings/team/page.tsx` — 团队管理（邀请 + 角色）
- [ ] `app/reports/page.tsx` — 报表（利用率 + 营收 + AR aging）
- [ ] `lib/reports/export.ts` — CSV/PDF 导出

**Exit Criteria：**
1. 律师完成"计时→生成发票→发送→客户在线支付→发票状态变 Paid"全流程，无需人工干预
2. 客户通过 Magic Link 进入门户，只能看到被授权的案件（跨案件数据隔离验证）
3. 逾期截止日期 24h 后自动发升级邮件到分配的负责人

---

## 11. Risks & Mitigations

| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| Aha Moment 到达率 < 60% | 漏斗顶部流失 | Week 1 结束后埋点复查，Onboarding 路径优化（A/B 测试计时器位置） |
| 付费墙过早触发导致流失 | 转化率下降 | 监控"触碰付费墙后直接退出"比例，超 80% 则上调免费限额到 15 条 |
| 邮件序列进垃圾箱 | 转化序列失效 | Resend 配置 SPF/DKIM，监控打开率，低于 20% 则调整发件人和标题 |
| 多租户数据泄露 | 安全事故 | Prisma middleware 强制 firm_id 过滤 + 集成测试验证跨 firm 隔离 |
| 开发周期超 4 周 | 延迟上线 | M3 中报表/客户门户可推迟到 V2.1，核心 Aha Moment + 付费墙 M1/M2 不可延期 |

---

## 12. Chargeability Rationale（PLG 版）

**漏斗模型：**
```
推广（Bo 的精力：Reddit / X / 冷启动社群）
  ↓
注册用户（降低摩擦：邮箱即注册，无信用卡）
  ↓  产品自动筛选（Onboarding 引导到 Aha Moment）
活跃用户（真正有痛点的律师：每天计时，接近限额）
  ↓  触碰付费墙（第10条计时）+ 邮件序列（自动化）
付费用户（自动转化，$39-69/user/mo，无需销售）
```

**免费版让用户上瘾的设计：**
- 前 10 条时间条目完全免费，让律师养成"使用LegalFlow计时"的习惯
- 每次保存时显示预估金额（"你这条价值 $120"），强化行为奖励
- 限额提醒不是错误提示，而是成就感展示（"你已记录 X 小时！"）

**付费版扩展价值（不是解锁基础功能）：**
- 免费版：可以计时、可以建案，真实有用
- 付费版：可以发票、可以收款、可以看报表、可以团队协作
- 付费动机：律师用了 2 周，发现用 LegalFlow 发票可以当天收到钱，而不是月末手工 Excel

**定价：** $39/user/month（Starter，1-2 用户）/ $69/user/month（Professional，团队 + 报表 + 门户）
**ROI 量化：** 10 人律所每月节省漏记工时 $2,000+，软件费 $390-690，ROI 300%+ 清晰可见

**付费墙触发时机说明：** 第 10 条时间条目是经过设计的——用户此时已经建立了计时习惯，有了真实数据，看到了价值。付费墙出现的那一刻，是用户最愿意付费的时刻，而不是注册时的冷启动阶段。
