Skip to content

abcde-dev/tarotwhisper

 
 

Repository files navigation

🔮 TarotWhisper - 塔罗牌占卜网站

一个纯前端的塔罗牌占卜网站,用户可以输入问题,选择牌阵,进行虚拟抽牌,并通过 OpenAI 兼容 API 获得 AI 塔罗大师的解读分析。

✨ 功能特性

  • 🃏 完整塔罗牌库:包含 78 张标准塔罗牌(22 张大阿尔卡那 + 56 张小阿尔卡那)
  • 🎨 精美牌面图片:高质量塔罗牌图片,支持正逆位显示
  • 🎯 多种牌阵:支持单张牌、三张牌(时间流/身心灵)、凯尔特十字等经典牌阵
  • 🎲 真实抽牌体验:Fisher-Yates 洗牌算法,50% 概率正逆位
  • 翻牌动画:流畅的 3D 翻牌效果,增强沉浸感
  • 🤖 AI 智能解读:集成 OpenAI 兼容 API,提供专业的塔罗牌分析
  • 📝 Markdown 渲染:支持格式化的 AI 分析结果显示
  • 🔒 隐私安全:用户自定义配置仅保存在本地浏览器,默认配置通过服务器代理保护密钥
  • 📱 响应式设计:支持桌面端和移动端访问
  • 🌊 流式显示:实时显示 AI 分析结果,固定容器防止页面晃动

🚀 快速开始

1. 安装依赖

npm install

2. 启动开发服务器

npm run dev

访问 http://localhost:3000 查看网站。

3. 配置 API

首次使用需要配置 OpenAI 兼容的 API:

  1. 点击页面上的"前往设置"或访问 /settings 页面
  2. 填写以下信息:
    • API Base URL: 如 https://api.openai.com/v1
    • API Key: 您的 API 密钥
    • 模型名称: 如 gpt-4o-mini
  3. 点击"测试连接"验证配置
  4. 点击"保存设置"

使用环境变量预设默认 LLM(可选)

TarotWhisper 支持通过环境变量提供一个可选的默认 LLM 配置:

服务器端配置(安全):

  • DEFAULT_LLM_ENABLED:设置为 true1yeson 时启用默认 LLM;设为其它值或缺省时默认禁用。
  • DEFAULT_LLM_BASE_URL:默认 LLM 的基础请求地址。
  • DEFAULT_LLM_API_KEY:默认 LLM 的 API 密钥(仅在服务器端使用,不会暴露到客户端)。
  • DEFAULT_LLM_MODEL:默认使用的模型名称(可选,默认 gpt-4o-mini)。

客户端配置(用于显示):

  • NEXT_PUBLIC_DEFAULT_LLM_AVAILABLE:设置为 true 告知客户端默认 LLM 可用(不包含敏感信息)。
  • NEXT_PUBLIC_DEFAULT_LLM_MODEL:默认模型名称的客户端副本(可选)。

当默认 LLM 被启用且配置完整时,未填写自定义端点的用户将自动通过服务器代理使用该配置;当默认 LLM 被禁用或未配置完整时,首页会提示用户必须完成自己的端点设置。

安全机制

  • 使用默认配置时,所有 AI 请求通过服务器端 API 路由(/api/chat)代理,保护服务器密钥不暴露到客户端
  • 使用自定义配置时,请求直接从浏览器发送到用户指定的端点,保护用户隐私

4. 开始占卜

  1. 在主页输入您的问题
  2. 选择合适的牌阵
  3. 点击"开始占卜"
  4. 按提示逐张抽牌
  5. 查看 AI 塔罗大师的解读分析

🎯 支持的牌阵

单张牌 (One-Card Draw)

  • 用途:快速指引、日常建议
  • 牌数:1 张

三张牌 - 时间流 (Past-Present-Future)

  • 用途:了解问题的发展脉络
  • 牌数:3 张
  • 位置:过去 - 现在 - 未来

三张牌 - 身心灵 (Mind-Body-Spirit)

  • 用途:全面分析问题的不同层面
  • 牌数:3 张
  • 位置:身(物质)- 心(思想)- 灵(精神)

凯尔特十字 (Celtic Cross)

  • 用途:深入全面的问题分析
  • 牌数:10 张
  • 位置:现状、挑战、基础、过去影响、可能未来、近期未来、态度、外部影响、希望恐惧、最终结果

🔧 技术栈

  • 框架:Next.js 16 (App Router)
  • 语言:TypeScript
  • 样式:Tailwind CSS
  • 数据存储:localStorage (API 配置) + sessionStorage (会话数据)
  • AI 集成:OpenAI 兼容 API (支持流式响应)

📁 项目结构

tarot-whisper/
├── app/                    # Next.js App Router 页面
│   ├── page.tsx           # 主页 - 问题输入和牌阵选择
│   ├── settings/          # 设置页面 - API 配置
│   ├── draw/              # 抽牌页面 - 虚拟抽牌
│   └── analysis/          # 分析页面 - 结果展示和 AI 解读
├── data/                  # 数据文件
│   ├── tarot-cards.json   # 78 张塔罗牌完整数据
│   └── spreads.json       # 牌阵配置数据
└── public/                # 静态资源

🔒 隐私与安全

用户自定义配置:

  • ✅ API 密钥仅保存在浏览器本地存储中
  • ✅ 请求直接从浏览器发送到您指定的端点
  • ✅ 不会经过本站服务器,完全保护您的隐私

默认配置:

  • ✅ 服务器 API 密钥不会暴露到客户端
  • ✅ 请求通过服务器端 API 路由代理
  • ✅ 占卜问题和结果不会被永久存储

注意事项:

  • ⚠️ 请勿在公共电脑上使用
  • ⚠️ 建议定期更换 API 密钥

🎨 自定义

添加新牌阵

编辑 data/spreads.json 文件,按照现有格式添加新的牌阵配置。

修改塔罗牌数据

编辑 data/tarot-cards.json 文件,可以修改牌名、关键词等信息。

调整 AI 提示词

app/analysis/page.tsx 中的 systemPrompt 变量可以调整 AI 的角色设定和分析风格。

📝 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request!


免责声明:本项目仅供娱乐和自我探索使用,不应作为重大决策的唯一依据。对于医疗、法律、金融等专业问题,请咨询相关专业人士。

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 94.7%
  • CSS 4.6%
  • JavaScript 0.7%