· ... · 1,869 chars · 2 min

星语人格:灵契匹配系统 —— 当 MBTI 遇上星辰

基于 MBTI 人格理论与西方占星学的深度恋人匹配与 AI 情感分析平台。React + Spring Boot 全栈实践,融合人格心理学、星座元素理论与 Gemini AI。

缘起

人类对”契合”的追寻,大概是最古老的浪漫主义命题之一。

星语人格(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
AIGoogle 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.tsMatchCalculator.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