Better Admin LogoBetter Admin

概览

Better Admin 是什么、由哪些应用组成、数据怎么流动。

Better Admin 是一个同一套产品、同一套 UI、同一套业务逻辑、同一套数据库,分别用不同技术栈实现的全栈 Admin 系统。

它不是"几套不同的后台",而是把同一份业务需求在 React、Vue、Next.js、Nuxt 与 NestJS 上各完整落地一遍,用来横向对照多栈工程实践。

Better Admin 总体架构:四个前端应用、可选 NestJS REST API 与统一 PostgreSQL浏览器端|四个独立前端应用(各自独立运行 / 构建 / 部署)React 19UI Source of TruthVue 3Nuxt UI v4Next.js 16独立全栈Nuxt独立全栈NestJS · REST API为 React / Vue 提供接口 · Drizzle + pgPostgreSQL · Supabase 托管唯一数据库 · 四端共用同一份 Schema 与数据端口 6543 · transaction pooler不经 NestJS直连数据库

一句话理解这个项目

React 版本是 UI Source of Truth。 页面结构、组件行为、视觉、交互与 Design Tokens 都以它为基准,Vue、Next.js、Nuxt 按它复刻 —— 功能对齐优先于像素级对齐。

五个应用

应用角色数据访问路径
apps/reactUI Source of Truth,Hero UI 模板实现→ NestJS REST API
apps/vue按 React 复刻,Nuxt UI v4→ NestJS REST API
apps/next独立全栈,不依赖 NestJS→ PostgreSQL 直连
apps/nuxt独立全栈,不依赖 NestJS→ PostgreSQL 直连
apps/nest独立 REST 后端,只服务 React / Vue→ PostgreSQL

五个应用都能独立运行、独立构建、独立部署。仓库不引入 pnpm workspace,也不因为放在同一目录而产生依赖耦合。

三条不可动摇的约定

1 · 一个数据库,四端共用

全部版本共用同一个 Supabase 托管的 PostgreSQL,统一 Drizzle ORM。Supabase 在这里只当数据库用 —— 不使用 Supabase Auth、RLS、Edge Functions(唯一豁免是 v1.5.0 起的用户头像 Storage)。

浏览器端禁止直连数据库,连接串只存在于服务端环境变量。

2 · Contract 优先,OpenAPI 是唯一真源

API 设计先定义 Contract,再动手实现。契约真源是 apps/nest/openapi/openapi.yaml,五个应用必须遵循同一份契约:路径、方法、响应信封、错误码、分页参数逐字一致

不允许为了"实现方便"自行改契约。改契约前必须评估五个应用各自受到的影响。

3 · 服务端强制校验权限

认证由应用自身实现(JWT 会话),不依赖 Supabase Auth。权限模型是 RBAC:用户 ↔ 角色 ↔ 权限位掩码,并支持菜单与权限关联控制。

前端路由守卫只是体验层,服务端必须独立做一遍 API 权限校验。

当前状态

四个前端的功能对齐度为 29 / 29(100%),只剩两处有意保留的架构差异;五个应用目前都还没有正式上线。

功能对齐状态:四个前端均为 29 / 29 项,功能已全部对齐React29 / 29Vue29 / 29Next.js29 / 29Nuxt29 / 29两处有意保留的架构差异(不算功能缺失)Next.js 无页面保活(App Router 无等价原语)· 认证载体不同(React/Vue 走 Bearer,Next 走 httpOnly Cookie),契约完全一致

接下来读什么

本页目录