Files
dreamweaver/.claude/specs/design/LANDING-PAGE-REFACTOR-SPEC.md
zhangtuo c82d408ea1 feat: add HA infrastructure, CI/CD pipeline, and Redis/Celery hardening
- Add docker-compose.ha.yml for PostgreSQL/Redis HA setup with Patroni and Sentinel
- Add docker-compose.prod.yml for production deployment
- Add GitHub Actions CI/CD workflow (build.yml)
- Add install.cmd for Windows one-click setup
- Harden Redis connection with retry logic and health checks
- Add Celery HA config with Redis Sentinel support
- Add HA operations runbook
- Update README with deployment and architecture docs
- Move landing page spec to .claude/specs/design/
- Update memory intelligence PRD
2026-02-28 14:57:02 +08:00

640 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DreamWeaver 落地页重构规范文档
## 1. 项目概述
### 1.1 目标
将当前简单的 Home.vue 落地页重构为专业级 SaaS 产品落地页,提升品牌形象和用户转化率。
### 1.2 当前状态
- 文件位置: `frontend/src/views/Home.vue`
- 问题: 页面结构单一,仅有一个故事生成表单,缺少产品介绍、功能展示、用户信任背书等专业落地页必备元素
### 1.3 技术栈
- Vue 3 + Composition API + TypeScript
- Tailwind CSS
- vue-i18n 国际化
- @heroicons/vue/24/outline 图标库
- 现有 UI 组件: BaseButton, BaseCard, BaseInput, BaseSelect, BaseTextarea
---
## 2. 页面结构规范
页面从上到下包含 8 个主要区块Section每个区块独立且可复用。
### 2.1 Hero Section主视觉区
**布局**: 两栏布局,左 60% 右 40%,移动端堆叠
**左侧内容**:
```
- 主标题: 使用 gradient-text 样式
- 第一行: "为孩子编织" (普通渐变)
- 第二行: "专属的童话梦境" (加粗强调)
- 副标题: 灰色次要文字,说明产品价值
- CTA 按钮组:
- 主按钮: "开始创作" (btn-magic 样式,点击打开创作模态框)
- 次按钮: "了解更多" (outline 样式,滚动到 Features 区块)
```
**右侧内容**:
```
- 故事卡片预览 (模拟产品效果)
- 卡片使用 glass 样式 + 阴影
- 顶部: 模拟封面图区域 (渐变色块 + 星星图标)
- 标题: "小兔子的勇气冒险"
- 内容预览: 故事开头文字 (截断显示)
- 底部: 模拟的播放按钮和图片生成按钮图标
- 添加浮动动画 (animate-float)
```
**背景装饰**:
```
- 左上角: 浮动星星 SVG (absolute, opacity-20)
- 右下角: 浮动云朵 SVG (absolute, opacity-15)
- 使用 CSS animation 实现缓慢浮动效果
```
**i18n 键**:
- `home.heroTitle`, `home.heroTitleHighlight`
- `home.heroSubtitle`
- `home.heroCta`, `home.heroCtaSecondary`
- `home.heroPreviewTitle`, `home.heroPreviewText`
---
### 2.2 Trust Bar信任背书区
**布局**: 水平三等分,居中对齐
**内容**:
```
| 10,000+ 故事已创作 | 5,000+ 家庭信赖 | 98% 满意度 |
```
**样式**:
```
- 背景: 浅紫色渐变 (from-purple-50 to-pink-50)
- 数字: 大号加粗,渐变色
- 文字: 灰色小号
- 分隔: 使用竖线或间距分隔
```
**交互**:
```
- 数字使用计数动画 (从 0 递增到目标值)
- 使用 IntersectionObserver 触发动画
- 动画时长: 2 秒,使用 easeOutQuart 缓动
```
**实现要点**:
```typescript
// 计数动画函数
function animateCount(target: number, duration: number, callback: (value: number) => void) {
const start = performance.now()
const step = (timestamp: number) => {
const progress = Math.min((timestamp - start) / duration, 1)
const eased = 1 - Math.pow(1 - progress, 4) // easeOutQuart
callback(Math.floor(eased * target))
if (progress < 1) requestAnimationFrame(step)
}
requestAnimationFrame(step)
}
```
**i18n 键**:
- `home.trustStoriesCreated`, `home.trustFamilies`, `home.trustSatisfaction`
---
### 2.3 Features Section功能特性区
**布局**: 标题 + 副标题 + 6 卡片网格 (3x2移动端 1 列)
**标题区**:
```
- 主标题: "为什么选择梦语织机"
- 副标题: "我们用 AI 技术和教育理念,为每个孩子打造独一无二的成长故事"
```
**6 个功能卡片**:
| # | 图标 | 标题 | 描述 |
|---|------|------|------|
| 1 | SparklesIcon | AI 智能创作 | 输入几个关键词AI 即刻为您的孩子创作一个充满想象力的原创故事 |
| 2 | UserIcon | 个性化记忆 | 系统记住孩子的喜好和成长轨迹,故事越来越懂 TA |
| 3 | PhotoIcon | 精美 AI 插画 | 为每个故事自动生成独特的精美封面插画,让故事更加生动 |
| 4 | SpeakerWaveIcon | 温暖语音朗读 | 专业级 AI 配音,温暖的声音陪伴孩子进入甜美梦乡 |
| 5 | AcademicCapIcon | 教育主题融入 | 勇气、友谊、分享、诚实...在故事中自然传递正向价值观 |
| 6 | GlobeAltIcon | 故事宇宙 | 创建专属世界观,让喜爱的角色在不同故事中持续冒险 |
**卡片样式**:
```
- 使用 BaseCard 组件,添加 hover 效果
- 图标: 48x48紫色渐变背景圆形容器
- 标题: font-bold text-gray-800
- 描述: text-gray-600 text-sm
- hover: 上移 + 阴影增强
```
**滚动动画**:
```
- 使用 IntersectionObserver
- 卡片依次渐入 (stagger 100ms)
- 动画: opacity 0->1, translateY 20px->0
```
**i18n 键**:
- `home.featuresTitle`, `home.featuresSubtitle`
- `home.feature1Title` ~ `home.feature6Title`
- `home.feature1Desc` ~ `home.feature6Desc`
---
### 2.4 How It Works Section使用流程区
**布局**: 标题 + 4 步骤水平排列(移动端垂直)
**步骤内容**:
| 步骤 | 图标 | 标题 | 描述 |
|------|------|------|------|
| 1 | LightBulbIcon | 输入灵感 | 输入关键词、角色或简单想法 |
| 2 | CpuChipIcon | AI 创作 | AI 根据输入生成专属故事 |
| 3 | PaintBrushIcon | 丰富内容 | 自动生成精美插画和语音 |
| 4 | ShareIcon | 分享故事 | 保存收藏,随时为孩子讲述 |
**样式**:
```
- 步骤编号: 圆形渐变背景,白色数字
- 步骤之间: 虚线连接 (桌面端水平,移动端垂直)
- 图标: 在编号下方,较大尺寸
- 文字: 居中对齐
```
**连接线实现**:
```css
/* 桌面端水平连接线 */
.step-connector {
position: absolute;
top: 24px;
left: 100%;
width: 100%;
height: 2px;
background: linear-gradient(90deg, #c084fc, #f472b6);
opacity: 0.3;
}
/* 移动端隐藏水平线,显示垂直线 */
@media (max-width: 768px) {
.step-connector { display: none; }
.step-connector-vertical { display: block; }
}
```
**i18n 键**:
- `home.howItWorksTitle`, `home.howItWorksSubtitle`
- `home.step1Title` ~ `home.step4Title`
- `home.step1Desc` ~ `home.step4Desc`
---
### 2.5 Product Showcase Section产品展示区
**布局**: 两栏,左侧功能列表,右侧模拟界面
**左侧内容**:
```
- 小标题: "专为家长设计"
- 大标题: "简单易用,功能强大"
- 功能列表 (带勾选图标):
✓ 直观的创作界面,几秒即可生成故事
✓ 多孩子档案管理,每个孩子独立记忆
✓ 故事历史永久保存,随时回顾美好时光
✓ 支持中英双语,培养语言能力
```
**右侧内容**:
```
- 模拟的产品界面截图 (CSS 绘制)
- 包含:
- 模拟浏览器顶栏 (三个圆点)
- 模拟导航栏
- 模拟故事卡片列表
- 使用 glass 样式 + 阴影
- 轻微倾斜 (transform: perspective + rotateY)
```
**模拟界面 CSS**:
```css
.mock-browser {
background: white;
border-radius: 12px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
transform: perspective(1000px) rotateY(-5deg);
}
.mock-browser-bar {
height: 32px;
background: #f1f5f9;
border-radius: 12px 12px 0 0;
display: flex;
align-items: center;
padding: 0 12px;
gap: 6px;
}
.mock-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.mock-dot-red { background: #ef4444; }
.mock-dot-yellow { background: #eab308; }
.mock-dot-green { background: #22c55e; }
```
**i18n 键**:
- `home.showcaseTitle`, `home.showcaseSubtitle`
- `home.showcaseFeature1` ~ `home.showcaseFeature4`
---
### 2.6 Testimonials Section用户评价区
**布局**: 标题 + 3 评价卡片水平排列
**评价内容**:
| # | 评价 | 用户名 | 身份 |
|---|------|--------|------|
| 1 | "每晚睡前,女儿都要听一个新故事。梦语织机让我不再为编故事发愁,而且故事质量真的很高!" | 小雨妈妈 | 5岁女孩家长 |
| 2 | "最惊喜的是个性化功能,系统记住了儿子喜欢恐龙和太空,每个故事都能戳中他的兴趣点。" | 航航爸爸 | 6岁男孩家长 |
| 3 | "语音朗读功能太棒了!出差时也能远程给孩子讲故事,声音温暖自然,孩子很喜欢。" | 朵朵妈妈 | 4岁女孩家长 |
**卡片样式**:
```
- 背景: glass 样式
- 顶部: 引号图标 (大号,低透明度)
- 评价文字: 斜体,灰色
- 底部: 头像 + 用户名 + 身份
- 头像: 渐变色圆形 + 首字母
```
**头像生成**:
```typescript
// 根据名字生成渐变色头像
function getAvatarStyle(name: string) {
const colors = [
['#667eea', '#764ba2'],
['#f093fb', '#f5576c'],
['#4facfe', '#00f2fe'],
]
const index = name.charCodeAt(0) % colors.length
return {
background: `linear-gradient(135deg, ${colors[index][0]}, ${colors[index][1]})`,
}
}
```
**i18n 键**:
- `home.testimonialsTitle`, `home.testimonialsSubtitle`
- `home.testimonial1Text` ~ `home.testimonial3Text`
- `home.testimonial1Name` ~ `home.testimonial3Name`
- `home.testimonial1Role` ~ `home.testimonial3Role`
---
### 2.7 FAQ Section常见问题区
**布局**: 标题 + 手风琴问答列表
**问答内容**:
| # | 问题 | 答案 |
|---|------|------|
| 1 | 梦语织机适合多大的孩子? | 我们专为 3-8 岁儿童设计,故事内容、语言难度和教育主题都针对这个年龄段优化。 |
| 2 | 生成的故事安全吗? | 绝对安全。所有故事都经过内容过滤,确保适合儿童阅读,传递积极正向的价值观。 |
| 3 | 可以自定义故事角色吗? | 可以您可以在孩子档案中设置喜好或在创作时指定角色名称、特点AI 会将其融入故事。 |
| 4 | 故事会重复吗? | 不会。每个故事都是 AI 实时原创生成的,即使使用相同关键词,也会产生不同的故事。 |
| 5 | 支持哪些语言? | 目前支持中文和英文,您可以随时切换界面语言,故事也会相应调整。 |
**手风琴实现**:
```typescript
const expandedFaq = ref<number | null>(null)
function toggleFaq(index: number) {
expandedFaq.value = expandedFaq.value === index ? null : index
}
```
**样式**:
```
- 问题行: 可点击,右侧箭头图标
- 展开时: 箭头旋转 180°答案滑入显示
- 使用 Transition 组件实现平滑动画
```
**i18n 键**:
- `home.faqTitle`
- `home.faq1Question` ~ `home.faq5Question`
- `home.faq1Answer` ~ `home.faq5Answer`
---
### 2.8 Final CTA Section底部转化区
**布局**: 居中,渐变背景
**内容**:
```
- 大标题: "准备好为孩子创造魔法了吗?"
- 副标题: "立即开始,让 AI 为您的孩子编织独一无二的成长故事"
- CTA 按钮: "免费开始创作" (大号btn-magic)
- 小字: "无需信用卡,立即体验"
```
**背景**:
```css
.cta-section {
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
position: relative;
overflow: hidden;
}
/* 装饰性圆形 */
.cta-section::before {
content: '';
position: absolute;
width: 400px;
height: 400px;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
top: -200px;
right: -100px;
}
```
**i18n 键**:
- `home.ctaTitle`, `home.ctaSubtitle`
- `home.ctaButton`, `home.ctaNote`
---
## 3. 创作模态框规范
### 3.1 触发方式
- 点击 Hero 区 "开始创作" 按钮
- 点击 Final CTA 区按钮
- 已登录用户直接打开模态框
- 未登录用户跳转登录流程
### 3.2 模态框结构
```
- 遮罩层: 半透明黑色背景
- 模态框: 居中,最大宽度 600px
- 关闭按钮: 右上角 X 图标
- 内容: 复用原有表单逻辑
```
### 3.3 表单内容(保留原有逻辑)
```
1. 输入类型切换: 关键词创作 / 故事润色
2. 孩子档案选择 (可选)
3. 故事宇宙选择 (可选,依赖档案)
4. 输入区域 (关键词或故事文本)
5. 教育主题选择 (可选)
6. 提交按钮
```
### 3.4 状态管理
```typescript
const showCreateModal = ref(false)
function openCreateModal() {
if (!userStore.user) {
// 跳转登录
return
}
showCreateModal.value = true
}
```
---
## 4. 动画规范
### 4.1 滚动渐入动画
**实现方式**: 使用 IntersectionObserver + CSS Transition
```typescript
// composables/useScrollAnimation.ts
export function useScrollAnimation() {
const observedElements = ref<Set<Element>>(new Set())
onMounted(() => {
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-in')
observer.unobserve(entry.target)
}
})
},
{ threshold: 0.1 }
)
document.querySelectorAll('.scroll-animate').forEach((el) => {
observer.observe(el)
})
})
}
```
**CSS**:
```css
.scroll-animate {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.scroll-animate.animate-in {
opacity: 1;
transform: translateY(0);
}
/* 延迟类 */
.delay-100 { transition-delay: 100ms; }
.delay-200 { transition-delay: 200ms; }
.delay-300 { transition-delay: 300ms; }
```
### 4.2 浮动动画
```css
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
.animate-float {
animation: float 3s ease-in-out infinite;
}
.animate-float-slow {
animation: float 5s ease-in-out infinite;
}
```
### 4.3 数字计数动画
见 2.2 节 Trust Bar 实现要点。
---
## 5. 响应式规范
### 5.1 断点定义
```
- sm: 640px
- md: 768px
- lg: 1024px
- xl: 1280px
```
### 5.2 各区块响应式行为
| 区块 | 桌面端 | 平板端 | 移动端 |
|------|--------|--------|--------|
| Hero | 两栏 60/40 | 两栏 50/50 | 单栏堆叠 |
| Trust Bar | 水平三等分 | 水平三等分 | 垂直堆叠 |
| Features | 3x2 网格 | 2x3 网格 | 单列 |
| How It Works | 水平 4 步 | 水平 4 步 | 垂直 4 步 |
| Showcase | 两栏 | 两栏 | 单栏堆叠 |
| Testimonials | 水平 3 卡 | 水平 3 卡 | 单列滚动 |
| FAQ | 单列 | 单列 | 单列 |
| Final CTA | 居中 | 居中 | 居中 |
---
## 6. 暗色模式规范
### 6.1 颜色映射
| 元素 | 亮色模式 | 暗色模式 |
|------|----------|----------|
| 背景 | 渐变浅色 | 渐变深色 |
| 卡片背景 | rgba(255,255,255,0.7) | rgba(15,23,42,0.6) |
| 主文字 | gray-800 | gray-100 |
| 次文字 | gray-600 | gray-400 |
| 边框 | gray-200 | gray-700 |
### 6.2 实现方式
使用 Tailwind dark: 前缀,配合现有 .dark 类切换。
---
## 7. 验收标准
### 7.1 功能验收
- [ ] Hero 区正确显示CTA 按钮可点击
- [ ] Trust Bar 数字动画正常触发
- [ ] Features 6 个卡片正确显示
- [ ] How It Works 4 步骤正确显示,连接线可见
- [ ] Product Showcase 模拟界面正确渲染
- [ ] Testimonials 3 个评价卡片正确显示
- [ ] FAQ 手风琴展开/收起正常
- [ ] Final CTA 按钮可点击
- [ ] 创作模态框正常打开/关闭
- [ ] 故事生成功能正常(保留原有逻辑)
### 7.2 样式验收
- [ ] 所有文案使用 i18n中英文切换正常
- [ ] 响应式布局在 320px ~ 1920px 宽度下正常
- [ ] 暗色模式下所有元素可读
- [ ] 滚动动画流畅,无卡顿
- [ ] 所有图标正确显示
### 7.3 性能验收
- [ ] 首屏加载时间 < 3s
- [ ] Lighthouse Performance 分数 > 80
- [ ] 无控制台错误
---
## 8. 文件变更清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `frontend/src/views/Home.vue` | 重写 | 完整重构落地页 |
| `frontend/src/locales/zh.json` | 已更新 | 新增落地页文案 |
| `frontend/src/locales/en.json` | 已更新 | 新增落地页文案 |
| `frontend/src/style.css` | 修改 | 新增动画和样式类 |
| `frontend/src/composables/useScrollAnimation.ts` | 新建 | 滚动动画 composable |
---
## 9. 依赖说明
### 9.1 现有依赖(无需新增)
- Vue 3
- vue-router
- vue-i18n
- Pinia
- Tailwind CSS
- @heroicons/vue
### 9.2 需要使用的图标
```typescript
import {
SparklesIcon,
UserIcon,
PhotoIcon,
SpeakerWaveIcon,
AcademicCapIcon,
GlobeAltIcon,
LightBulbIcon,
CpuChipIcon,
PaintBrushIcon,
ShareIcon,
CheckIcon,
ChevronDownIcon,
XMarkIcon,
ArrowRightIcon,
} from '@heroicons/vue/24/outline'
```
---
## 10. 实现顺序建议
1. **Phase 1**: 基础结构
- 创建页面骨架8 个 section
- 实现 Hero 区(不含动画)
- 实现创作模态框
2. **Phase 2**: 内容区块
- Trust Bar + 计数动画
- Features 卡片
- How It Works 步骤
3. **Phase 3**: 展示区块
- Product Showcase
- Testimonials
- FAQ 手风琴
4. **Phase 4**: 收尾
- Final CTA
- 滚动动画
- 响应式调整
- 暗色模式适配
---
*文档版本: 1.0*
*创建时间: 2025-12-30*
*作者: Claude Code*