Skip to content

lzwme/sbti-pro

Repository files navigation

SBTI PRO - 2026最火的人格测试

在线预览:https://sbti.lzw.me

React TypeScript Vite Tailwind CSS

🔥 SBTI (Silly Big Personality Test) - 傻乎乎的大人格测试

MBTI已经过时,SBTI来了!

✨ 功能特色

  • 🎯 30种人格类型 - 死者、吗喽、ATM、小丑、摸鱼王...
  • ⏱️ 快速测试 - 12道趣味选择题,约2分钟完成
  • 🎨 多风格分享卡 - 暗黑系、可爱风、极简风,一键生成专属图片
  • 📊 实时统计 - 查看各类型分布、人气排行
  • 📱 响应式设计 - 完美适配移动端和桌面端
  • 🔍 SEO优化 - 完整的Meta标签、结构化数据

🚀 快速开始

安装依赖

npm install

开发模式(前端 + 本地统计 API)

npm run dev

使用 concurrently 同时启动 Vite 开发服(默认 3000)统计 API(默认 3001);Vite 已将 /api 代理到本机 3001。浏览器访问 http://localhost:3000。

仅跑前端(不启 API、统计页会请求失败)时:

npm run dev:frontend

统计接口:GET /api/statsPOST /api/events/test-complete(JSON:{ "typeCode": "MALO" })。数据写入 server/data/stats.db(SQLite3,Node 内置 node:sqlite,建议 Node 22.5+ / 24+)。启动时控制台可能出现 SQLite 实验性特性提示,可忽略。

构建生产版本

npm run build

prebuild 会执行 scripts/generate-seo.mjs,生成 public/sitemap.xmlpublic/robots.txtserver/valid-codes.json

测试

npm test

预览生产版本

npm run preview

📁 项目结构

.
├── public/                    # 静态资源(含构建期生成的 sitemap / robots)
├── scripts/
│   ├── generate-seo.mjs      # prebuild:站点地图、robots、valid-codes
│   └── build.mjs             # 打部署包 dist/sbti-test-pro.zip
├── server/
│   ├── stats-api.cjs         # 匿名统计 API(Express)
│   ├── valid-codes.json      # prebuild 生成,供 API 校验 typeCode
│   └── data/                 # 运行时 SQLite(stats.db,不入库可本地生成)
├── src/
│   ├── api/                  # 前端请求统计 API 的封装
│   ├── components/
│   │   ├── common/
│   │   ├── test/
│   │   ├── result/
│   │   └── share/
│   ├── pages/
│   │   ├── Home.tsx
│   │   ├── Test.tsx
│   │   ├── Result.tsx
│   │   ├── Stats.tsx
│   │   ├── About.tsx
│   │   ├── TypesIndex.tsx    # 人格图鉴列表
│   │   ├── TypeDetail.tsx    # 单类型详情
│   │   └── Privacy.tsx
│   ├── config/               # 站点配置等
│   ├── data/
│   │   ├── questions.ts
│   │   └── personalityTypes.ts
│   ├── store/
│   │   └── useStore.ts
│   ├── utils/
│   ├── hooks/
│   ├── App.tsx
│   ├── main.tsx
│   └── index.css             # Tailwind 入口(Tailwind v4 + @tailwindcss/vite)
├── index.html
├── package.json
├── tailwind.config.js
├── vite.config.ts
├── vitest.config.ts
└── tsconfig.json

🛠️ 技术栈

  • 框架: React 19 + TypeScript 6
  • 构建: Vite 8(@vitejs/plugin-react
  • 样式: Tailwind CSS 4(@tailwindcss/vite 插件,保留 tailwind.config.js 主题扩展)
  • 路由: React Router 7
  • 动画: Framer Motion 12
  • 图表: Recharts 3
  • 状态: Zustand 5
  • SEO: react-helmet-async
  • 图片生成: html2canvas
  • 统计 API: Express 5 + cors(server/stats-api.cjs,SQLite node:sqlite
  • 测试: Vitest 4

📝 人格类型一览

代码 名称 标签
DEAD 死者 精神已死、彻底躺平
MALO 吗喽 佛系打工人、摆烂但活着
ATM ATM送钱者 老好人、人形ATM
CTRL 拿捏者 人间清醒、控场大师
JOKE 小丑 搞笑担当、用快乐掩盖心碎
FAKE 伪人 人前一套、人后一套
SOLO 孤儿 独来独往、自我封闭
GOGO 行动派 说干就干、执行力拉满
DRUNK 酒鬼 借酒消愁、爱疯爱浪
OJBC 无所谓人 极致随缘、怎么都好
... ... ...

共30种人格类型等你发现!

🎨 分享卡片风格

暗黑风格

经典SBTI风格,丧系暗黑系设计,适合朋友圈装酷。

可爱风格

粉嫩少女心,适合小红书分享。

极简风格

高级感满满,适合商务人士。

🔧 环境变量(Vite)

在仓库根目录创建 .env / .env.production(按需):

变量 说明
VITE_SITE_URL 站点绝对根 URL,无尾斜杠(如 https://your-domain.com)。用于分享链接、canonical、构建期替换 index.html 中的占位域名与 OG 图绝对路径。
VITE_STATS_API_URL 统计 API 根 URL(无尾斜杠)。留空时前端请求同源相对路径 /api(需托管侧将 API 反代到同一源;本地可用 npm run dev 走 Vite 代理)。生产环境若前后端分域,请设为 API 源并配置服务端 ALLOWED_ORIGIN CORS。

统计服务部署与监控

  • 进程入口:node server/stats-api.cjs,环境变量:PORTALLOWED_ORIGIN(建议设为前端源,如 https://your-domain.com)。
  • 限流:单 IP 约 60 次/小时上报;超限返回 429
  • 监控:查看进程标准输出与托管平台 HTTP 5xx/429 比例即可。

修改测试题目

编辑 src/data/questions.ts:十五维题每个选项为 { text, value? }value 为 1–3,与原版 main.js 一致;未写 value 时按选项在题中的顺序默认为 1、2、3。补充题(饮酒门禁等)由组卷逻辑写入 value,无需手填。

添加新人格类型

编辑 src/data/personalityTypes.ts,遵循 PersonalityType 接口格式;重新构建以更新站点地图与 valid-codes.json

SEO 说明

当前人格图鉴与结果页使用 CSR + react-helmet-async 更新标题与描述;纯爬虫对动态页的收录可能弱于 SSG/SSR。若需强 SEO,可在后续变更中为人格页做预渲染(见 OpenSpec 变更 sbti-phase-a-through-d 任务 4.7)。

后续可能迭代(未在本仓库实现)

  • 连续同选偏移、隐藏分支等进阶计分规则。
  • 第四套「平台特供」分享图模板。

📦 部署

Vercel

npm install -g vercel
vercel

Netlify

npm install -g netlify-cli
netlify deploy --prod

Cloudflare Pages

直接连接GitHub仓库即可。

本地部署

# 构建用于部署的产物 dist/sbti-test-pro.zip(需本机有 zip 命令)
npm run b

# 上传 sbti-test-pro.zip 至服务器并解压
unzip -oq sbti-test-pro.zip
cd sbti-test-pro
npm install --omit=dev
pm2 start server/stats-api.cjs --name sbti

解压包内前端静态文件在 frontend/,Nginx 根目录指向 frontend//api 反代到 Node 进程(默认 PORT=3001,可按托管环境设置);包内 package.json 提供 npm run start:api

🙏 致谢与原作

本项目所依据的 SBTI(傻乎乎的大人格测试) 题材与相关内容,原作首发于哔哩哔哩(B 站)UP 主,个人空间:https://space.bilibili.com/417038183

感谢该 UP 主带来的创意与公开内容;本仓库为独立实现与二次分发,若你对测试文案、梗或视觉风格有版权或署名方面的要求,欢迎通过 Issue 联系维护者协商处理。

📄 License

MIT License - 随意使用,但请保留署名。


MBTI已经过时,SBTI来了!
sbti.lzw.me

About

🔥 SBTI (Silly Big Personality Test) - 傻乎乎的大人格测试

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors