SkillAgentSearch skills...

Tianji

tianji

Install / Use

/learn @zabr1314/Tianji
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

天机AI - AI驱动的东方玄学平台

<div align="center"> <img src="./docs/images/logo.png" alt="天机AI Logo" width="120"/>

Next.js React TypeScript Supabase DeepSeek

结合传统东方智慧与现代AI技术的个性化命理分析平台

</div>

📖 项目简介

天机AI是一个创新的AI驱动东方玄学平台,将传统中华命理学与现代人工智能技术完美融合。平台提供专业的八字命理分析、合盘配对、卜卦占卜、运势预测等多元化服务,旨在为用户提供科学、准确、个性化的命理指导。

✨ 核心特色

  • 🎯 AI驱动分析 - 基于DeepSeek大模型,提供智能化命理解读
  • 🔮 多元化服务 - 涵盖八字、合盘、卜卦、运势、姓名、解梦六大核心功能
  • 💎 天机点系统 - 创新的虚拟积分体系,灵活的付费模式
  • 🎨 东方美学设计 - 融合传统文化元素的现代化UI设计
  • 📱 全端响应式 - 完美适配桌面端与移动端体验
  • 🌙 明暗主题 - 支持日夜模式切换,护眼舒适

🎪 功能模块

1. 个人八字命盘 (200天机点)

  • 根据出生时间生成专业八字命盘
  • AI深度解析性格特质、事业运势、感情走向
  • 提供人生建议和改运方向

八字分析界面

2. 八字合盘配对 (300天机点)

  • 双人八字深度匹配分析
  • 感情兼容性评分和详细解读
  • 关系发展建议和注意事项

合盘分析界面

3. 日常卜卦占卜 (150天机点)

  • 基于易经六十四卦的智能占卜
  • 支持抛硬币等互动式卜卦体验
  • 针对具体问题提供指导建议

卜卦界面

4. 个人运势日历 (100天机点)

  • 基于八字的每日运势预测
  • 吉凶宜忌、幸运色彩、数字推荐
  • 个性化的日常生活指导

运势日历界面

5. 姓名学分析 (120天机点)

  • 专业的姓名学五格剖象分析
  • 姓名与八字的匹配度评估
  • 改名建议和吉祥用字推荐

姓名分析界面

6. AI智能解梦 (80天机点)

  • AI驱动的梦境象征解析
  • 结合心理学与传统解梦理论
  • 梦境寓意和生活指导建议

解梦界面

🛠️ 技术栈

前端技术

  • 框架: Next.js 15+ (App Router)
  • UI库: React 19 + TypeScript
  • 样式: Tailwind CSS + shadcn/ui组件
  • 状态管理: Zustand
  • 表单处理: React Hook Form + Zod
  • 主题: next-themes (明暗模式)
  • 图标: Lucide React

后端技术

  • 数据库: Supabase (PostgreSQL)
  • 认证: Supabase Auth (Cookie-based SSR)
  • 实时功能: Supabase Realtime
  • 安全: Row Level Security (RLS)

AI集成

  • AI服务: DeepSeek API
  • 接口: OpenAI SDK兼容
  • 模型: deepseek-chat

测试框架

  • 单元测试: Jest + React Testing Library
  • 集成测试: Jest
  • E2E测试: Playwright
  • API模拟: MSW

🚀 快速开始

环境要求

  • Node.js 18+
  • npm 或 yarn
  • Git

安装步骤

  1. 克隆项目
git clone https://github.com/your-username/tianji-ai.git
cd tianji-ai
  1. 安装依赖
npm install
  1. 环境配置
# 复制环境变量模板
cp .env.local.example .env.local

# 编辑环境变量
# NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
# NEXT_PUBLIC_SUPABASE_PUBLISHABLE_OR_ANON_KEY=your-supabase-anon-key
# DEEPSEEK_API_KEY=your-deepseek-api-key
  1. 启动开发服务器
npm run dev
  1. 数据库设置
# 登录到 Supabase 项目控制台
# 1. 访问 https://supabase.com/dashboard
# 2. 创建新项目或选择现有项目
# 3. 在 SQL Editor 中执行数据库迁移

在 Supabase 项目的 SQL Editor 中执行以下 SQL 脚本来创建所需的数据表:

-- 创建用户资料表
CREATE TABLE public.user_profiles (
  id UUID REFERENCES auth.users ON DELETE CASCADE PRIMARY KEY,
  full_name TEXT,
  avatar_url TEXT,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建天机点账户表
CREATE TABLE public.tianji_accounts (
  id UUID REFERENCES auth.users ON DELETE CASCADE PRIMARY KEY,
  balance INTEGER DEFAULT 100 NOT NULL CHECK (balance >= 0),
  total_earned INTEGER DEFAULT 100 NOT NULL,
  total_spent INTEGER DEFAULT 0 NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建天机点交易记录表
CREATE TABLE public.tianji_transactions (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  type TEXT NOT NULL CHECK (type IN ('earn', 'spend', 'refund')),
  amount INTEGER NOT NULL,
  description TEXT,
  related_service TEXT,
  related_id UUID,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建八字分析记录表
CREATE TABLE public.bazi_analyses (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  name TEXT NOT NULL,
  gender TEXT NOT NULL CHECK (gender IN ('male', 'female')),
  birth_year INTEGER NOT NULL,
  birth_month INTEGER NOT NULL,
  birth_day INTEGER NOT NULL,
  birth_hour INTEGER NOT NULL,
  birth_city TEXT NOT NULL,
  lunar_date JSONB,
  bazi_chart JSONB NOT NULL,
  analysis_result JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建合盘分析记录表
CREATE TABLE public.hepan_analyses (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  person1_info JSONB NOT NULL,
  person2_info JSONB NOT NULL,
  relationship_type TEXT NOT NULL,
  compatibility_score INTEGER NOT NULL CHECK (compatibility_score >= 0 AND compatibility_score <= 100),
  analysis_result JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建卜卦记录表
CREATE TABLE public.bugua_divinations (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  question TEXT NOT NULL,
  question_category TEXT NOT NULL,
  urgency_level TEXT NOT NULL,
  divination_method TEXT NOT NULL CHECK (divination_method IN ('time', 'coin')),
  hexagram_data JSONB NOT NULL,
  interpretation JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建运势记录表
CREATE TABLE public.calendar_fortunes (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  fortune_date DATE NOT NULL,
  user_info JSONB NOT NULL,
  fortune_data JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
  UNIQUE(user_id, fortune_date)
);

-- 创建姓名分析记录表
CREATE TABLE public.name_analyses (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  name TEXT NOT NULL,
  analysis_type TEXT NOT NULL CHECK (analysis_type IN ('existing', 'suggestion')),
  birth_info JSONB,
  analysis_result JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建解梦记录表
CREATE TABLE public.dream_interpretations (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  dream_content TEXT NOT NULL,
  dream_category TEXT NOT NULL,
  dream_emotion TEXT NOT NULL,
  dream_frequency TEXT,
  is_lucid_dream BOOLEAN DEFAULT FALSE,
  user_demographics JSONB,
  interpretation JSONB NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
);

-- 创建用户收藏表
CREATE TABLE public.user_favorites (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users ON DELETE CASCADE NOT NULL,
  item_type TEXT NOT NULL,
  item_id UUID NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
  UNIQUE(user_id, item_type, item_id)
);

-- 启用行级安全策略 (RLS)
ALTER TABLE public.user_profiles ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.tianji_accounts ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.tianji_transactions ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.bazi_analyses ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.hepan_analyses ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.bugua_divinations ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.calendar_fortunes ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.name_analyses ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.dream_interpretations ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.user_favorites ENABLE ROW LEVEL SECURITY;

-- 创建 RLS 政策
CREATE POLICY "用户只能查看自己的资料" ON public.user_profiles FOR ALL USING (auth.uid() = id);
CREATE POLICY "用户只能操作自己的天机点账户" ON public.tianji_accounts FOR ALL USING (auth.uid() = id);
CREATE POLICY "用户只能查看自己的交易记录" ON public.tianji_transactions FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的八字分析" ON public.bazi_analyses FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的合盘分析" ON public.hepan_analyses FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的卜卦记录" ON public.bugua_divinations FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的运势记录" ON public.calendar_fortunes FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的姓名分析" ON public.name_analyses FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能查看自己的解梦记录" ON public.dream_interpretations FOR ALL USING (auth.uid() = user_id);
CREATE POLICY "用户只能管理自己的收藏" ON public.user_favorites FOR ALL USING (auth.uid() = user_id);

-- 创建天机点操作函数
CREATE OR REPLACE FUNCTION public.spend_tianji_points(
  p_user_id UUID,
  p_amount INTEGER,
  p_description TEXT,
  p_service TEXT DEFAULT NULL,
  p_related_id UUID DEFAULT NULL
)
RETURNS BOOLEAN
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
  current_balance INTEGER;
BEGIN
  -- 检查用户余额
  SELECT balance INTO current_balance
  FROM public.tianji_accounts
  WHERE id = p_user_id;
  
  IF current_balance IS NULL THEN
    RETURN FALSE;
  END IF;
  
  IF current_balance < p_amount THEN
    RETURN FALSE;
  END IF;
  
  -- 更新账户余额
  UPDATE public.tianji_accounts
  SET 
    balance = balance - p_amount,
    total_spent = total_spent + p_amount,
    updated_at = now()
  WHERE id = p_user_id;
  
  -- 记录交易
  INSERT INTO public.tianji_transactions (
    user_id, type, amount, description, related_service, related_id
  ) VALUES (
    p_user_id, 'spend', p_amount, p_description, p_service, p_related_id
  );
  
  RETURN TRUE;
END;
$$;

-- 创建新用户时自动创建相关记录的函数
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER
LANGUAGE plpgsql
SECURITY DEFIN
View on GitHub
GitHub Stars5
CategoryDevelopment
Updated2mo ago
Forks3

Languages

TypeScript

Security Score

65/100

Audited on Jan 20, 2026

No findings