Files
persionalBrand/docs/PRD.md

392 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 个人品牌小程序试点版 PRD
## 1. 文档信息
- **版本**v0.1
- **产品阶段**:单品牌试点版
- **目标用户**:朋友作为首个品牌经营者;其客户作为小程序访客
- **产品形态**:微信小程序 + Web 内容管理后台
- **当前目标**:让品牌经营者能在微信中展示自己、接收预约/咨询,并自行维护内容
> 需求基线补充:首轮访谈后的订单、微信身份、配送、标签与状态规则见 [07-requirements-interview-decisions.md](./07-requirements-interview-decisions.md)。与本文早期表述冲突时,以该决策文档为准。
## 2. 背景与问题
个体户和手艺人通常依赖朋友圈、聊天记录和零散图片介绍业务。客户难以快速了解其身份、服务、作品和合作方式,经营者也缺少一个可持续维护的品牌入口。
本项目先为一个真实经营者交付可用的小程序,验证“品牌展示 + 预约承接 + 内容自维护”的完整闭环。第一版不做支付、不做多商户平台、不做自动发布流程。
## 3. 产品目标
### 3.1 目标
1. 客户在 1 分钟内了解品牌、服务和代表作品。
2. 客户无需注册即可提交咨询或预约。
3. 经营者可以在后台独立更新品牌、服务和作品内容。
4. 经营者可以查看并处理预约,审核客户反馈。
5. 形成一个可复用的首个品牌案例,为后续自己的品牌和其他客户项目提供基础。
### 3.2 非目标
- 当前不提供支付、退款、发票、分账或财务对账。
- 当前不提供多商户注册、套餐、计费和租户自助开通。
- 当前不提供多员工、多门店、复杂排班和库存管理。
- 当前不提供自动注册、自动审核、自动发布微信小程序。
- 当前不将小程序做成内容社区或平台流量市场。
## 4. 用户与角色
### 4.1 访客/客户
无需登录即可浏览公开内容和提交预约。提交预约时填写必要联系信息。
### 4.2 品牌管理员
朋友本人。可登录后台管理品牌资料、服务、作品、预约和反馈。
### 4.3 平台维护者
开发者本人。负责系统维护、问题排查、内容协助和版本发布。第一版可与品牌管理员共用后台,但权限模型应保留角色字段。
## 5. 核心用户流程
### 5.1 客户浏览并预约
```text
打开小程序 -> 首页了解品牌 -> 查看服务/作品 -> 点击预约
-> 填写称呼、联系方式、服务、期望日期和备注
-> 提交成功 -> 品牌方在后台处理
```
### 5.2 管理员更新内容
```text
登录后台 -> 编辑品牌资料/服务/作品 -> 保存
-> 预览 -> 内容在小程序端展示
```
### 5.3 管理员处理预约
```text
后台查看待处理预约 -> 查看详情 -> 联系客户
-> 更新为已联系/已完成/已取消 -> 添加内部备注
```
### 5.4 反馈发布
```text
客户提交反馈 -> 后台审核 -> 通过后显示在小程序
```
## 6. 功能需求
优先级定义P0 为第一版必须交付P1 为第一版可选增强P2 为后续规划。
### 6.1 小程序首页P0
展示品牌头像、名称、一句话介绍、代表服务、代表作品和主要行动按钮。
**要求**
- 公开访问,无需登录。
- 内容来自后台配置,不得写死在前端。
- 服务和作品无内容时,模块自动隐藏或显示空状态,不出现破损布局。
- 至少提供“查看服务”和“联系/预约”两个主要入口。
### 6.2 小程序品牌介绍P0
- 品牌名称、头像/Logo、封面图
- 个人简介
- 从业经历
- 擅长领域
- 服务理念
- 联系方式、所在地区、地址(可选)
**要求**
- 支持富文本或结构化文本编辑。
- 联系电话、微信号等敏感信息由管理员控制是否展示。
- 地址展示与地图能力解耦,第一版可先展示文字地址。
### 6.3 小程序服务项目P0
每项服务包含:名称、封面图、描述、价格文本、预计时长、预约状态、排序。
**价格规则**
- 第一版只展示价格文本例如“¥xxx”“面议”“起价 xxx”。
- 价格不参与支付、不计算订单金额。
- 数据模型保留可扩展的数值价格字段,但第一版不展示支付按钮。
**要求**
- 仅展示已启用服务。
- 支持服务详情页。
- 服务可配置“可预约/仅咨询”。
### 6.4 小程序作品集P0
每项作品包含:图片、标题、描述、分类、排序、是否展示。
- 支持多图浏览。
- 支持作品详情页。
- 图片加载失败时显示占位状态。
- 作品数量较多时支持分类筛选或分页加载P1
### 6.5 小程序:预约/咨询表单P0
字段:
- 称呼必填2-30 字
- 手机号或微信号:至少填写一项
- 服务项目:可选,来自已启用服务
- 期望日期:可选,不能选择过去日期
- 备注可选0-500 字
- 用户同意联系/信息使用提示:必选确认
**提交规则**
- 提交前校验字段格式。
- 防止重复提交,提交按钮在请求期间禁用。
- 成功后生成预约编号,并显示提交成功页。
- 失败时保留用户已填内容并给出可理解的错误提示。
- 第一版不承诺具体预约时间,不做自动排班和冲突检测。
### 6.6 小程序反馈P0
- 查看已审核反馈。
- 提交称呼、内容和可选联系方式。
- 内容长度 10-500 字。
- 新反馈默认待审核,不直接公开。
- 后台审核通过后才展示。
### 6.7 小程序管理员入口P1
- 后端返回当前微信身份是否为管理员。
- 仅管理员显示入口。
- 入口可跳转管理后台网页或后续管理页面。
- 隐藏入口不能替代后端鉴权,所有管理 API 必须重新校验权限。
第一版可暂时使用后台独立登录,不要求小程序内完成管理操作。
### 6.8 后台登录与权限P0
- 管理员登录、退出登录。
- 密码不得明文存储,应使用安全哈希。
- 登录态有过期时间,支持主动退出。
- 每个管理 API 校验登录态和角色。
- 角色字段至少保留 `admin``operator` 两种值;第一版可只启用 `admin`
### 6.9 后台品牌资料管理P0
- 编辑品牌名称、头像、封面、简介、经历、擅长领域、服务理念、联系方式和地址。
- 控制首页模块是否显示。
- 保存草稿和发布内容可先合并为“保存即生效”。
- 保存成功后显示明确反馈。
- 提供预览入口。
### 6.10 后台服务管理P0
- 新增、编辑、删除服务。
- 启用/停用服务。
- 修改排序。
- 配置服务描述、价格文本、时长和预约方式。
- 删除前二次确认;已产生预约的服务建议采用停用而非物理删除。
### 6.11 后台作品管理P0
- 上传图片、编辑标题/描述/分类。
- 调整排序。
- 隐藏/显示作品。
- 删除前确认。
- 限制文件类型、大小和图片数量,并展示上传进度/失败原因。
### 6.12 后台预约管理P0
- 列表展示预约编号、客户称呼、联系方式、服务、期望日期、状态、提交时间。
- 支持按状态和日期筛选。
- 查看详情。
- 状态:待处理、已联系、已完成、已取消。
- 添加内部备注。
- 联系方式仅授权管理员可见。
- 第一版不发送自动通知,管理员通过现有联系方式联系客户。
### 6.13 后台反馈管理P0
- 查看待审核、已通过、已隐藏反馈。
- 通过、隐藏、删除。
- 查看提交时间和关联预约(如有)。
- 审核操作记录操作人和时间。
### 6.14 后台预览P0
- 从后台进入小程序预览页。
- 预览内容与当前保存数据一致。
- 第一版不做复杂草稿版本和多人协作。
## 7. 页面清单
### 小程序
1. 首页
2. 品牌介绍页
3. 服务列表页
4. 服务详情页
5. 作品集列表页
6. 作品详情页
7. 预约/咨询表单页
8. 提交成功页
9. 反馈列表页
10. 反馈提交页
### 管理后台
1. 登录页
2. 首页/概览页
3. 品牌资料页
4. 服务列表/编辑页
5. 作品列表/编辑页
6. 预约列表/详情页
7. 反馈列表/审核页
8. 预览入口
## 8. 数据模型
### BrandProfile
`id`, `name`, `avatar_url`, `cover_url`, `intro`, `experience`, `expertise`, `philosophy`, `contact_phone`, `contact_wechat`, `address`, `is_published`, `created_at`, `updated_at`
### Service
`id`, `name`, `description`, `cover_url`, `price_text`, `price_amount`(预留,第一版不用于支付), `duration_minutes`, `booking_enabled`, `is_enabled`, `sort_order`, `created_at`, `updated_at`
### PortfolioItem
`id`, `title`, `description`, `category`, `image_urls`, `is_visible`, `sort_order`, `created_at`, `updated_at`
### Booking
`id`, `booking_no`, `customer_name`, `phone`, `wechat_id`, `service_id`, `requested_date`, `note`, `status`, `admin_note`, `created_at`, `updated_at`
### Feedback
`id`, `booking_id`(可选), `customer_name`, `content`, `contact`, `status`, `reviewed_by`, `reviewed_at`, `created_at`, `updated_at`
### AdminUser
`id`, `username`, `password_hash`, `display_name`, `role`, `wechat_openid`(预留), `is_enabled`, `last_login_at`, `created_at`, `updated_at`
### 远期支付相关预留
第一版不创建可用支付流程,但应避免把预约和支付强绑定。远期可新增:
- `Order`:业务订单,与 `Booking` 一对一或一对多关联
- `Payment`:支付单、微信交易号、金额、状态、支付时间
- `Refund`:退款记录
- `price_amount` 使用整数分,避免浮点金额
- 订单状态与预约状态分离
第一版的 `Booking` 不应包含 `paid``payment_status` 等容易造成误解的字段。若必须预留,使用独立扩展表或明确标记为未启用字段。
## 9. 权限与安全要求
- 公开内容接口只返回已发布、已启用、已审核数据。
- 管理接口必须验证登录态和角色。
- 联系方式、预约备注等个人信息不得出现在公开接口和日志中。
- 所有输入进行长度、格式和内容校验。
- 图片上传限制 MIME 类型、文件大小和存储路径。
- 删除采用软删除或保留审计记录,避免误删预约数据。
- 生产环境必须使用 HTTPS。
- 管理操作记录操作人、动作和时间。
- 小程序端隐藏管理员入口仅为体验优化,不是安全边界。
## 10. 非功能要求
- 移动端首屏在正常网络下可用,图片按需加载并压缩。
- 后台适配桌面浏览器,窄屏下不出现不可操作的横向溢出。
- 关键操作有加载、成功、失败和空状态。
- 表单提交具备幂等或重复提交保护。
- 数据库每日备份,至少保留最近 7 天备份(部署条件允许时)。
- 关键错误写入可检索日志,但不得记录明文密码和完整联系方式。
## 11. 验收标准
### 内容闭环
- 管理员登录后可以修改品牌介绍,重新打开小程序可看到更新。
- 管理员可以新增、停用和排序服务。
- 管理员可以上传、隐藏和排序作品。
- 未启用服务和未展示作品不会出现在小程序公开页面。
### 预约闭环
- 客户无需注册即可提交有效预约。
- 缺少称呼和联系方式时不能提交。
- 重复点击不会生成重复预约。
- 管理员可以查看预约详情并更新状态。
- 预约联系方式不出现在公开页面。
### 反馈闭环
- 客户提交的反馈默认不可见。
- 管理员审核通过后才展示。
- 管理员可以隐藏已展示反馈。
### 权限闭环
- 未登录用户无法访问管理页面和管理 API。
- 普通用户即使直接调用管理接口也无法修改数据。
- 管理员退出后旧登录态失效或在有效期内被拒绝。
### 远期支付兼容性
- 第一版没有支付按钮、支付接口和支付状态。
- 服务价格仅作为展示文本,不产生支付金额。
- 预约状态不承担订单和支付状态职责。
- 后续新增支付不会要求重写品牌、服务和预约基础数据。
## 12. 开发阶段与交付顺序
### 阶段一:需求和内容准备
- 确认朋友的品牌资料、服务、作品和预约流程。
- 确认视觉基调和首页结构。
- 收集真实图片和联系方式。
### 阶段二:基础系统
- 数据库和 API。
- 管理员登录。
- 品牌、服务、作品管理。
- 小程序公开展示。
### 阶段三:业务闭环
- 预约表单和预约后台。
- 反馈提交、审核和展示。
- 权限校验、错误处理和日志。
### 阶段四:真实试用
- 用朋友的真实内容上线测试环境。
- 至少完成 3 次内容更新和 3 次预约流程演练。
- 修复影响真实使用的问题。
- 冻结第一版范围,记录后续需求,不在上线前无限扩张。
## 13. 后续评估指标
第一版上线后两周观察:
- 朋友是否能独立完成内容更新。
- 客户是否能在不解释的情况下找到服务和联系方式。
- 是否产生真实咨询或预约。
- 预约处理是否比原有聊天记录更清晰。
- 哪些后台操作被频繁使用或频繁出错。
- 哪些需求是其他品牌也可能复用的。
只有在真实使用出现稳定需求后,再评估支付、微信通知、多品牌和自动发布能力。
## 14. 版本边界结论
本版本的交付结果是一个可用的单品牌展示和预约系统,而不是完整 SaaS也不是电商系统。支付作为远期能力被保留在产品边界和数据设计中但当前不实现、不测试、不展示入口。任何新增需求都必须说明它是否直接帮助“展示品牌、承接预约、维护内容”这三个目标否则进入后续需求池。