当前项目已经从更宽泛的内容平台方向,收敛为一个更明确的「科技领导者社区 / 组织展示与运营平台」。
当前版本的前台必须包含以下 7 个公开模块:
- 首页
- 分会董事会
- 成员列表与成员详情
- 活动列表与活动详情/报名
- 文章列表与文章详情
- 加入申请说明与申请表
- 关于我们
当前版本的后台必须包含以下 8 个运营模块:
- 仪表盘
- 文章管理
- 活动管理与报名审核
- 申请审核
- 成员管理
- 工作人员管理
- 角色与权限配置
- 审计日志
当前不再把下列能力视为本阶段的一线范围:
- 主题专题页
topics - 独立城市内容页
cities - 训练营 / 企业图谱 / 成员中心
- 支付、发票、复杂工作流引擎
- 公开站点:
Astro - 管理后台:
Vue + Vite
- API 框架:
Hono - 数据库:
PostgreSQL - ORM 与迁移:
Drizzle ORM + Drizzle Kit - 身份认证:
Better Auth - 文件存储:
S3-compatible object storage
- Monorepo:
pnpm workspace - 运行时:
Node.js - 部署:
Docker+ 任意标准 Node 兼容平台
Visitors / Members
-> apps/site (Astro)
Staff Users
-> apps/admin (Vue + Vite)
apps/site / apps/admin
-> apps/api (Hono)
-> Better Auth routes
apps/api
-> PostgreSQL
-> S3-compatible object storage
核心边界:
apps/site负责品牌展示、SEO、公开浏览、低交互页面apps/site也承担成员侧前台能力,例如成员查看信息、活动报名等apps/admin负责内部表格、表单、审核、权限化操作apps/api是唯一业务入口,承载业务规则与鉴权PostgreSQL保存结构化业务数据S3保存图片等二进制文件,数据库仅保存元数据
apps/
site/ Astro 前台
admin/ Vue + Vite 后台
api/ Hono API
packages/
db/ Drizzle schema / migrations / seeds
shared/ 共享 DTO、zod schema、常量
ui/ 可选的共享设计令牌或工具
docs/
规划与设计文档
结构原则:
- 不把前台和后台混入同一个前端框架
- 不把业务规则下沉到前端
- 共享的是契约,不是把所有实现耦合到一起
Astro 继续作为公开站点的主框架,但不同页面的渲染方式需要区分:
- 首页、加入说明页、关于我们:静态优先
- 分会董事会页:静态优先,数据更新后重建或按需刷新
- 成员列表:支持服务端分页或按需渲染,避免大规模静态生成压力
- 成员详情、文章详情、活动详情:静态优先,必要时支持混合渲染
- 报名与申请表:页面可静态,提交必须走 API
- 当前阶段不引入成员认证,活动报名采用开放提交 + 后台审核确认
设计目标:
- SEO 友好
- 内容可被后台驱动更新
- 仅在必要处使用 Astro islands 或客户端交互
Vue + Vite 后台是一个典型的内部运营控制台,重点在于:
- 表格列表
- 复杂表单
- 审核流转
- 权限化导航
- 审计追踪
后台一级导航以用户要求的 8 个模块为准。
其中部分支持性能力不一定需要独立一级菜单:
- 首页配置
- 加入页 / 关于页内容管理
- 资源上传与图片选择
- 分会与董事会成员维护
这些能力可以作为成员域或内容域下的二级页面存在。
Hono 负责:
- 公开站点读取 API
- 后台管理 API
- Better Auth 挂载与会话校验
- 参数校验、权限校验、业务规则执行
- S3 上传签名与文件元数据落库
- 审计日志记录
- 健康检查与内部任务接口
推荐 API 分组:
/api/public/v1/*/api/admin/v1/*/api/auth/*/api/internal/v1/*
当前版本的核心域应收敛到以下 8 类:
- 成员与工作人员
membersusers(当前主要用于工作人员认证)staff_accountsrolespermissions
- 站点基础内容
site_settingshomepage_sectionssite_pages(join/about)
- 分会与董事会
branchesbranch_board_members
- 文章
articles
- 活动
eventsevent_registrationsevent_agenda_items
- 加入申请
join_applications
- 媒体资源
assets
- 运营审计
audit_logs
关键建模约束:
members是成员业务域staff_accounts是工作人员后台准入域- 两者完全分开建模,不做包含关系,不做默认映射
users当前主要服务于工作人员认证,不默认承载成员身份- 分会既承担组织展示,也承担活动城市筛选维度
- 公开页面看到的内容必须全部来源于已发布数据
认证与授权继续分离:
Better Auth解决“你是谁”- 业务表和中间件解决“你能做什么”
这里必须区分两套完全不同的概念:
- 人群身份分类
- 非成员访客
- 申请人
- 成员
- 工作人员
- 工作人员 RBAC 角色
super_admincontent_editorevent_manager- 等后台权限角色
重要说明:
- “成员”不是后台里的一个
role - “角色”菜单只服务于工作人员后台权限管理
- 非成员提交加入申请,不参与后台角色体系
- 成员前台能力与工作人员后台权限必须分别建模
当前后台权限最少需要覆盖:
- 仪表盘查看
- 页面内容管理
- 文章管理
- 分会/董事会管理
- 成员管理
- 活动管理
- 活动报名审核
- 入会申请审核
- 工作人员管理
- 角色权限管理
- 审计日志查看
未来如切换手机号登录,只应增加一种登录方式,不应重建身份体系。
对象存储主要承载:
- 首页横幅与精选图片
- 分会封面图
- 董事会成员头像
- 成员头像
- 文章封面与正文插图
- 活动海报与嘉宾图片
原则:
- 二进制文件存 S3
- 元数据与引用关系存 PostgreSQL
- 前台永远通过资产元数据推导 URL,不在业务记录里硬编码外链
推荐域名拆分:
www.example.com:前台admin.example.com:后台api.example.com:APIassets.example.com:CDN 或对象存储访问域名
部署方式:
apps/site:静态托管或 Astro SSR 容器apps/admin:静态托管apps/api:Docker 化 Node 服务
这样可以保持平台兼容性,不被单一厂商锁死。
已完成:
- 技术栈确认
- 仓库结构确认
- 系统边界确认
- 目标站基准分析
已完成或基本完成:
- Monorepo 脚手架
- API / Site / Admin 基础工程
- 数据库与认证打通
- 基础测试与 CI
当前已完成:
- 将产品范围收敛到 7 个前台模块和 8 个后台模块
- 以
branches/members/join_applications为主线重整数据模型和 API - 将旧的
topic/city方向降级为历史探索,不再作为当前交付边界
下一步交付:
- 首页
- 分会董事会
- 成员列表/详情
- 活动列表/详情/报名
- 文章列表/详情
- 加入说明/申请
- 关于我们
下一步交付:
- 仪表盘
- 文章管理
- 活动管理与报名审核
- 申请审核
- 成员与分会维护
- 工作人员与角色权限
- 审计日志
后续增加:
- 更细粒度的审计与告警
- 缓存与重建策略
- 备份恢复演练
- 更完整的发布自动化
- 不引入
Next.js作为核心框架 - 不把前后台合并为单应用
- 不让前端直接访问数据库作为主路径
- 不把图片文件直接存进
PostgreSQL