# Cappadocia AI Travel Planner 需求文档 ## 1. 应用概述 ### 1.1 应用名称 Cappadocia AI Travel Planner ### 1.2 应用描述 一款专为卡帕多西亚(土耳其内夫谢希尔地区)设计的企业级 AI 驱动旅行规划系统。系统使用 OpenAI 生成个性化行程,并通过 Google Maps APIs 验证所有地点,确保准确性和可靠性。应用提供媲美 Wanderlog 的高端、情感化用户体验,具备精致的视觉设计、流畅的动画和直观的交互。 ## 2. 核心功能 ### 2.1 行程规划 - 基于步骤的向导表单,带实时预览地图 - 步骤 1:日期选择 - 步骤 2:兴趣偏好 - 步骤 3:旅行风格和节奏 - AI 根据用户输入生成行程建议 - 所有建议地点通过 Google Places API 验证 - 未验证的地点自动丢弃 - 最终行程显示已验证地点及完整详情 ### 2.2 行程管理 - 查看详细的每日时间线,采用高端卡片设计 - 拖放重新排序每日地点 - 重新排序后自动重新计算路线 - 显示每日总距离、时长和预估预算 - 地点之间的旅行时间块,显示驾驶时长 - 本地保存多个行程 - 删除已保存行程 ### 2.3 交互式地图 - 粘性地图视图与时间线同步(30% 宽度) - 将所有地点显示为自定义 SVG 标记 - 显示地点之间的路线折线 - 活动标记弹跳动画 - 点击时间线项目以居中地图并高亮标记 - InfoWindow 显示地点图片、评分和在 Google Maps 中打开按钮 - 平滑地图过渡 ### 2.4 地点信息 - 大型 16:9 图片为主的卡片布局 - Google 验证的地点名称和地址 - 评分显示为徽章 - AI 生成的描述 - 预估访问时长 - 每个活动的时间段,图片上带徽章叠加 - 悬停效果带高度和柔和阴影动画 ### 2.5 AI 探索 - 动态卡帕多西亚探索建议 - 基于兴趣的推荐 - 实时 AI 驱动内容生成 ### 2.6 账户管理 - 查看所有已保存行程 - 访问行程历史 - 管理已保存行程 - 个人资料管理 - 偏好设置 - 隐私和安全控制 ### 2.7 认证系统 - 电子邮件和密码登录 - Google OAuth 登录(OSS Google 登录方式) - 记住我功能 - 密码重置流程 - 双因素认证支持 - 跨设备会话管理 ## 3. 技术架构 ### 3.1 系统流程 1. 用户通过基于步骤的向导提交行程表单 2. OpenAI 生成仅包含地点名称的行程 3. 对于每个建议地点: - 查询 Google Places Text Search API - 解析 place_id - 获取地点详情 - 检索照片和评分 4. 用已验证的 Google 数据替换 AI 建议 5. 构建最终行程结构 6. 使用 Google Directions API 计算路线 7. 渲染带动画的时间线和地图 8. 将行程存储在 localStorage 中 ### 3.2 核心架构规则 - 无内部 POI 数据库 - OpenAI 仅作为建议引擎 - Google APIs 作为地点真实性引擎 - 所有地点必须经过 Google 验证后才能渲染 - 无法验证的地点将被丢弃 ### 3.3 服务层结构 - openaiService.ts:AI 行程生成 - googleVerificationService.ts:地点验证和解析 - googlePhotoService.ts:照片 URL 生成 - directionsService.ts:路线计算 - itineraryBuilder.ts:合并 AI 和 Google 数据 - itineraryValidator.ts:验证和去重 ### 3.4 状态管理 - Zustand store 用于行程状态 - localStorage 用于持久化 - 基于 UUID 的行程标识 ### 3.5 API 集成 #### OpenAI API - 系统提示强制仅限卡帕多西亚建议 - Temperature:0.3 以保持一致性 - 仅返回地点名称和类别(无坐标) - JSON 验证带重试逻辑 - 允许的区域:Göreme、Uçhisar、Ürgüp、Avanos、Ortahisar、Çavuşin、Derinkuyu、Kaymaklı #### Google Maps JavaScript API - 地图渲染和交互 - 自定义 SVG 标记放置 - InfoWindow 显示增强内容 #### Google Places API - Text Search 用于地点解析 - Place Details 用于完整信息 - Photo references 用于图片 #### Google Directions API - 有序地点之间的路线计算 - 折线生成 - 距离和时长计算 #### Supabase Authentication - 用户注册和登录 - 会话管理 - 密码重置功能 - OAuth 集成(Google) #### Supabase Database - 缓存表 - places_cache:存储已验证的 Google Places 数据 - directions_cache:存储路线计算结果 #### Supabase Storage - place-photos:存储地点照片二进制数据的公共存储桶 ### 3.6 领域特定规则 - 热气球之旅安排在日出时分(约 05:00) - 日落山谷访问在 17:30 之后 - 每天最多 5 个地点 - 行程中无重复地点 - 跨天的地理分布 - 基于兴趣的包含项: - 热气球 → 第 1 天日出 - 美食 → 传统餐厅 - 骑马 → Rose Valley 或 Love Valley - ATV → Love Valley 或 Sword Valley - 地下城市 → Derinkuyu 或 Kaymaklı(仅一个) ## 4. 页面结构 ### 4.1 落地页(/) #### 目标文件 - 文件:src/pages/LandingPage.tsx - 章节:Hero + Features + How It Works + Testimonials + CTA + Footer - 样式:Tailwind CSS + 自定义渐变 #### 章节 1:Hero 部分 **背景:** - 基础:卡帕多西亚热气球高分辨率照片 - 叠加:径向渐变(中心透明 → 边缘深色) - 模糊:backdrop-blur-sm - 视频替代:卡帕多西亚 15 秒 B-roll(自动播放、静音、循环) **布局:** - 全视口高度(100vh) - Flex 居中 - 最大宽度:1200px - 内边距:48px **内容:** 1. 眉标文本:🎈 Yapay Zeka Destekli Seyahat Planlayıcı - 大小:14px - 粗细:500 - 颜色:白色/强调色 - 背景:rgba(white, 0.1),圆角全,px-4 py-2 2. 主标题: - 文本:Kappadokya'da Her Anınızı Kıymetli Yapın - 大小:64px(桌面)/ 40px(移动) - 粗细:700 - 颜色:白色 - 行高:1.2 - 最大宽度:800px 3. 副标题: - 文本:Yapay zekamız kişisel tercihlerinize göre mükemmel Kappadokya itinerarısı oluşturur. Balonlar, müzeler, gizli vadiler... Hepsi elinizin altında. - 大小:20px(桌面)/ 16px(移动) - 粗细:400 - 颜色:rgba(white, 0.9) - 最大宽度:700px - 行高:1.6 4. CTA 按钮(2 个并排): - 主要:Planlamaya Başla(大小:18px,内边距:16px 32px) * 背景:线性渐变(#3B82F6 → #2563EB) * 悬停:亮度增加 10%,shadow-2xl * 箭头图标:右侧 - 次要:Nasıl Çalışır?(透明按钮) * 边框:2px 白色 * 文本:白色 * 悬停:背景 white/10 5. 信任徽章(按钮下方): - ⭐ 4.9 Yıldız | 👥 2.5K+ Gezgin | 🗺️ 50+ Rota - 间距:24px 水平 - 字体:14px,半粗体 #### 章节 2:功能 **布局:** - 3 列网格(移动:1,平板:2) - 间隙:32px - 内边距:80px 水平,60px 垂直 - 背景:白色 **功能(共 6 个):** 1. 功能:AI-Powered Itineraries - 图标:Sparkles(大,48px,#3B82F6) - 标题:Zeki Rota Oluşturma - 描述:OpenAI tarafından desteklenen yapay zeka, 1000+ Kappadokya noktasını analiz ederek sizin için özel rotalar hazırlar. - 强调:图标后面的柔和蓝色背景圆圈 2. 功能:Real-Time Map - 图标:MapPin(48px,#EC4899) - 标题:Canlı Harita & Navigasyon - 描述:Google Maps entegrasyonu ile tüm mekanları harita üzerinde görün, mesafeleri hesaplayın ve sıralamayı değiştirin. 3. 功能:Smart Scheduling - 图标:Clock(48px,#10B981) - 标题:Akıllı Zaman Planlama - 描述:Günlük tempo tercihlerinize göre, her mekanın ziyaret saati otomatik olarak belirlenir. 4. 功能:Drag & Drop - 图标:GripVertical(48px,#F59E0B) - 标题:Kolay Düzenle - 描述:Sürükle-bırak yöntemiyle itinerary'nizin sırasını değiştirin, mesafeler anında güncellenir. 5. 功能:Save & Share - 图标:Share2(48px,#8B5CF6) - 标题:Kaydet & Paylaş - 描述:Rotanızı hesabınıza kaydedin, arkadaşlarınızla QR kod veya link aracılığıyla paylaşın. 6. 功能:Multi-Day Support - 图标:Calendar(48px,#06B6D4) - 标题:Çok Günlü Planlar - 描述:1 günlük kısa turlardan 2 haftaya kadar uzun gezilere kadar, istediğiniz her duruma rota oluşturun. **卡片设计:** - 边框:1px #E5E7EB,rounded-2xl - 内边距:32px - 悬停:scale-105,shadow-lg,border-primary/20 - 过渡:300ms cubic-bezier(0.4, 0, 0.2, 1) #### 章节 3:How It Works **布局:** - 4 步流程,移动端垂直 - 背景:线性渐变(#F3F4F6 → #E5E7EB) **步骤(编号 1-4):** 1. Tercihlerinizi Seçin - 图标:CheckCircle2 - 描述:Tarihler, ilgiler ve tempo tercihlerinizi seçin 2. Yapay Zeka Planlar - 图标:Sparkles - 描述:Sistemimiz binlerce veri noktasını analiz eder 3. Rotanızı Görüntüleyin - 图标:Map - 描述:İnteraktif harita ve timeline'da keşfedin 4. Seyahat Edin & Tadını Çıkarın - 图标:Navigation - 描述:Rehberimizle Kappadokya'yı keşfet **连接线:** - 虚线,主色,垂直(移动)或水平 #### 章节 4:Testimonials / Social Proof **布局:** - 轮播或静态 3 列网格 **卡片:** - 头像:48x48 圆形图片 - 姓名:16px 粗体 - 位置:14px 柔和 - 评分:⭐⭐⭐⭐⭐ - 引用:16px,斜体,最大宽度 400px - 内边距:24px - 边框:1px #E5E7EB - 圆角:16px **示例推荐:** 1. 姓名:Zeynep K. | 位置:İstanbul 引用:Daha önce Kappadokya'ya gelmiş olsaydım, bu app'i keşfeterdim. Harika! 2. 姓名:John D. | 位置:USA 引用:Best AI travel planner I've used. Better than Wanderlog for Cappadocia specifically. 3. 姓名:Ahmet T. | 位置:Ankara 引用:Zaman ayırmanız gerekmeyecek. Her şey düzenli, pratik ve harika. #### 章节 5:CTA - Call to Action **布局:** - 居中,全宽 - 背景:主色渐变 - 内边距:80px **内容:** - 标题:Rotanızı Oluşturmaya Hazır mısınız? * 大小:40px * 粗细:粗体 * 颜色:白色 - 副标题: * 文本:Kappadokya'nın en güzel anlarını, yapay zeka rehberliğinde yaşayın. * 大小:18px * 颜色:rgba(white, 0.9) - 按钮: * 文本:Planlamaya Başla (Ücretsiz) * 大小:18px * 内边距:16px 40px * 背景:白色 * 文本颜色:主色 * 悬停:shadow-2xl,scale-105 - 社会证明:✅ Üyelik yok, Kredi kartı gerekmez #### 章节 6:Footer **布局:** - 4 列网格(移动端 1 列) - 背景:#1F2937(深色) - 颜色:白色 - 内边距:48px **列:** 1. 品牌 - Logo + 标语 - 社交链接(图标) 2. 产品 - Planner - Explore - My Trips 3. 公司 - About - Blog - Contact 4. 法律 - Privacy - Terms - Cookies **底部栏:** - 版权文本 - 语言选择器 #### 排版层次 **Hero:** - H1:64px / 40px 移动,700,白色 - H2:20px,400,white/90% - P:14px,500,white/80% **功能:** - 标题:24px,600,gray-900 - 描述:16px,400,gray-600 **按钮:** - 全部:16px,600,字母间距 0.5px #### 调色板 - 主色:#3B82F6 - 次要色:#EC4899 - 强调色 1:#10B981 - 强调色 2:#F59E0B - 背景:#FAFAFA - 深色:#1F2937 - 边框:#E5E7EB #### 动画 - Hero 淡入:加载时 600ms ease-out - 功能卡片:交错淡入(每个延迟 100ms) - CTA 按钮:微妙脉冲动画(连续) - 滚动显示:元素进入视口时淡入 - 推荐轮播:自动滚动(5 秒间隔) #### 响应式断点 **移动:<640px** - Hero 内边距:24px - H1:40px - 功能:1 列 - 间隙:24px **平板:640px - 1024px** - H1:48px - 功能:2 列 - 内边距:32px **桌面:>1024px** - H1:64px - 功能:3 列 - 内边距:48px #### 可访问性 - 标题层次:h1 → h2 → h3(正确顺序) - 图片 alt 文本:所有图片的描述性文本 - 颜色对比度:所有文本的 WCAG AA+ - 焦点环:所有交互元素可见 - 键盘导航:Tab 顺序逻辑 - 视频:隐藏字幕 + 文字记录 ### 4.2 行程规划器(/planner) - 现代 Wanderlog 风格的设计体验 - Hero 部分带全宽卡帕多西亚热气球背景图片和渐变叠加 - 大而醒目的标题:Hayalinizdeki Kapadokya Gezisini Planla - 标题下方的描述性副标题 - 表单卡片采用偏移设计,出现在 hero 部分上方 - Z-index 层次:表单卡片叠加在 hero 部分上 #### 表单卡片设计 - 最大宽度:900px(桌面友好) - 玻璃态效果:backdrop-blur 带 rgba 背景 - 柔和阴影:shadow-xl 带环效果 - 边框半径:32px(现代,圆角) - 内边距:48px(宽敞,专业) - 标题下方的细渐变分隔线 #### 进度指示器 - 顶部部分:3 步进度条 - 步骤 1:Tarihler(✓) - 步骤 2:İlgiler(当前) - 步骤 3:Tercihler(待定) - 移动端:折叠进度指示器 #### 日期选择(日期选择器) - 自定义日期范围选择器(Wanderlog 风格) - 并排布局(开始/结束日期) - 视觉反馈: - 焦点状态:主色光晕 - 悬停:微妙背景变化 - 已选择:粗体视觉指示器 - 自动计算并显示行程时长(例如,5 gün 徽章) - 快速预设:Bu hafta、Sonraki hafta、Sonraki ay 按钮 #### 兴趣选择 - 3 列网格布局(移动端:2 列) - 卡片:图标 + 文本 + 复选框 - 图标:Lucide-react 图标(Balloon、History、Hiking 等) - 动画:悬停时平滑缩放(1 → 1.05) - 已选择状态: - 背景:主色带 10% 不透明度 - 边框:2px 实线主色 - 图标颜色:主色 - 可访问性:键盘导航(Tab + Space) #### 每日节奏选择(每日时间表) - 水平单选组(3 个选项) - 最小边框卡片设计带悬停效果 - 代表节奏级别的图标 - 信息工具提示:悬停时显示详细信息(例如,2-3 durak) - 视觉差异:每个选项都有小图标 #### 附加偏好(偏好文本区域) - 占位符带示例:Vejetaryen yemekler, çocuk dostu... - 最小高度:120px - 字符计数器:右下角(0/500) - 调整大小:仅垂直 - 富文本支持:面向未来的结构(markdown-ready) #### 提交按钮 - 全宽:是 - 高度:56px(大,触摸友好) - 文本:图标 + 标签(Rota Oluştur 带 Sparkles 图标) - 加载状态: - 旋转器 + Rotanız Hazırlanıyor... - 按钮禁用 + 不透明度 75% - 悬停状态:缩放 + 阴影增加 - 活动状态:轻微缩小(0.98) #### 调色板 - 主色:#3B82F6(蓝色,信任和宁静) - 次要色:#EC4899(粉色,强调) - 背景:#FAFAFA(浅灰色) - 边框:#E5E7EB(非常浅的灰色) - 文本:#1F2937(深灰色) - 柔和:#9CA3AF(中灰色) #### 排版 - 标题(H1):32px,700 粗细,行高 1.2 - 标题(H2):24px,600 粗细 - 正文:16px,400 粗细,行高 1.5 - 小:14px,400 粗细 #### 响应式断点 - 移动(< 640px):单列,100% 宽度表单 - 平板(640px - 1024px):优化的 2 列日期选择器 - 桌面(> 1024px):带侧边栏展示的完整布局 #### 交互性 - 表单验证:实时反馈(不激进) - 错误消息:Toast 通知(sonner) - 成功反馈:成功提交时的庆祝动画 - 防止双重提交:API 调用期间按钮禁用 #### 可访问性 - 所有表单输入的 ARIA 标签 - 键盘导航:完全支持 - 颜色对比度:WCAG AA 标准 - 焦点可见:可预测的 tab 顺序 ### 4.3 行程视图(/trip/[id]) - 带行程名称、日期和分享按钮的标题 - 布局:时间线(70%)| 粘性地图(30%) - 带可折叠部分的每日时间线 - 带总公里数、时长和预估预算徽章的大型日标题 - 图片为主的地点卡片(16:9 比例)带时间徽章叠加 - 卡片右上角的评分徽章 - 地点之间的旅行时间块(例如,20 分钟车程) - 带高度和柔和阴影动画的悬停效果 - 颜色编码的天数:第 1 天(橙色强调),第 2 天(柔和琥珀色),第 3 天(柔和红色) - 拖放重新排序 - 地图上的路线可视化 ### 4.4 登录页面(/login) #### 目标文件 - 文件:src/pages/LoginPage.tsx - 认证:Supabase + miaoda-auth-react - 表单:react-hook-form + zod 验证 #### 布局结构 **分割设计(桌面):** - 左侧(50%):Hero 部分带品牌信息 - 右侧(50%):登录表单 **移动端:** - 单列(表单占全宽) #### 左侧部分(仅桌面) **背景:** - 线性渐变(#3B82F6 → #1E40AF) **内容:** - Logo:大,居中,白色 - 标题:Kappadokya'ya Hoşgeldin - 副标题:Yapay zeka rehberliğinde unutulmaz deneyimler yarat - 优势列表(垂直): * 🚀 AI Powered Planning * 🗺️ Real-time Maps * 💾 Save Your Plans * 👥 Share with Friends - 页脚文本:Güvenlik: Verileriniz 256-bit SSL ile korunur #### 右侧部分:登录表单 **卡片设计:** - 背景:白色 - 边框:无 - 阴影:shadow-xl - 边框半径:16px - 内边距:48px(桌面)/ 32px(移动) - 最大宽度:420px **表单部分:** 1. 标题: - 标题:Giriş Yap - 副文本:Rotanızı yönetin ve seyahatinizi planlayın 2. 电子邮件输入: - 标签:E-posta - 类型:email - 占位符:name@example.com - 验证:实时 - 错误消息:内联,红色 3. 密码输入: - 标签:Şifre - 类型:password(切换眼睛图标) - 占位符:•••••••• - 忘记密码链接:右对齐,小文本 4. 记住我(复选框): - 标签:Beni hatırla - 默认:未选中 5. 提交按钮: - 全宽 - 高度:44px - 文本:Giriş Yap - 禁用状态:API 调用期间不透明度 60% - 加载:显示旋转器 + Giriş yapılıyor... 6. 分隔线:VEYA 7. 社交登录按钮: - Google 按钮:44px 高度,全宽 - 图标 + Google ile giriş yap - 悬停:微妙阴影增加 - 实现:OSS Google 登录方式 8. 页脚: - Hesabınız yok mu? Kayıt ol - 链接颜色:主蓝色 #### 表单验证 **实时验证(onChange):** - 电子邮件:有效格式检查 - 密码:最少 6 个字符警告 - 显示状态:✓ 或 ✗ 图标 **错误处理:** - 无效凭据:E-posta veya şifre hatalı - 用户未找到:Bu e-posta ile hesap yok - 网络错误:Bağlantı hatası. Lütfen tekrar deneyin **成功流程:** - 重定向到 /explore(如果没有引用者) - 或重定向到上一页(如果存在引用者) - 显示成功 toast:Hoşgeldin, [Name]! #### 样式 **表单输入:** - 高度:44px - 内边距:0 16px - 边框:1px #E5E7EB - 边框半径:8px - 焦点:蓝色边框 + 阴影 - 字体:16px(防止 iOS 缩放) **标签:** - 字体:14px 粗体 - 下边距:8px - 颜色:#1F2937 **按钮:** - 主要:蓝色背景,白色文本,44px 高度 - 次要:轮廓样式 - 禁用:不透明度 50%,无指针事件 #### 可访问性 - 表单标签: