Skip to content

Anoddy-Li/phti

Repository files navigation

PHTI

PHTI 是一个公开可访问的物理学家风格测试网站。它不测“会不会做题”,而是用一套偏物理工作方法的题目,去描出你更接近哪一种物理学家的思考路径。

在线地址:https://phti.online

PHTI 首页

项目简介

互联网上已经有很多人格测试产品,但很少有人认真处理“理工语境下的思维风格”这件事。PHTI 想做的不是把 MBTI 换一层壳,而是把建模习惯、实验观、结构审美、理论直觉、近似能力、解释欲望这些更接近物理学史的差异,整理成一套适合网页体验的结果系统。

整站围绕三个目标展开:

  • 题目要像真实判断,而不是价值观问答
  • 结果页要有叙事感,也要能独立分享
  • 算法不能靠随机或单一维度硬分配

功能特性

  • 单题流作答,支持上一题、下一题、进度显示与中途恢复
  • 36 道题目,采用 7 级量表,题面围绕物理学式的理解方式与工作偏好
  • 20 位物理学家画像,覆盖理论、实验、结构派、解释派等不同风格
  • 结果页输出主结果、Top 3 匹配、多维图谱、优势、盲区与学习建议
  • 结果链接可直接分享,刷新不会丢失
  • 人物肖像来自 Wikimedia 体系,并保留来源与授权信息

设计思路

PHTI 的题目并不直接问“你严不严谨”“你重不重视数学”这类很容易被顺着回答的问题,而是尽量把判断放进更具体的场景里。例如:

  • 面对反常现象,第一反应是补装置还是换框架
  • 接触一个新理论时,更需要图景、推导还是结构先站住
  • 遇到复杂系统时,更想保留纹理还是先抓主导项
  • 对对称、美感、可测量性和近似估算分别有多大依赖

结果页也不是简单贴一个名字。它会把用户答案先映射为隐藏维度,再与物理学家画像向量做加权匹配,并结合关键命中维度生成解释,让 Top 1 和 Top 2 / Top 3 的差异更容易看懂。

结果机制概述

PHTI 的结果不是随机抽签,也不是“哪个维度最高就对应某位物理学家”。

整体流程是:

  1. 题目映射到多条隐藏维度
  2. 维度归一化后形成用户画像向量
  3. 用户画像与物理学家原型向量做加权匹配
  4. 对区分度更高的维度给予更强权重
  5. 对过于宽泛、容易泛匹配的原型加入适度校准
  6. 输出主结果、次高匹配与动态解释文本

仓库里保留了完整的数据与实现,核心入口分别在:

页面展示

首页

PHTI 首页预览

测试页

PHTI 测试页预览

结果页

PHTI 结果页预览

技术栈

  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • Framer Motion
  • Recharts
  • Vitest

页面状态主要通过 React 组件状态与本地草稿存储管理;结果页本身使用 URL 编码结果,不依赖数据库也能保持可分享与可恢复。

本地启动

npm install
npm run dev

默认开发地址为 http://localhost:3000

生产构建与本地预览:

npm run build
npm run start

运行测试:

npm run test

环境变量

复制 .env.example.env.local

NEXT_PUBLIC_SITE_URL=http://localhost:3000

这个变量主要用于结果页的绝对链接与 Open Graph 元信息。本项目已经兼容在 Vercel 上按请求域名生成分享地址,因此正式部署时也可以把它设置成正式站点地址。

项目结构

src
├─ app
│  ├─ page.tsx
│  ├─ quiz/page.tsx
│  └─ result/[code]/page.tsx
├─ components
├─ data
│  ├─ dimensions.ts
│  ├─ physicists.ts
│  ├─ portraits.json
│  └─ questions.ts
├─ lib
│  ├─ quiz-storage.ts
│  ├─ result-engine.ts
│  ├─ scoring.ts
│  ├─ share-code.ts
│  └─ wikimedia.ts
└─ types
   └─ phti.ts
public
└─ portraits
scripts
├─ fetch-portraits.mjs
└─ fetch-portraits.ps1
docs
└─ screenshots

部署说明

当前线上版本部署在 Vercel,正式域名为 https://phti.online

如果要自行部署,最省事的方式仍然是:

  1. Fork 或克隆仓库
  2. 在 Vercel 导入项目
  3. 配置 NEXT_PUBLIC_SITE_URL
  4. 直接发布

项目包含 vercel.json,已经内置根域跳转到 www 的规则。

人物肖像来源

站内人物肖像优先使用 Wikipedia / Wikimedia Commons 体系资源,图片与授权元数据分别保存在:

需要重新抓取时可执行:

npm run fetch:portraits

开发与维护

如果要继续扩展这个项目,最常见的入口有三处:

题库、人物库、结果引擎都是数据驱动结构,后续继续加题、加人、改结果文案都不需要重写页面层。

Roadmap

  • 补充更多人物与更细的结果差异化描述
  • 优化移动端结果页的信息密度与阅读节奏
  • 增加更多可分享的结果卡片样式

许可证

本项目使用 MIT License

About

一个公开可访问的物理学家风格测试网站,用题目、画像与加权匹配生成可分享的结果页。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors