缘起
人类对”契合”的追寻,大概是最古老的浪漫主义命题之一。
星语人格(Astral Persona / Synastry)是一个将 MBTI 人格理论与西方占星学融合的深度匹配平台。它不只是一个”测测你们合不合适”的玩具——它试图用算法和 AI,给”契合”这个模糊概念一个可感知的形状。
技术栈一览
| 层级 | 技术选型 |
|---|---|
| 前端 | React 19 + TypeScript 5.8 + Vite 6 |
| 样式 | Tailwind CSS 4 + Editorial 设计系统 |
| 动画 | Motion (Framer Motion) 12 |
| 后端 | Spring Boot 3.3.5 + Java 21 |
| 数据库 | MySQL + JPA / Hibernate |
| 安全 | Spring Security + JWT + BCrypt |
| AI | Google Gemini |
| 构建 | Maven |
项目采用前后端分离架构,前端可完全离线运行——核心匹配算法在前后端各自独立实现,互不依赖。
核心功能
1. 灵魂匹配引擎
匹配评分由两大维度构成:
- MBTI 认知互补(60%):基于 N/S 认知维度、E/I 能量取向、T/F 决策偏好、J/P 生活方式四个子维度的互补性进行量化评分
- 星座元素协同(40%):根据火、土、风、水四元素的相生相合关系计算元素层面的和谐度
最终输出三档评级:Best(最佳) / Good(良好) / NotBad(尚可)。
2. AI 情感报告
接入LLM模型,在匹配评分的基础上生成富有诗意的”灵魂匹配报告”。每份报告包含三个篇章:
- [情感张力] —— 两人相遇时可能擦出的火花
- [灵魂共振] —— 深层价值观与精神层面的共鸣
- [守护建议] —— 如何经营这份关系的温柔提醒
若未配置 API Key,系统会优雅降级为预设的 fallback 报告,不影响核心体验。
3. 40 题 MBTI 测试
内置自创题库,每维度(EI / SN / TF / JP)各 10 题。采用五星 Likert 量表(从”很像我”到”很不像我”),测试完成后自动计算各维度百分比、输出 MBTI 类型与置信度评级。用户确认后一键保存到个人资料。
4. 灵契发现
基于注册用户的 MBTI 与星座信息,系统自动匹配异性用户,按三档推荐展示。内置基于种子的伪随机轮换算法,确保每次刷新都有新鲜感。
5. 分享海报
匹配结果页支持一键导出 1920×1080 的 PNG 分享海报,使用 html-to-image 离线渲染,排版稳定,适合分享到社交平台。
6. 用户系统
完整的 JWT 认证体系:注册 / 登录 / 个人资料编辑(名字、性别、MBTI、星座、生日、简介、联系方式)。采用乐观 UI 更新策略,先更新本地状态再同步后端,后端失败时优雅回退。
架构亮点
- 离线优先设计:前端不依赖后端即可完成完整的匹配分析,核心算法在
matching.ts与MatchCalculator.java中双重实现且逻辑一致 - Editorial 美学:
#0A0A0C暗色基底 +#C5A059金色点缀 + Playfair Display 衬线字体 + Inter 无衬线字体的组合,营造高端杂志的视觉质感 - 无路由 SPA:使用
ViewMode联合类型 +AnimatePresence实现页面切换,避免引入 React Router 的复杂性 - 种子数据体系:预置 20 个演示用户(10 男 / 10 女),每个用户拥有完整的 MBTI、星座、个人简介,可直接用于体验匹配与发现功能
- StarField 背景:100 颗随机生成的星星组成动态星空背景,为整个平台增添一份”星辰大海”的氛围
快速开始
# 前端
npm install && npm run dev
# Vite 默认 :3000,自动代理 /api → localhost:8080
# 后端(需先创建 MySQL 数据库 synastry_match)
mvn spring-boot:run
# Spring Boot 默认 :8080,启动时自动建表并初始化 20 个演示用户
后记
星语人格是我第一个完整的把想法变成实际项目的作品。从匹配算法的参数调校,到 AI prompt 的反复打磨,再到每一个 AnimatePresence 过渡细节的调整——它见证了我对”把一个想法完整地做出来”这件事的执念。
星辰不语,但代码有灵。
愿每一段关系,都能找到属于它的最佳匹配。
—— March7th-OvO
Comments
Join the conversation — sign in to leave a comment.
Login with GitHub