BNEF活动管理平台
基于 React 19 + Supabase + 微信生态的活动管理 SaaS 平台,含 C 端(微信内浏览器)和 Admin 后台,支持报名、签到、电子票、通知等全流程。
概述
BNEF 活动管理平台是一个功能完整的活动管理 SaaS 系统,技术栈为 React 19 + TypeScript + Vite + Tailwind v4 + Supabase + 微信生态。项目仓库位于 ~/projects/BNEF(GitHub: Restry/BNEF.git),线上地址为 https://demo.dtask.net(原 bnef.restry.cn 已迁移)。
系统包含 20 个用户端页面和 13 个管理端页面,覆盖活动浏览、报名、签到、电子票、收藏、PC 端适配等功能。数据库使用 Supabase,已完成 11 次迁移。
技术栈
| 层面 | 技术 |
|---|---|
| 前端框架 | React 19 + TypeScript + Vite |
| UI 样式 | Tailwind CSS v4 |
| 后端/数据库 | Supabase(PostgreSQL + Auth + Edge Functions) |
| 微信集成 | 微信公众号 AppID wx225bf76b06064faa |
| 测试框架 | Playwright (E2E) + Vitest (单测) |
环境清单
| 环境 | 配置文件 | Supabase URL | 前端地址 |
|---|---|---|---|
| Dev(开发) | .env | https://db.dora.restry.cn | https://demo.dtask.net |
| Test(测试) | .env.test | https://restry-dev.chinanorth3.cloudapp.chinacloudapi.cn | — |
| SIT(集成测试) | .env.sit | https://tiger-host.chinanorth3.cloudapp.chinacloudapi.cn | — |
功能模块
用户端(20 页面)
- 首页(活动列表、分类筛选、已结束筛选)
- 活动详情(浏览量统计、倒计时、回放入口)
- 报名流程(动态表单、“其它”选项、隐私协议)
- 签到/电子票(二维码、搜索模式核销)
- 个人中心(报名记录、收藏、个人信息)
- PC 端适配(PCHome、PCEventDetail)
管理端(13 页面)
- 数据看板(活动数/报名数/会员数/浏览量)
- 活动管理(创建/编辑/发布/停止报名/隐藏/回收站)
- 报名管理(筛选/搜索/导出/拼音列)
- 通知系统(微信/短信模板选择、发送记录)
- 权限管理(角色、管理员创建/Ban/Unban)
- Banner 管理
测试体系
测试规模
- 单元测试: 228 个用例,7 个文件,全部通过
- E2E 测试: 179 个用例,17 个 spec 文件
- Smoke 测试: 14 个用例(本地)+ 线上 smoke
测试迭代过程(10 轮进化)
BNEF Bot 执行了 10 轮测试迭代,从”写死脚本”进化到”像真人一样测试”:
- 第 1-2 轮: 修复 13 个失败单测,跑通 Smoke
- 第 3-4 轮: 修复 E2E 选择器过时问题(24 个),通过核心链路
- 第 5-6 轮: 补充签到/电子票/PC 端/个人信息 26 个新用例
- 第 7-8 轮: 清理 37 个 skip(部分是旧 spec 指向不存在的路由)
- 第 9-10 轮: 探索性测试——像真人 QA 浏览页面截图发现问题
探索性测试发现的真实问题
| 严重度 | 问题 | 状态 |
|---|---|---|
| P1 | PC 端活动封面图 broken(img src="" 空值未处理) | ✅ 已修复 |
| P1 | placeholder 占位图还在用 via.placeholder.com | ✅ 已修复 |
| P2 | 报名页时间格式不一致(ISO vs 中文格式) | ✅ 已修复 |
| P3 | 活动详情页无浏览量显示 | ✅ 已修复 |
| P3 | Console 报 406 错误(PGRST116 未静默处理) | ✅ 已修复 |
| P3 | 首页无”已结束”状态筛选 | ✅ 已修复 |
测试覆盖缺口
| 模块 | 单测 | E2E | 风险 |
|---|---|---|---|
| auth.ts (529行) | ❌ 0 | 16 | 🔴 认证核心无单测 |
| notifications.ts (504行) | ❌ 0 | 1 | 🔴 通知基本裸奔 |
| Edge Functions (5个) | ❌ 0 | 0 | 🔴 零覆盖 |
| banners.ts / subscriptions.ts | ❌ 0 | 0 | 🟡 零覆盖 |
| components (14个) | ❌ 0 | — | 🟡 无组件单测 |
架构审查发现
P0 安全漏洞:service_role key 暴露到前端
VITE_SUPABASE_SERVICE_ROLE_KEY 通过 import.meta.env 被打包进客户端 JS。虽然生产环境 .env 中变量名无 VITE_ 前缀(实际未暴露),但测试环境 .env.test 有此前缀。
修复方案:新建 admin-user Edge Function 处理 createAdmin/ban/unban 三个操作,前端改为调 Edge Function,删除 supabaseAdmin 导出。已实施。
架构问题
| 问题 | 影响 |
|---|---|
| API 层单体聚合对象无法 tree-shake | Bundle 膨胀 |
| 45 个页面无代码分割 | 首屏加载慢(微信内浏览器) |
| CheckIn 路由权限不一致 | 未授权用户可访问签到页 |
| EventDetail.tsx 976 行 God Component | 26 个 useState,不可维护 |
| 错误处理三种风格混用 | 静默返回 [] 最危险 |
| 66 个 console.error 散落在 API 层 | 生产环境暴露内部信息 |
项目整理
已清理
- 17 个一次性探索脚本 + 72MB 临时文件
- 过时文档:rollback-plan.md、changelog.md、Bug-list.md
- 合并重复测试文档(test-case.md → 删)
- 删除过时 POM 页面和 spec 文件
- 删除无引用的 src/api/core.ts
docs/ 目录现状
| 文件 | 内容 |
|---|---|
| prd.md | 完整 PRD(1707 行) |
| e2e-test-cases.md | E2E 自动化测试案例清单 |
| test-plan.md | 测试计划(已更新) |
| test-report-20260321.md | 测试报告 |
时间线
- 2026-03-21: 项目整理,确认技术栈和环境清单
- 2026-03-21~22: 10 轮 E2E 测试迭代,从 13 个失败到 0 failure
- 2026-03-22: 探索性测试发现并修复 6 个真实问题
- 2026-03-22: 项目文件清理(72MB 垃圾 + 过时文档)
- 2026-03-23: 架构代码审查,发现并修复 P0 安全漏洞
- 2026-03-24: 代码推送,PackHorizon-AI 部署
相关页面
- bnef — BNEF Bot 实体
- supabase-platform — Supabase 平台
- caddy-reverse-proxy — Caddy 反向代理
- azure-vm-management — Azure VM 管理