Skip to content

timtoday/LeslieWylie.github.io

 
 

Repository files navigation

人生 K 线 | Life Destiny K-Line

结合传统八字命理与金融可视化技术,将人生运势绘制成 K 线图

功能特性快速开始使用指南项目结构


📖 项目简介

人生 K 线是一个创新的命理可视化工具,将传统八字命理学与现代金融 K 线图技术相结合。通过 AI 大模型(Gemini)分析用户的生辰八字,生成 100 年的人生运势 K 线图,帮助用户以直观的方式了解人生起伏、把握关键转折点。

📌 项目说明:本项目的 Demo 和初衷参考了 0xsakura666/lifekline,感谢原作者 @0xsakura666 的创意和灵感。

核心特点

  • 🎯 无需 API 调用:用户手动与 Gemini 对话,避免 API 调用失败
  • 📊 可视化展示:100 年运势以 K 线图形式呈现,直观易懂
  • 🔍 详细分析:包含总评、事业、财富、婚姻、健康、六亲等 6 个维度
  • 🎨 现代 UI:采用 Tailwind CSS,界面简洁美观
  • 📱 响应式设计:支持桌面和移动端访问

✨ 功能特性

1. 八字排盘

  • 输入四柱干支(年、月、日、时)
  • 自动计算大运排序方向(顺行/逆行)
  • 支持自定义起运年龄和第一步大运

2. Prompt 生成

  • 自动生成完整的 Gemini 对话 Prompt
  • 包含系统角色设定和用户提示词
  • 一键复制,方便与 Gemini 对话

3. 结果可视化

  • K 线图:100 年运势走势,绿色代表吉运,红色代表凶运
  • 详细批断:点击 K 线查看每年的流年详批
  • 多维度分析:6 个维度评分(0-10 分)和详细分析

4. 文件上传

  • 支持上传 Gemini 返回的 JSON 结果文件
  • 自动数据格式转换和验证
  • 拖拽上传,操作便捷

🚀 快速开始

环境要求

  • Node.js >= 18.0.0
  • npm >= 9.0.0

安装步骤

  1. 克隆项目

    git clone <repository-url>
    cd lifekline
  2. 安装依赖

    npm install
  3. 启动开发服务器

    npm run dev
  4. 访问应用

    • 打开浏览器访问 http://localhost:5173

构建生产版本

npm run build

构建产物将输出到 dist 目录。

(可选)启用使用日志/数据库埋点(Supabase)

  • 环境变量(部署时配置):
    • SUPABASE_URL:Supabase Project URL(如 https://xxxx.supabase.co
    • SUPABASE_SERVICE_ROLE_KEY:Supabase service_role 密钥(仅后端函数使用)
    • VITE_LOG_ENDPOINT:前端埋点上报地址,指向部署后的 /api/log
  • 后端接口:/api/log(Vercel Function,使用 supabase-js 写入表 usage_logs
    • 请求体:{ userId?, account?, operation, pageData?, timestamp? }
    • 表字段:id, user_id, account, operation, page_data(jsonb), created_at
  • 前端埋点:src/services/usageLogger.ts 在生成 Prompt、上传结果、加载历史等操作时自动上报。

📖 使用指南

完整流程

第一步:输入八字信息

  1. 填写基本信息:

    • 姓名(可选)
    • 性别(乾造/坤造)
    • 出生年份(阳历)
  2. 输入四柱干支:

    • 年柱(如:甲申)
    • 月柱(如:甲戌)
    • 日柱(如:戊辰)
    • 时柱(如:丁巳)
  3. 输入大运信息:

    • 起运年龄(虚岁)
    • 第一步大运干支

第二步:生成 Prompt

  1. 点击"生成 Gemini Prompt"按钮
  2. 弹出窗口显示完整的 Prompt 内容
  3. 复制"系统角色设定"并发送给 Gemini
  4. 等待 Gemini 确认后,复制"用户提示词"并发送
  5. Gemini 会返回 JSON 格式的分析结果

第三步:上传结果

  1. 将 Gemini 返回的 JSON 保存为文件(如:result.json)
  2. 关闭 Prompt 窗口
  3. 在文件上传区域拖拽或选择 JSON 文件
  4. 系统自动解析并显示 K 线图和分析报告

查看结果

  • K 线图:查看 100 年运势走势
  • 点击 K 线:查看每年的详细流年批断
  • 分析报告:查看各维度的评分和分析

📁 项目结构

lifekline/
├── src/                     # 源代码目录
│   ├── components/          # React 组件
│   │   ├── AnalysisResult.tsx        # 分析结果展示组件
│   │   ├── BaziForm.tsx              # 八字输入表单
│   │   ├── DimensionComparisonChart.tsx # 多维度对比图
│   │   ├── EnhancedKLineChart.tsx     # 增强K线图组件
│   │   ├── ErrorBoundary.tsx          # 错误边界组件
│   │   ├── ExportButton.tsx           # 导出功能组件
│   │   ├── FileUpload.tsx             # 文件上传组件
│   │   ├── HistoryPanel.tsx           # 历史记录面板
│   │   ├── LoadingSpinner.tsx         # 加载动画组件
│   │   ├── PromptDisplay.tsx          # Prompt显示组件
│   │   ├── StatisticsPanel.tsx       # 统计分析面板
│   │   ├── Toast.tsx                  # Toast通知组件
│   │   └── ToastContainer.tsx         # Toast容器组件
│   ├── hooks/              # 自定义 Hooks
│   │   └── useToast.ts                # Toast Hook
│   ├── services/           # 服务层
│   │   ├── geminiService.ts           # Gemini API服务(保留用于向后兼容)
│   │   └── promptGenerator.ts         # Prompt生成服务
│   ├── utils/              # 工具函数
│   │   ├── storage.ts                 # 本地存储工具
│   │   └── validation.ts              # 数据验证工具
│   ├── App.tsx             # 主应用组件
│   ├── index.tsx           # 入口文件
│   ├── types.ts            # TypeScript类型定义
│   ├── constants.ts        # 常量配置
│   └── vite-env.d.ts       # Vite类型声明
├── public/                  # 静态资源目录
│   ├── prompts/            # Prompt 模板文件
│   │   ├── default.txt         # 默认 Prompt
│   │   ├── detailed.txt        # 详细 Prompt
│   │   ├── detailed_v2.txt     # 详细 Prompt V2(全息数据版)
│   │   └── detailed_v3.txt     # 详细 Prompt V3(最新版)
│   ├── metadata.json       # 元数据
│   └── web.config          # Web服务器配置
├── docs/                    # 文档目录
│   ├── README.md               # 文档索引
│   ├── DEPLOYMENT.md           # 部署指南
│   └── TROUBLESHOOTING.md      # 故障排除指南
├── data/                    # 数据目录
│   ├── examples/           # 示例数据(可提交到Git)
│   │   ├── result.json         # 原始示例数据
│   │   └── result-converted.json # 转换后的示例数据
│   └── Users_data/         # 用户数据(已加入.gitignore)
├── .github/                 # GitHub配置
│   └── workflows/          # GitHub Actions工作流
│       └── deploy.yml       # 自动部署配置
├── index.html              # HTML模板(Vite入口)
├── vite.config.ts          # Vite配置
├── tailwind.config.js       # Tailwind CSS配置
├── tsconfig.json           # TypeScript配置
├── package.json            # 项目配置
├── .gitignore              # Git忽略文件
└── README.md               # 项目说明文档

🛠️ 技术栈

前端框架

  • React 19 - UI 框架
  • TypeScript - 类型安全
  • Vite - 构建工具

UI 库

  • Tailwind CSS - 样式框架
  • Lucide React - 图标库
  • Recharts - 图表库

核心功能

  • Prompt 生成 - 自动生成完整的 Gemini 对话 Prompt
  • 数据转换 - 自动转换 Gemini 返回的 JSON 格式
  • 文件上传 - 支持拖拽上传 JSON 文件

📝 数据格式

输入格式(BaziInput)

{
  name?: string;           // 姓名(可选)
  gender: Gender;          // 性别(MALE/FEMALE)
  birthYear: string;       // 出生年份
  yearPillar: string;      // 年柱
  monthPillar: string;     // 月柱
  dayPillar: string;       // 日柱
  hourPillar: string;      // 时柱
  startAge: string;        // 起运年龄(虚岁)
  firstDaYun: string;      // 第一步大运
}

输出格式(LifeDestinyResult)

{
  chartData: KLinePoint[];  // K线数据(100个数据点)
  analysis: AnalysisData;    // 分析报告
}

K 线数据点格式

{
  age: number;        // 年龄(1-100)
  year: number;       // 年份
  ganZhi: string;     // 流年干支
  daYun?: string;    // 大运干支
  open: number;       // 开盘价(0-100)
  close: number;      // 收盘价(0-100)
  high: number;       // 最高价(0-100)
  low: number;        // 最低价(0-100)
  score: number;      // 综合评分(0-100)
  reason: string;     // 流年详批(约100字)
}

🔧 开发指南

添加新功能

  1. 新增组件:在 components/ 目录下创建新组件
  2. 新增服务:在 services/ 目录下创建新服务
  3. 类型定义:在 types.ts 中添加类型定义

代码规范

  • 使用 TypeScript 严格模式
  • 遵循 React Hooks 最佳实践
  • 组件使用函数式组件
  • 样式使用 Tailwind CSS

调试技巧

  • 使用浏览器开发者工具查看网络请求
  • 检查控制台日志了解数据流转
  • 使用 React DevTools 调试组件状态

📚 相关文档


⚠️ 注意事项

  1. 数据准确性:本项目仅供娱乐与文化研究,请勿迷信
  2. 数据隐私:所有数据在本地处理,不会上传到服务器
  3. 浏览器兼容:建议使用现代浏览器(Chrome、Firefox、Edge 等)

🤝 贡献

欢迎提交 Issue 和 Pull Request!


📄 许可证

本项目仅供学习和研究使用。


👤 作者


🙏 致谢

  • 特别感谢0xsakura666/lifekline 项目及其作者 @0xsakura666,本项目的 Demo 和初衷参考了该项目的创意
  • 感谢传统八字命理学的智慧
  • 感谢 Gemini AI 的强大能力
  • 感谢所有开源项目的支持

⭐ 如果这个项目对你有帮助,请给个 Star!

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.1%
  • Other 0.9%