app-launch-page

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

App Launch Page

应用启动着陆页

Generate a complete landing page + waitlist design specification by reading your project's existing brand identity. Outputs a markdown spec document with adaptive sections, draft copy, and visual direction — ready for implementation with TanStack Start + React 19 + TypeScript (SSR/SSG for full crawlability).
通过读取项目现有品牌标识,生成完整的着陆页+等待列表设计规范。输出包含自适应板块、草稿文案和视觉方向的Markdown规范文档,可直接基于TanStack Start + React 19 + TypeScript(SSR/SSG确保全可爬取)实现。

When to Use

适用场景

  • Building a new landing page for an app launch
  • Redesigning an existing landing page that looks too generic or basic
  • Adding a waitlist / early access signup to a pre-launch page
  • Need a design spec before writing any frontend code
  • 为应用启动搭建全新着陆页
  • 重新设计过于通用或基础的现有着陆页
  • 为预启动页面添加等待列表/早期访问注册功能
  • 需要在编写前端代码前生成设计规范

When NOT to Use

不适用场景

  • The page is already built and just needs copy tweaks
  • You need a full marketing site with multiple pages (this covers the launch page + minimal supporting pages)
  • The project has no existing brand identity and no preferences — help them establish one first

  • 页面已搭建完成,仅需调整文案
  • 需要包含多页面的完整营销站点(本规范仅覆盖启动页+极简辅助页面)
  • 项目无现有品牌标识且无偏好——需先协助建立品牌标识

Process

流程

You MUST follow these phases in order. Do not skip phases or combine them.
必须按顺序执行以下阶段,不得跳过或合并阶段。

Phase 1: Ask the User

阶段1:询问用户

Before reading ANY project files, ask the user all of these. Do not proceed until you have answers.
在读取任何项目文件前,需向用户询问以下所有问题,得到全部答复后方可继续。

Required

必填信息

  1. App screenshots — "Where are your app screenshots? Provide separate folders for each platform:"
    • iOS screenshots → will be rendered inside
      mockup.png
      (iPhone frame, co-located with this skill)
    • Android screenshots → will be rendered inside
      android.png
      (Android frame, co-located with this skill)
    • Accepted formats: PNG files of actual device captures
    • If the app is iOS-only or Android-only, only that platform's screenshots are needed
    • NOTE: Use a 6.1 inch simulator to capture iOS screenshots. This avoids image scaling/adjustment issues when rendering inside the mockup frame. For Android, use a standard phone-sized emulator.
  2. App icon — "Where is your app icon PNG?"
  3. Feature list — "List your app's features in priority order. What's the #1 thing your app does?"
  4. Website pages — "What pages do you want on your website? Here's a recommended minimal set:"
    For Mobile Apps (recommended):
    • Home (landing page) — required
    • Privacy Policy — required for app stores
    • Terms of Service — required for app stores
    • Delete Account — required for app stores (GDPR)
    For SaaS / Desktop (recommended):
    • Home (landing page) — required
    • Pricing — if not on the landing page itself
    • Privacy Policy — required
    • Terms of Service — required
    Optional pages (all types):
    • Changelog / What's New
    • About / Team
    • Blog
    • Contact / Support
    • Documentation / FAQ
    The user picks which pages they want. The landing page spec covers the Home page. Other pages get a brief structural note in the spec's implementation notes.
  5. Waitlist or launched? — "Is this a pre-launch waitlist, or is the app already live? This determines whether the primary CTA is email capture or store/download links."
  6. Waitlist endpoint (if pre-launch) — "Do you already have a waitlist API endpoint set up, or do we need to build one? If you have one, provide:"
    • Endpoint URL (e.g.,
      POST /api/waitlist
      )
    • Request body format (e.g.,
      { "email": "user@example.com" }
      )
    • Response format for success, duplicate, and error cases
    • Any authentication or headers required
    If no endpoint exists, the spec will include a backend-agnostic API shape that the user can implement separately or that gets built as part of the implementation plan. The frontend waitlist component will be wired to whatever endpoint is provided — or to a placeholder path (
    /api/waitlist
    ) with clearly marked TODOs if none exists yet.
  7. Real metrics & social proof — "Do you have any REAL metrics or reviews you'd like to showcase? Only provide what actually exists:"
    • App store rating + review count (e.g., "4.8 stars, 2.3k reviews")
    • Download / user count (e.g., "10,000+ downloads")
    • Press mentions or awards (e.g., "App of the Day", "Featured in TechCrunch")
    • Real user testimonials (quote + name + role)
    • Any other verifiable metric
    CRITICAL: If the user has no real metrics, do NOT fabricate them. Do NOT add placeholder stats, fake testimonials, or invented numbers. Skip the social proof section entirely. A landing page without social proof is far more trustworthy than one with fake data. Instead, focus the page on features, product screenshots, and the value proposition — these speak for themselves.
  1. 应用截图 — "你的应用截图存放在哪里?请按平台提供单独文件夹:"
    • iOS截图 → 将渲染在
      mockup.png
      (iPhone框架,与本技能同目录)中
    • Android截图 → 将渲染在
      android.png
      (Android框架,与本技能同目录)中
    • 接受格式:实际设备拍摄的PNG文件
    • 若应用仅支持iOS或Android,则仅需对应平台的截图
    • 注意:使用6.1英寸模拟器捕获iOS截图。这样可避免在框架中渲染时出现图像缩放/调整问题。Android则使用标准手机尺寸的模拟器。
  2. 应用图标 — "你的应用图标PNG文件存放在哪里?"
  3. 功能列表 — "按优先级列出应用的功能。应用最核心的功能是什么?"
  4. 网站页面 — "你希望网站包含哪些页面?以下是推荐的极简页面集合:"
    移动应用(推荐):
    • 首页(着陆页)—— 必填
    • 隐私政策——应用商店必填
    • 服务条款——应用商店必填
    • 删除账户——应用商店必填(符合GDPR要求)
    SaaS / 桌面应用(推荐):
    • 首页(着陆页)—— 必填
    • 定价页——若未在着陆页展示
    • 隐私政策—— 必填
    • 服务条款—— 必填
    所有类型可选页面:
    • 更新日志 / 新功能
    • 关于我们 / 团队介绍
    • 博客
    • 联系我们 / 支持
    • 文档 / 常见问题
    用户选择所需页面。着陆页规范覆盖首页,其他页面仅在规范的实现说明中添加简要结构说明。
  5. 等待列表还是已上线? — "这是预启动等待列表,还是应用已正式上线?这将决定主CTA是邮箱捕获还是商店/下载链接。"
  6. 等待列表接口(若为预启动)—— "你是否已搭建好等待列表API接口,还是需要我们来构建?若已存在,请提供:"
    • 接口URL(例如:
      POST /api/waitlist
    • 请求体格式(例如:
      { "email": "user@example.com" }
    • 成功、重复提交和错误场景的响应格式
    • 所需的任何认证信息或请求头
    若不存在接口,规范将包含一个与后端无关的API结构,用户可单独实现或作为实现计划的一部分构建。前端等待列表组件将与提供的任何接口对接——若暂无接口,则对接占位路径
    /api/waitlist
    并标记明确的TODO。
  7. 真实数据与社交证明 — "你是否有任何想要展示的真实数据或评价?仅提供实际存在的内容:"
    • 应用商店评分+评论数(例如:"4.8星,2300条评论")
    • 下载量/用户数(例如:"10000+下载量")
    • 媒体报道或奖项(例如:"当日最佳应用"、"获TechCrunch推荐")
    • 真实用户评价(引用语+姓名+职位)
    • 其他可验证的数据
    关键提示:若用户无真实数据,不得编造内容。不得添加占位统计数据、虚假评价或虚构数字。完全跳过社交证明板块。没有社交证明的着陆页比含虚假数据的页面更可信。相反,应聚焦于功能、产品截图和价值主张——这些内容本身就具有说服力。

Optional

可选信息

  1. Style references — "Share any landing pages you admire. What specifically did you like about each?"
  2. Brand colors override — "Are you happy with your existing brand colors, or do you want to adjust the palette for the website?"
  3. Font override — "Do you want to keep your app's fonts, or prefer something different for the web?"
  4. Dark or light — "Any preference for dark or light theme? (If unsure, we'll derive from your app's existing theme)"
  5. Additional instructions — "Any specific requirements, constraints, or preferences?"
  1. 风格参考 — "分享你喜欢的着陆页。你具体喜欢每个页面的哪些点?"
  2. 品牌颜色覆盖 — "你对现有品牌颜色满意吗,还是想要调整网站的配色方案?"
  3. 字体覆盖 — "你希望保留应用的字体,还是偏好为网站使用不同字体?"
  4. 深色或浅色主题 — "是否偏好深色或浅色主题?(若不确定,我们将从应用现有主题推导)"
  5. 额外说明 — "是否有任何特定要求、限制或偏好?"

Derived from answers (do NOT ask — decide yourself)

从答复推导(无需询问——自行决定)

Based on the user's style direction, existing brand, and app type, decide:
  • Background style: gradients, solid colors, section alternation strategy
  • Decorative elements: blobs, glows, geometric shapes, or none — match the brand
  • Animation approach: CSS-only vs Framer Motion (see Phase 3)
  • Typography treatment: weight, tracking, line height derived from brand personality
  • Color application: text hierarchy, section backgrounds, component colors
  • Mockup usage: which platform mockup(s) to use based on screenshots provided
IMPORTANT: If the user gives additional instructions at any point, follow them. User instructions always override skill defaults.
根据用户的风格方向、现有品牌和应用类型,决定:
  • 背景风格:渐变、纯色、板块交替策略
  • 装饰元素: blob图形、发光效果、几何图形或无——匹配品牌风格
  • 动画方案:仅CSS实现 vs Framer Motion(见阶段3)
  • 排版处理:基于品牌调性推导字体粗细、字间距、行高
  • 颜色应用:文本层级、板块背景、组件颜色
  • 样机使用:根据提供的截图选择使用哪个平台的样机
重要提示:若用户在任何阶段给出额外说明,需遵循用户说明。用户说明优先级高于技能默认设置。

Phase 2: Brand Discovery

阶段2:品牌探索

Auto-detect the project's design DNA. Read files in this priority order — stop once you have enough signal:
  1. Theme / design token files — CSS custom properties, Tailwind config/theme, design token files (
    colors
    ,
    typography
    ,
    spacing
    )
  2. Existing pages or components — extract color usage, font stacks, border radius, shadow patterns from current UI code
  3. App icon / logo files — search
    assets/
    ,
    static/
    ,
    public/
    ,
    web/static/
    for PNG/SVG icons and logos. The website header and footer MUST use the app's actual icon — never just a text wordmark without the icon.
  4. Package/config files — app name, description, tagline from
    package.json
    ,
    pubspec.yaml
    ,
    Cargo.toml
    ,
    pyproject.toml
    ,
    setup.py
    , etc.
  5. README or docs — project description, target audience, key features
  6. App store metadata — if present, app descriptions and category
Assemble a Brand Profile:
App Name:        [detected]
Tagline:         [detected or "needs input"]
App Icon:        [path to highest quality PNG/SVG — will be used in header + footer]
Primary Color:   [hex + human-readable name, e.g. #9B1B30 "wine"]
Color Palette:   [full palette with shade scale if available]
Typography:      [heading font + body font, e.g. "Lora (headings) + Open Sans (body)"]
Design Tokens:   [radius, shadows, spacing scale — whatever exists]
App Type:        [SaaS | Mobile App | Desktop App | Dev Tool | API/Platform]
Target Audience: [detected or "needs input"]
Key Features:    [top 3-5 from docs/code]
Tone:            [derived from existing copy — professional, playful, technical, warm, minimal]
Platforms:       [iOS | Android | Both | Web | Desktop]
Brand identity rules:
  • The website MUST use the same heading + body font as the app. Detect these from the theme file (e.g.,
    theme.dart
    ,
    tailwind.config
    , CSS variables). Load via Google Fonts with
    preconnect
    +
    display=swap
    .
  • The app icon MUST appear in the header (next to the wordmark) and footer. This creates instant brand recognition and coherence between the product and its marketing site.
  • Never invent a "marketing font" or "website logo" — the website is the product's face on the web.
Present the Brand Profile to the user for confirmation. Ask them to correct anything wrong and fill in any "needs input" fields. Do NOT proceed until confirmed.
自动检测项目的设计基因。按以下优先级读取文件——获得足够信息后即可停止:
  1. 主题/设计令牌文件 — CSS自定义属性、Tailwind配置/主题、设计令牌文件(
    colors
    typography
    spacing
  2. 现有页面或组件 — 从当前UI代码中提取颜色使用、字体栈、边框圆角、阴影样式
  3. 应用图标/Logo文件 — 在
    assets/
    static/
    public/
    web/static/
    中搜索PNG/SVG图标和Logo。网站页眉和页脚必须使用应用的实际图标——不得仅使用文字标识而不带图标。
  4. 包/配置文件 — 从
    package.json
    pubspec.yaml
    Cargo.toml
    pyproject.toml
    setup.py
    等文件中提取应用名称、描述、标语
  5. README或文档 — 项目描述、目标受众、核心功能
  6. 应用商店元数据 — 若存在,提取应用描述和分类
整理成品牌档案
应用名称:        [检测结果]
标语:         [检测结果或"需补充"]
应用图标:        [最高质量PNG/SVG的路径——将用于页眉+页脚]
主色调:   [十六进制值+可读名称,例如#9B1B30 "酒红"]
配色方案:   [完整配色及色调层级(若有)]
排版:      [标题字体+正文字体,例如"Lora(标题)+ Open Sans(正文)"]
设计令牌:   [圆角、阴影、间距层级——所有已存在的设计令牌]
应用类型:        [SaaS | 移动应用 | 桌面应用 | 开发工具 | API/平台]
目标受众: [检测结果或"需补充"]
核心功能:    [从文档/代码中提取的前3-5项]
调性:            [从现有文案推导——专业、活泼、技术向、温暖、极简]
支持平台:       [iOS | Android | 两者均支持 | Web | 桌面]
品牌标识规则:
  • 网站必须使用与应用相同的标题+正文字体。从主题文件(例如
    theme.dart
    tailwind.config
    、CSS变量)中检测这些字体。通过Google Fonts加载,添加
    preconnect
    +
    display=swap
  • 应用图标必须出现在页眉(文字标识旁)和页脚中。这可建立即时品牌认知,确保产品与其营销站点的一致性。
  • 不得创建"营销字体"或"网站Logo"——网站是产品在网络上的门面。
将品牌档案呈现给用户确认。请用户纠正错误内容并补充任何"需补充"的字段。得到确认后方可继续。

Phase 3: App Type Template Selection

阶段3:应用类型模板选择

Based on the confirmed App Type, load the matching template from
design-patterns.md
. Each template defines:
  • Layout blueprint — exact section order and spatial relationships
  • Visual characteristics — color strategy, typography rules, component styles specific to this app type
  • Copy tone — how headlines and body text should sound for this category
  • Device mockup strategy — which mockup frame(s) to use
App Type Detection Heuristics:
SignalApp Type
pubspec.yaml
with Flutter, iOS/Android folders
Mobile App
package.json
with Next.js/Nuxt/SvelteKit + API routes, dashboard UI
SaaS
Cargo.toml
, CLI binary structure,
.exe
/
.dmg
builders
Dev Tool / Desktop
openapi.yaml
,
/api/
route structure, SDK folders
API/Platform
Electron, Tauri, SwiftUI
.app
,
.dmg
config
Desktop App
Multiple signals presentAsk user to clarify primary
Device Mockup Selection:
User providedMockup used
iOS screenshots only
mockup.png
(iPhone frame)
Android screenshots only
android.png
(Android frame)
Both iOS + AndroidBoth frames — hero uses primary platform, features alternate
Present the selected template's section list to the user. They can add, remove, or reorder sections.
Animation Decision:
Default to CSS-only. A landing page does not need an animation library. CSS transitions +
IntersectionObserver
cover 90% of landing page animation needs with zero bundle cost. Only add a library when the user explicitly asks for complex animations (parallax, scrub, orchestrated timelines, text splitting).
NeedUse
Scroll reveals (fade-in, slide-up), hover effects, transitionsCSS transitions + IntersectionObserver — zero dependencies, best Lighthouse score
Complex orchestration the user explicitly requests (parallax, scrub, staggered timelines, text splitting)GSAP + ScrollTrigger
pnpm add gsap
, works with any framework. Only add when CSS alone can't achieve what the user wants.
Spring physics, layout animations (React only)Framer Motion — only if the user asks for it
Why CSS-first matters:
  • Every animation library adds bundle size (GSAP ~25KB, Framer Motion ~30KB). Landing pages must score 90+ on Lighthouse Performance.
  • CSS
    transition
    and
    @keyframes
    run on the compositor thread — they don't block the main thread.
  • IntersectionObserver
    is native, efficient, and sufficient for scroll-triggered reveals.
  • An animation library that slightly improves easing curves is not worth the Lighthouse penalty unless the user specifically wants those interactions.
CSS-only patterns (default):
css
/* Scroll reveal base */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s ease-out, transform 0.7s ease-out;
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
}
javascript
// IntersectionObserver for scroll triggers
const observer = new IntersectionObserver(
  (entries) => entries.forEach(e => {
    if (e.isIntersecting) {
      e.target.classList.add('visible');
      observer.unobserve(e.target);
    }
  }),
  { threshold: 0.15 }
);
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
Animation timing guidelines (applies to all approaches):
  • Section reveals: 0.6-0.8s duration, ease-out, 20-28px translateY
  • Hero entrance: orchestrate with staggered delays (0.1-0.15s between elements), not simultaneous
  • Overline text: use
    letter-spacing
    expansion (0.05em → 0.15em) + subtle x-shift for editorial feel — avoid plain fade-up on small uppercase text
  • Card grids: stagger 0.08-0.12s between cards
  • Hover effects: 0.2-0.3s, subtle (scale 1.02, shadow increase)
  • Always
    once: true
    — don't re-trigger animations when scrolling back
  • Always check
    prefers-reduced-motion
    and provide instant-visible fallback
When the user requests GSAP (complex animations only):
  • Always use
    gsap.context(callback, scope)
    and return
    ctx.revert()
    for cleanup
  • Register plugins once:
    gsap.registerPlugin(ScrollTrigger)
  • Animate only
    transform
    and
    opacity
    — never
    width
    ,
    height
    ,
    top
    ,
    left
  • Use
    will-change: transform, opacity
    only on elements that actually animate
  • Use
    once: true
    on ScrollTrigger to avoid re-triggering
Note the decision in the spec.
根据确认的应用类型,从
design-patterns.md
中加载匹配的模板。每个模板定义:
  • 布局蓝图 — 明确的板块顺序和空间关系
  • 视觉特征 — 针对该应用类型的颜色策略、排版规则、组件样式
  • 文案调性 — 标题和正文应采用的语气
  • 设备样机策略 — 使用哪些样机框架
应用类型检测规则:
信号应用类型
包含Flutter的
pubspec.yaml
,以及iOS/Android文件夹
移动应用
包含Next.js/Nuxt/SvelteKit + API路由、仪表盘UI的
package.json
SaaS
Cargo.toml
、CLI二进制结构、
.exe
/
.dmg
构建配置
开发工具 / 桌面应用
openapi.yaml
/api/
路由结构、SDK文件夹
API/平台
Electron、Tauri、SwiftUI
.app
.dmg
配置
桌面应用
存在多个信号请用户明确主要类型
设备样机选择:
用户提供内容使用的样机
仅iOS截图
mockup.png
(iPhone框架)
仅Android截图
android.png
(Android框架)
同时提供iOS + Android截图两个框架均使用——首屏使用主平台,功能板块交替展示
将所选模板的板块列表呈现给用户。用户可添加、删除或重新排序板块。
动画决策:
默认仅使用CSS实现。着陆页不需要动画库。CSS过渡 +
IntersectionObserver
可覆盖90%的着陆页动画需求,且无包体积成本。仅当用户明确要求复杂动画(视差、滚动触发、编排时间线、文字拆分)时,才添加动画库。
需求使用方案
滚动显示(淡入、上滑)、悬停效果、过渡CSS过渡 + IntersectionObserver — 无依赖,Lighthouse得分最优
用户明确要求的复杂编排(视差、滚动触发、交错时间线、文字拆分)GSAP + ScrollTrigger
pnpm add gsap
,兼容所有框架。仅当CSS无法实现用户需求时添加。
弹簧物理效果、布局动画(仅React)Framer Motion — 仅当用户要求时使用
为什么优先选择CSS:
  • 每个动画库都会增加包体积(GSAP约25KB,Framer Motion约30KB)。着陆页的Lighthouse性能得分必须达到90+。
  • CSS
    transition
    @keyframes
    在合成器线程运行——不会阻塞主线程。
  • IntersectionObserver
    是原生API,高效且足以实现滚动触发显示效果。
  • 除非用户明确需要那些交互效果,否则仅为了略微优化缓动曲线而引入动画库,不值得付出Lighthouse得分下降的代价。
仅CSS实现的模式(默认):
css
/* 滚动显示基础样式 */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s ease-out, transform 0.7s ease-out;
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* 尊重减少动画偏好 */
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
}
javascript
// 滚动触发的IntersectionObserver
const observer = new IntersectionObserver(
  (entries) => entries.forEach(e => {
    if (e.isIntersecting) {
      e.target.classList.add('visible');
      observer.unobserve(e.target);
    }
  }),
  { threshold: 0.15 }
);
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
动画时间指南(适用于所有方案):
  • 板块显示:0.6-0.8秒时长,ease-out缓动,20-28px上移距离
  • 首屏入场:按顺序交错延迟(元素间0.1-0.15秒延迟),而非同时触发
  • 顶栏文字:使用
    letter-spacing
    扩展(0.05em → 0.15em)+ 轻微X轴偏移以营造编辑感——避免小字号大写文字仅使用淡入上滑效果
  • 卡片网格:卡片间交错延迟0.08-0.12秒
  • 悬停效果:0.2-0.3秒,效果柔和(缩放1.02,阴影增强)
  • 始终设置
    once: true
    ——滚动返回时不再触发动画
  • 始终检查
    prefers-reduced-motion
    并提供即时可见的回退方案
当用户要求使用GSAP(仅复杂动画):
  • 始终使用
    gsap.context(callback, scope)
    并返回
    ctx.revert()
    以清理
  • 仅注册一次插件:
    gsap.registerPlugin(ScrollTrigger)
  • 仅动画
    transform
    opacity
    ——绝不动画
    width
    height
    top
    left
  • 仅在实际动画的元素上使用
    will-change: transform, opacity
  • 在ScrollTrigger上设置
    once: true
    以避免重复触发
在规范中记录该决策。

Phase 4: Visual Direction

阶段4:视觉方向

Read
design-patterns.md
for the selected app type's visual characteristics. Then derive the specific visual direction from the Brand Profile.
Do NOT ask mood/style questions — infer everything from the brand's existing design language.
Generate a Visual Direction covering:
Layout & Spacing
  • Content max-width (typically 680-800px for text, 1100-1200px for full layouts)
  • Section vertical padding: 150-200px between major sections (desktop), 96-120px (mobile). This aggressive spacing is what separates premium from generic — it signals confidence.
  • Feature section internal spacing: 128-160px between alternating text/mockup pairs
  • Grid columns and gaps: 80-96px between text and mockup columns
  • The "breathing room" principle: generous whitespace is a design element, not wasted space. When in doubt, add more space.
Color Application Map the detected palette to specific page roles:
  • Primary → CTAs, accents, active states, links
  • Background strategy → section alternation (white/light gray, or dark theme if brand supports it)
  • Text hierarchy → headings (near-black), body (dark gray), muted (medium gray)
  • Contrast breaks → placement of ONE dark/colored section for visual rhythm
  • Decorative elements → brand color at low opacity for glows, backgrounds
Typography Scale
  • h1: 48-72px, bold/black weight, tight line-height (1.1-1.2), tight letter-spacing (-0.02em)
  • h2: 32-40px section headings
  • h3: 24-28px subsection/feature titles
  • Body: 16-18px, line-height 1.5-1.6, max-width 540-640px for readability
  • Use the detected heading + body font pairing
Component Style
  • Buttons: primary color fill, matching border-radius from design tokens, 48-52px height, bold text
  • Cards: subtle border (1px, low opacity) OR soft shadow, consistent internal padding (24-32px), radius from tokens. Cards in a grid row MUST be equal height — use
    h-full
    on the card container so varying content length doesn't produce uneven rows.
  • Card icons: use inline SVG inside a fixed-size container (e.g., 40x40px rounded box with a subtle background tint —
    bg-gray-100
    on light sections,
    bg-white/5
    on dark). Use Heroicons, Lucide, or custom SVGs with
    aria-hidden="true"
    . Never use emoji characters as icons — they render inconsistently across platforms and look unprofessional.
  • Input fields: generous padding (14-16px), visible border, brand-color focus ring
  • Badges/pills: small, rounded, primary color at low opacity with primary text
Device Mockups
Both mockups use the same technique: a device frame PNG with a screenshot overlaid inside the screen area using absolute positioning with percentage offsets. The screen coordinates are pre-measured from the frame image.
iOS —
mockup.png
(iPhone frame, gold):
Frame: 1022 × 2082 px
Screen area: left 52px, top 46px, width 918px, height 1990px
Border radius: 126px on both axes

MK_W  = 1022;   MK_H  = 2082;
SC_L  = (52  / MK_W)  * 100;   // screen left %
SC_T  = (46  / MK_H)  * 100;   // screen top %
SC_W  = (918 / MK_W)  * 100;   // screen width %
SC_H  = (1990/ MK_H)  * 100;   // screen height %
SC_RX = (126 / 918)   * 100;   // border-radius x %
SC_RY = (126 / 1990)  * 100;   // border-radius y %
Use a 6.1 inch simulator for iOS screenshots to avoid scaling issues.
Android —
android-mockup.png
(Pixel 8 frame, dark):
Frame: 978 × 2100 px
Screen area: left 33px, top 49px, width 902px, height 2002px
Border radius: 40px on both axes

AMK_W = 978;    AMK_H = 2100;
ASC_L = (33  / AMK_W) * 100;   // screen left %
ASC_T = (49  / AMK_H) * 100;   // screen top %
ASC_W = (902 / AMK_W) * 100;   // screen width %
ASC_H = (2002/ AMK_H) * 100;   // screen height %
ASC_RX= (40  / 902)   * 100;   // border-radius x %
ASC_RY= (40  / 2002)  * 100;   // border-radius y %
Use a standard phone-sized emulator for Android screenshots.
Component pattern (framework-agnostic):
html
<div style="position: relative; aspect-ratio: {FRAME_W}/{FRAME_H};">
  <!-- Device frame -->
  <img src="/mockup.png" alt="" style="display: block; width: 100%; height: 100%;" />
  <!-- Screenshot overlay -->
  <div style="
    position: absolute; z-index: 10; overflow: hidden;
    left: {SC_L}%; top: {SC_T}%; width: {SC_W}%; height: {SC_H}%;
    border-radius: {SC_RX}% / {SC_RY}%;
  ">
    <img src="{screenshot}" alt="{description}" style="display: block; width: 100%; height: 100%; object-fit: fill;" />
  </div>
</div>
  • Show real app screenshots — NEVER placeholder screens
  • Use
    object-fit: fill
    (not
    cover
    ) to avoid cropping
  • Placement: centered or offset per layout blueprint, slight shadow for depth
  • On feature sections: alternate between platforms if both available
Motion
  • Default: CSS transitions +
    IntersectionObserver
    for scroll reveals (0.6-0.8s, ease-out). No animation library needed.
  • Hero entrance: orchestrate a staggered sequence — overline → headline → body → CTA → mockup, with 0.1-0.15s delays between elements. Use
    letter-spacing
    expansion on overlines for editorial feel.
  • Section reveals: fade-up (opacity 0→1, translateY 24-28px→0), triggered once when element enters viewport.
  • Only add GSAP/Framer Motion if the user explicitly requests complex animations (parallax, scrub, text splitting, spring physics).
  • Always respect
    prefers-reduced-motion
    — disable all motion, show content immediately.
  • Lighthouse target: animations must not impact TBT (Total Blocking Time) or CLS. Use
    will-change
    sparingly, only on elements that actually animate.
Responsive
  • Mobile-first
  • Breakpoints: mobile (<640px), tablet (640-1024px), desktop (>1024px)
  • Navigation: minimal on desktop, hamburger or hidden on mobile
  • Cards/grids: 1 col mobile → 2 col tablet → 3 col desktop
  • Device mockups: scale down proportionally, never crop
design-patterns.md
中读取所选应用类型的视觉特征。然后从品牌档案中推导具体的视觉方向。
不得询问情绪/风格问题——所有内容均从品牌现有设计语言推断。
生成视觉方向,涵盖:
布局与间距
  • 内容最大宽度:文本通常为680-800px,完整布局通常为1100-1200px
  • 板块垂直内边距:主要板块间(桌面端)150-200px,移动端96-120px。这种大间距是区分高端与通用设计的关键——传递出自信感。
  • 功能板块内部间距:交替的文本/样机对之间128-160px
  • 网格列与间隙:文本和样机列之间80-96px
  • "呼吸空间"原则:充足的留白是设计元素,而非浪费空间。拿不定主意时,就增加空间。
颜色应用 将检测到的配色方案映射到页面的特定角色:
  • 主色调 → CTA按钮、强调元素、激活状态、链接
  • 背景策略 → 板块交替(白色/浅灰,或品牌支持的深色主题)
  • 文本层级 → 标题(近黑色)、正文(深灰)、次要文本(中灰)
  • 对比板块 → 设置一个深色/彩色板块以营造视觉节奏
  • 装饰元素 → 低透明度的品牌颜色用于发光效果、背景
排版层级
  • h1:48-72px,粗体/特粗体,紧凑行高(1.1-1.2),紧凑字间距(-0.02em)
  • h2:32-40px,板块标题
  • h3:24-28px,子板块/功能标题
  • 正文:16-18px,行高1.5-1.6,最大宽度540-640px以保证可读性
  • 使用检测到的标题+正文字体组合
组件样式
  • 按钮:主色调填充,匹配设计令牌中的边框圆角,48-52px高度,粗体文字
  • 卡片:细微边框(1px,低透明度)或柔和阴影,一致的内部内边距(24-32px),使用令牌中的圆角。同一网格行中的卡片必须等高——在卡片容器上使用
    h-full
    ,避免内容长度不同导致行高不均。
  • 卡片图标:在固定尺寸容器(例如40x40px圆角框,浅色调背景——浅色板块用
    bg-gray-100
    ,深色板块用
    bg-white/5
    )内使用内联SVG。使用Heroicons、Lucide或自定义SVG,并添加
    aria-hidden="true"
    绝不能使用表情符号作为图标——它们在不同平台渲染不一致,且看起来不专业。
  • 输入框:充足内边距(14-16px),可见边框,品牌颜色的聚焦环
  • 徽章/胶囊:小尺寸,圆角,低透明度主色调背景+主色调文字
设备样机
两个样机使用相同技术:设备框架PNG,通过绝对定位和百分比偏移将截图覆盖在屏幕区域内。屏幕坐标已从框架图像中预先测量。
iOS —
mockup.png
(金色iPhone框架):
框架尺寸: 1022 × 2082 px
屏幕区域: 左52px,上46px,宽918px,高1990px
边框圆角: 双轴126px

MK_W  = 1022;   MK_H  = 2082;
SC_L  = (52  / MK_W)  * 100;   // 屏幕左侧百分比
SC_T  = (46  / MK_H)  * 100;   // 屏幕顶部百分比
SC_W  = (918 / MK_W)  * 100;   // 屏幕宽度百分比
SC_H  = (1990/ MK_H)  * 100;   // 屏幕高度百分比
SC_RX = (126 / 918)   * 100;   // 边框圆角X轴百分比
SC_RY = (126 / 1990)  * 100;   // 边框圆角Y轴百分比
使用6.1英寸模拟器捕获iOS截图以避免缩放问题。
Android —
android-mockup.png
(深色Pixel 8框架):
框架尺寸: 978 × 2100 px
屏幕区域: 左33px,上49px,宽902px,高2002px
边框圆角: 双轴40px

AMK_W = 978;    AMK_H = 2100;
ASC_L = (33  / AMK_W) * 100;   // 屏幕左侧百分比
ASC_T = (49  / AMK_H) * 100;   // 屏幕顶部百分比
ASC_W = (902 / AMK_W) * 100;   // 屏幕宽度百分比
ASC_H = (2002/ AMK_H) * 100;   // 屏幕高度百分比
ASC_RX= (40  / 902)   * 100;   // 边框圆角X轴百分比
ASC_RY= (40  / 2002)  * 100;   // 边框圆角Y轴百分比
使用标准手机尺寸的模拟器捕获Android截图。
组件模式(框架无关):
html
<div style="position: relative; aspect-ratio: {FRAME_W}/{FRAME_H};">
  <!-- 设备框架 -->
  <img src="/mockup.png" alt="" style="display: block; width: 100%; height: 100%;" />
  <!-- 截图覆盖层 -->
  <div style="
    position: absolute; z-index: 10; overflow: hidden;
    left: {SC_L}%; top: {SC_T}%; width: {SC_W}%; height: {SC_H}%;
    border-radius: {SC_RX}% / {SC_RY}%;
  ">
    <img src="{screenshot}" alt="{description}" style="display: block; width: 100%; height: 100%; object-fit: fill;" />
  </div>
</div>
  • 展示真实应用截图——绝不使用占位屏幕
  • 使用
    object-fit: fill
    (而非
    cover
    )以避免裁剪
  • 位置:根据布局蓝图居中或偏移,添加轻微阴影以营造层次感
  • 在功能板块:若同时提供两个平台的截图,交替展示
动效
  • 默认:CSS过渡 +
    IntersectionObserver
    实现滚动显示(0.6-0.8秒,ease-out缓动)。无需动画库。
  • 首屏入场:编排交错序列——顶栏文字 → 标题 → 正文 → CTA → 样机,元素间延迟0.1-0.15秒。顶栏文字使用
    letter-spacing
    扩展以营造编辑感。
  • 板块显示:淡入上滑(透明度0→1,上移24-28px→0),元素进入视口时触发一次。
  • 仅当用户明确要求复杂动画(视差、滚动触发、文字拆分、弹簧物理效果)时,才添加GSAP/Framer Motion。
  • 始终尊重
    prefers-reduced-motion
    ——禁用所有动效,立即显示内容。
  • Lighthouse目标:动效不得影响TBT(总阻塞时间)或CLS(累积布局偏移)。谨慎使用
    will-change
    ,仅在实际动画的元素上使用。
响应式设计
  • 移动端优先
  • 断点:移动端(<640px),平板端(640-1024px),桌面端(>1024px)
  • 导航:桌面端极简,移动端使用汉堡菜单或隐藏
  • 卡片/网格:移动端1列 → 平板端2列 → 桌面端3列
  • 设备样机:按比例缩小,绝不裁剪

Phase 5: Copy Framework

阶段5:文案框架

Generate draft copy for every selected section. Read the copy tone guidelines from
design-patterns.md
for the selected app type.
Universal Copy Rules:
Headlines:
  • Lead with the outcome, not the feature
  • Max 8-10 words for hero headline
  • Use the app's detected tone
  • Formula: [Outcome] + [Without Pain Point] or [Outcome] + [For Audience]
  • Add personality: inline SVG icons, animated text (Tailwind
    animate-*
    or Framer Motion), deliberate line breaks, or bold/colored key words. Never use emoji — use SVGs or animated components instead.
Subheadlines:
  • Expand the headline with specifics, 15-25 words
  • Address "how" or "why believe us"
Body copy:
  • 2-3 sentences max per paragraph
  • Active voice, present tense, "you" not "users"
  • Conversational > corporate
CTAs:
  • Primary: action-oriented ("Get Early Access", "Join the Waitlist", "Download Free")
  • Secondary: lower commitment ("See How It Works", "View Pricing")
  • Microcopy below: anxiety reducer ("No spam ever", "Free during beta", "Cancel anytime")
  • Repeat primary CTA 2-3 times across the page in different contexts
Feature descriptions:
  • Benefit headline (not feature name): "Never miss a deadline" > "Smart Notifications"
  • 1-2 sentences: what it does + why it matters
  • Consistent format across all features
Social proof (ONLY if real data was provided in Phase 1):
  • Stats: [Number] + [What] — only verified numbers ("2,000+ downloads", "4.8 star rating")
  • Testimonials: quote + name + role — only real user quotes, never fabricated
  • Awards/badges: only actual awards ("App of the Day", press mentions)
  • If no real metrics exist: SKIP this section entirely. Do not add placeholders, do not add "500+ users" if there aren't 500 users, do not invent testimonials. A clean page with no social proof is more credible than one with fake data. Focus on features and product screenshots instead.
Output format for each section:
undefined
为每个选中的板块生成草稿文案。从
design-patterns.md
中读取所选应用类型的文案调性指南。
通用文案规则:
标题:
  • 以结果为导向,而非功能
  • 首屏标题最多8-10个单词
  • 符合应用检测到的调性
  • 公式:[结果] + [无痛点] 或 [结果] + [针对受众]
  • 添加个性:内联SVG图标、动画文字(Tailwind
    animate-*
    或Framer Motion)、刻意换行、或加粗/彩色关键词。绝不能使用表情符号——改用SVG或动画组件。
副标题:
  • 扩展标题内容,15-25个单词
  • 说明"如何实现"或"为何相信我们"
正文:
  • 每段最多2-3句话
  • 主动语态,现在时,使用"你"而非"用户"
  • 口语化 > 企业化
CTA按钮:
  • 主按钮:动作导向("获取早期访问权限"、"加入等待列表"、"免费下载")
  • 次按钮:低承诺("查看工作原理"、"查看定价")
  • 按钮下方小字:缓解焦虑("绝无垃圾邮件"、"测试期免费"、"随时取消")
  • 在页面不同场景重复主CTA按钮2-3次
功能描述:
  • 利益导向标题(而非功能名称):"永不错过截止日期" > "智能通知"
  • 1-2句话:功能内容 + 重要性
  • 所有功能格式一致
社交证明(仅当阶段1提供了真实数据时):
  • 数据:[数字] + [内容] — 仅使用已验证的数字("2000+下载量"、"4.8星评分")
  • 用户评价:引用语 + 姓名 + 职位 — 仅使用真实用户评价,绝不编造
  • 奖项/徽章:仅使用实际获得的奖项("当日最佳应用"、媒体报道)
  • 若无真实数据:完全跳过此板块。不得添加占位符,不得在用户不足500人时添加"500+用户",不得编造评价。干净无社交证明的页面比含虚假数据的页面更可信。转而聚焦于功能和产品截图。
每个板块的输出格式:
undefined

[Section Name]

[板块名称]

Overline (optional)

顶栏文字(可选)

[category label, e.g. "PRODUCTIVITY" or "HOW IT WORKS"]
[分类标签,例如"生产力"或"工作原理"]

Headline

标题

[draft headline]
[草稿标题]

Subheadline

副标题

[draft subheadline — if applicable]
[草稿副标题——若适用]

Body

正文

[draft body copy — if applicable]
[草稿正文——若适用]

CTA

CTA

Primary: [button text] Secondary: [link text — if applicable] Microcopy: [text below button — if applicable]
主按钮: [按钮文字] 次按钮: [链接文字——若适用] 小字说明: [按钮下方文字——若适用]

Visual Notes

视觉说明

[what visual/screenshot/mockup appears alongside this copy] [specify: mockup.png (iOS) or android.png (Android) with which screenshot]
undefined
[此文案旁展示的视觉内容/截图/样机] [指定:mockup.png(iOS)或android.png(Android)及对应的截图]
undefined

Phase 6: Waitlist Component Spec

阶段6:等待列表组件规范

Design a simple, high-converting email capture. Read the waitlist patterns from
design-patterns.md
.
Skip this phase if the app is already launched — replace with store badge / download CTA spec instead.
Structure:
  • Single field: email only (no name, no phone — minimize friction)
  • Input + submit button on same row (desktop), stacked (mobile)
  • Social proof line below or above ("Join X others on the waitlist")
  • Anxiety reducer below button ("No spam. Unsubscribe anytime.")
States:
  • Default: empty input with placeholder "you@email.com"
  • Focus: brand-color outline ring
  • Loading: spinner in button or subtle pulse
  • Success: form replaced with "You're in! You're #[position] on the list."
  • Error: red border + inline message, form remains editable
  • Already registered: friendly message, no error styling
Placement:
  • Primary: embedded in Hero section (above fold)
  • Secondary: standalone Final CTA section (before footer)
  • Both instances submit to the same endpoint
API Integration:
If the user provided an existing endpoint in Phase 1 (question 6):
  • Wire the form to their endpoint URL, request format, and response handling
  • Match their error codes and response body structure in the form state logic
  • Document any required headers or auth in the spec
If no endpoint exists:
  • Use the default API shape below as the spec
  • Mark the endpoint as a TODO in implementation notes — the frontend form will POST to
    /api/waitlist
    but the backend handler needs to be built
  • Include the API shape in the spec so the user (or a backend subagent) can implement it
Default API shape (used when no endpoint exists):
POST /api/waitlist
Body: { "email": "user@example.com" }

200: { "position": 42, "message": "You're on the list!" }
409: { "message": "You're already on the list!" }
400: { "message": "Please enter a valid email" }
设计简洁、高转化率的邮箱捕获组件。从
design-patterns.md
中读取等待列表模式。
若应用已上线,跳过此阶段——替换为商店徽章/下载CTA规范。
结构:
  • 单个字段:仅邮箱(无需姓名、电话——最小化摩擦)
  • 输入框+提交按钮:桌面端同行展示,移动端堆叠展示
  • 上方或下方添加社交证明文字("已有X人加入等待列表")
  • 按钮下方添加焦虑缓解文字("绝无垃圾邮件。随时取消订阅。")
状态:
  • 默认:空输入框,占位符"you@email.com"
  • 聚焦:品牌颜色的轮廓环
  • 加载中:按钮内显示加载动画或轻微脉冲效果
  • 成功:表单替换为"已加入!你是等待列表中的第#[序号]位。"
  • 错误:红色边框+行内提示信息,表单保持可编辑
  • 已注册:友好提示信息,无错误样式
位置:
  • 主位置:嵌入首屏板块(首屏可见区域)
  • 次位置:独立的最终CTA板块(页脚前)
  • 两个实例均提交至同一接口
API集成:
若用户在阶段1(问题6)提供了现有接口:
  • 将表单与用户的接口URL、请求格式和响应处理对接
  • 在表单状态逻辑中匹配用户的错误码和响应体结构
  • 在规范中记录所需的任何请求头或认证信息
若无接口:
  • 使用以下默认API结构作为规范
  • 在实现说明中将接口标记为TODO——前端表单将POST至
    /api/waitlist
    ,但需构建后端处理程序
  • 在规范中包含API结构,以便用户(或后端子代理)实现
默认API结构(无接口时使用):
POST /api/waitlist
请求体: { "email": "user@example.com" }

200: { "position": 42, "message": "已加入等待列表!" }
409: { "message": "你已在等待列表中!" }
400: { "message": "请输入有效的邮箱地址" }

Phase 7: Assemble Spec Document

阶段7:组装规范文档

Combine all phases into a single markdown spec. Save to:
docs/specs/landing-page-spec.md
Or the project's existing spec/docs directory if one exists.
Spec document structure:
markdown
undefined
将所有阶段内容合并为单个Markdown规范文档。保存至:
docs/specs/landing-page-spec.md
若项目已有规范/文档目录,则保存至该目录。
规范文档结构:
markdown
undefined

[App Name] — Landing Page Design Specification

[应用名称] — 着陆页设计规范

Auto-generated from project brand identity on [date]. Review and adjust before implementation.
于[日期]从项目品牌标识自动生成。 实现前请审核并调整。

1. Brand Profile

1. 品牌档案

[from Phase 2 — the confirmed brand profile]
[来自阶段2——已确认的品牌档案]

2. Pages

2. 页面列表

[list of pages from Phase 1 question 4, with brief purpose]
  • Home (landing page) — this spec
  • Privacy Policy — legal requirement
  • Terms of Service — legal requirement
  • [other pages selected by user]
[来自阶段1问题4的页面列表及简要用途]
  • 首页(着陆页)—— 本规范覆盖
  • 隐私政策——法律要求
  • 服务条款——法律要求
  • [用户选择的其他页面]

3. Page Structure

3. 页面结构

[ordered section list from Phase 3, with brief purpose for each]
[来自阶段3的有序板块列表及每个板块的简要用途]

4. Visual Direction

4. 视觉方向

Layout

布局

[spacing, grid, content width]
[间距、网格、内容宽度]

Color Map

颜色映射

[primary, backgrounds, text hierarchy, contrast sections]
[主色调、背景、文本层级、对比板块]

Typography

排版

[heading/body specs with exact sizes, weights, line-heights]
[标题/正文规范,含精确尺寸、粗细、行高]

Components

组件

[buttons, cards, inputs, badges — with exact specs]
[按钮、卡片、输入框、徽章——含精确规范]

Device Mockups

设备样机

[which mockup frames, how screenshots map to them]
  • iOS: mockup.png frame + [list of screenshots and where they appear]
  • Android: android.png frame + [list of screenshots and where they appear]
[使用的样机框架,截图如何映射]
  • iOS: mockup.png框架 + [截图列表及展示位置]
  • Android: android.png框架 + [截图列表及展示位置]

Motion

动效

[CSS-only or Framer Motion — with specific animation specs]
[仅CSS实现或Framer Motion——含具体动效规范]

Responsive

响应式设计

[breakpoints, reflow behavior]
[断点、重排行为]

5. Section-by-Section Content

5. 分板块内容

5.1 Hero

5.1 首屏

[copy + visual notes + mockup assignment]
[文案 + 视觉说明 + 样机分配]

5.2 [Next Section]

5.2 [下一个板块]

[copy + visual notes]
... [one subsection per selected section]
[文案 + 视觉说明]
... [每个选中板块对应一个子章节]

6. Waitlist Component (or Download CTA)

6. 等待列表组件(或下载CTA)

[full spec from Phase 6]
[来自阶段6的完整规范]

7. Implementation Notes

7. 实现说明

Stack

技术栈

  • Framework: TanStack Start + React 19 + TypeScript
  • Rendering: SSR with static prerendering (SSG) for landing pages — full HTML in initial response for crawlers
  • Routing: TanStack Router (file-based, type-safe)
  • Styling: [Tailwind CSS | CSS Modules — match project convention]
  • Animations: CSS transitions + IntersectionObserver (default) | GSAP + ScrollTrigger (if user requested) | Framer Motion (if user requested, React only)
  • Device mockups: mockup.png (iOS) + android.png (Android) from skill assets
  • 框架: TanStack Start + React 19 + TypeScript
  • 渲染: SSR + 静态预渲染(SSG)用于着陆页——初始响应包含完整HTML,便于爬虫抓取
  • 路由: TanStack Router(基于文件,类型安全)
  • 样式: [Tailwind CSS | CSS Modules — 匹配项目惯例]
  • 动效: CSS过渡 + IntersectionObserver(默认) | GSAP + ScrollTrigger(若用户要求) | Framer Motion(若用户要求,仅React)
  • 设备样机: 技能资产中的mockup.png(iOS) + android.png(Android)

Additional Pages

其他页面

[brief structural note for each non-landing page selected in Phase 1]
[阶段1选中的每个非着陆页的简要结构说明]

Assets Required

所需资产

  • mockup.png — iPhone device frame (included with skill)
  • android.png — Android device frame (included with skill)
  • App icon PNG
  • iOS screenshots: [list with filenames]
  • Android screenshots: [list with filenames]
  • OG image (1200x630) — to be generated
  • mockup.png — iPhone设备框架(随技能提供)
  • android.png — Android设备框架(随技能提供)
  • 应用图标PNG
  • iOS截图: [文件名列表]
  • Android截图: [文件名列表]
  • OG图片(1200x630)——待生成

8. SEO, Accessibility & Web Crawlers

8. SEO、无障碍与网络爬虫

SEO (Search Engine Optimization)

SEO(搜索引擎优化)

Critical: Canonical URL consistency. Choose ONE primary domain (e.g.,
https://thedeadliner.app
) and use it everywhere — canonical tags, sitemap, robots.txt, OG URLs, JSON-LD. Mixed domains (
deadliner.app
vs
thedeadliner.app
) confuse search engines about which domain is authoritative. Audit every file before shipping.
SEO component pattern — create a reusable component with these defaults:
  • Accept per-page props:
    title
    ,
    description
    ,
    canonical
    ,
    image
    ,
    noindex
    ,
    jsonLd
  • Set sensible defaults (app name, default description, primary domain, OG image path)
  • Render ALL meta tags from one component so nothing is missed
Meta tags (server-rendered in
<head>
):
  • <title>
    — "[App Name] — [Tagline]" (max 60 chars)
  • <meta name="description">
    — value proposition summary (max 155 chars)
  • <link rel="canonical">
    — canonical URL (MUST match primary domain exactly)
  • <meta name="robots" content="index, follow">
    for public pages
  • <meta name="robots" content="noindex, follow">
    for private pages (payment success/cancel, reset, delete-account, verify-email)
  • <meta name="author">
    — app name or company
  • <meta name="theme-color">
    — brand primary color
Open Graph (social sharing):
  • og:title
    ,
    og:description
    ,
    og:image
    (1200x630 PNG),
    og:image:alt
    ,
    og:image:width
    (1200),
    og:image:height
    (630)
  • og:type
    = "website"
  • og:url
    = canonical URL
  • og:site_name
    = app name
  • og:locale
    = "en_US"
Twitter Card:
  • twitter:card
    = "summary_large_image"
  • twitter:title
    ,
    twitter:description
    ,
    twitter:image
    ,
    twitter:image:alt
Structured Data (JSON-LD in
<head>
):
Default (every page):
json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "[App Name]",
  "url": "[canonical URL]",
  "publisher": { "@type": "Organization", "name": "[App Name]", "logo": { "@type": "ImageObject", "url": "[logo URL]" } }
}
Homepage (additional):
json
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "[App Name]",
  "description": "[tagline]",
  "applicationCategory": "[category]",
  "operatingSystem": "[iOS, Android, etc.]",
  "offers": { "@type": "AggregateOffer", "lowPrice": "0", "highPrice": "[price]", "priceCurrency": "USD" }
}
  • Add
    aggregateRating
    ONLY if real ratings exist
  • Add
    review
    ONLY if real reviews exist
Favicons & App Icons:
  • favicon-16x16.png
    ,
    favicon-32x32.png
    — browser tab
  • apple-touch-icon.png
    (180x180) — iOS home screen
  • site.webmanifest
    with 192px and 512px icons (include maskable)
  • Theme color in manifest matching brand primary
Sitemap (
sitemap.xml
):
  • List ONLY public, indexable pages (home, pricing, privacy, terms)
  • Do NOT include noindexed pages (payment, reset, delete-account, verify)
  • Set realistic priorities: home (1.0), pricing (0.9), legal pages (0.5)
  • Set realistic changefreq: home (weekly), pricing (monthly), legal (yearly)
  • Auto-generate
    lastmod
    from build date
  • Prerender the sitemap at build time for static sites
robots.txt:
  • Block private/transactional pages:
    /reset
    ,
    /payment-success
    ,
    /payment-cancel
    ,
    /delete-account
    ,
    /verify-email
  • Allow everything else
  • Reference sitemap:
    Sitemap: https://[domain]/sitemap.xml
  • Domain in sitemap URL MUST match canonical domain
Performance SEO (Lighthouse targets):
  • LCP < 2.5s — hero content server-rendered, no layout shift
  • CLS < 0.1 — explicit dimensions on all images/mockups, no content shift from animations
  • FCP < 1.8s — minimal JS bundle, critical CSS inlined
  • TBT < 200ms — animations must not block main thread
  • Lighthouse Performance score target: 90+
关键:规范URL一致性。选择一个主域名(例如
https://thedeadliner.app
)并在所有地方使用——规范标签、站点地图、robots.txt、OG URL、JSON-LD。混合域名(
deadliner.app
vs
thedeadliner.app
)会让搜索引擎混淆哪个域名是权威域名。上线前审核所有文件。
SEO组件模式——创建包含以下默认值的可复用组件:
  • 接受每页属性:
    title
    ,
    description
    ,
    canonical
    ,
    image
    ,
    noindex
    ,
    jsonLd
  • 设置合理默认值(应用名称、默认描述、主域名、OG图片路径)
  • 从单个组件渲染所有meta标签,避免遗漏
Meta标签(在
<head>
中服务端渲染):
  • <title>
    — "[应用名称] — [标语]"(最多60字符)
  • <meta name="description">
    — 价值主张摘要(最多155字符)
  • <link rel="canonical">
    — 规范URL(必须与主域名完全匹配)
  • 公开页面使用
    <meta name="robots" content="index, follow">
  • 私有页面(支付成功/取消、重置密码、删除账户、验证邮箱)使用
    <meta name="robots" content="noindex, follow">
  • <meta name="author">
    — 应用名称或公司名称
  • <meta name="theme-color">
    — 品牌主色调
Open Graph(社交分享):
  • og:title
    ,
    og:description
    ,
    og:image
    (1200x630 PNG),
    og:image:alt
    ,
    og:image:width
    (1200),
    og:image:height
    (630)
  • og:type
    = "website"
  • og:url
    = 规范URL
  • og:site_name
    = 应用名称
  • og:locale
    = "en_US"
Twitter卡片:
  • twitter:card
    = "summary_large_image"
  • twitter:title
    ,
    twitter:description
    ,
    twitter:image
    ,
    twitter:image:alt
结构化数据(
<head>
中的JSON-LD):
默认(所有页面):
json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "[应用名称]",
  "url": "[规范URL]",
  "publisher": { "@type": "Organization", "name": "[应用名称]", "logo": { "@type": "ImageObject", "url": "[Logo URL]" } }
}
首页(额外内容):
json
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "[应用名称]",
  "description": "[标语]",
  "applicationCategory": "[分类]",
  "operatingSystem": "[iOS, Android等]",
  "offers": { "@type": "AggregateOffer", "lowPrice": "0", "highPrice": "[价格]", "priceCurrency": "USD" }
}
  • 仅当存在真实评分时添加
    aggregateRating
  • 仅当存在真实评价时添加
    review
图标与应用图标:
  • favicon-16x16.png
    ,
    favicon-32x32.png
    — 浏览器标签
  • apple-touch-icon.png
    (180x180)—— iOS主屏幕
  • site.webmanifest
    包含192px和512px图标(包含可遮罩图标)
  • manifest中的主题颜色匹配品牌主色调
站点地图(
sitemap.xml
):
  • 仅列出公开、可索引的页面(首页、定价页、隐私政策、服务条款)
  • 不得包含不可索引页面(支付、重置密码、删除账户、验证邮箱)
  • 设置合理优先级:首页(1.0)、定价页(0.9)、法律页面(0.5)
  • 设置合理更新频率:首页(每周)、定价页(每月)、法律页面(每年)
  • 从构建日期自动生成
    lastmod
  • 静态站点在构建时预渲染站点地图
robots.txt:
  • 阻止私有/事务性页面:
    /reset
    ,
    /payment-success
    ,
    /payment-cancel
    ,
    /delete-account
    ,
    /verify-email
  • 允许其他所有页面
  • 引用站点地图:
    Sitemap: https://[域名]/sitemap.xml
  • 站点地图URL中的域名必须与规范域名匹配
性能SEO(Lighthouse目标):
  • LCP < 2.5秒 — 首屏内容服务端渲染,无布局偏移
  • CLS < 0.1 — 所有图片/样机设置明确尺寸,动效不导致内容偏移
  • FCP < 1.8秒 — 最小化JS包体积,关键CSS内联
  • TBT < 200ms — 动效不得阻塞主线程
  • Lighthouse性能得分目标:90+

Web Crawler Optimization

网络爬虫优化

Why TanStack Start (SSR/SSG): Landing pages MUST serve complete HTML content on first response. Search engine crawlers (Googlebot, Bingbot) and social media scrapers (Twitter, Facebook, Slack, iMessage link previews) do not reliably execute JavaScript. CSR pages appear blank to crawlers, killing SEO and social sharing.
Requirements:
  • All text content (headlines, descriptions, feature copy) rendered as real HTML elements in the server response — NOT injected via JavaScript after hydration
  • All
    <meta>
    ,
    <title>
    , Open Graph, and JSON-LD tags present in the initial HTML
    <head>
  • Images use
    <img>
    tags with
    alt
    ,
    width
    ,
    height
    attributes (not CSS background-image for content images)
  • Internal links use
    <a href>
    tags (not JavaScript click handlers for navigation)
  • No content hidden behind JavaScript-only interactions for primary page content
  • robots.txt
    allows crawling of all public pages
  • sitemap.xml
    generated and referenced
Static prerendering (SSG):
  • Landing page and legal pages (privacy, terms) should be statically prerendered at build time
  • This produces plain
    .html
    files that serve instantly — zero server-side computation at request time
  • TanStack Start supports this via prerender configuration
Testing crawlability:
  • View page with JavaScript disabled — all content should be visible
  • Use
    curl -s [URL]
    and verify HTML contains actual content, not empty
    <div id="root">
  • Check Google Search Console after deployment for indexing issues
为什么选择TanStack Start(SSR/SSG): 着陆页必须在首次响应中提供完整HTML内容。搜索引擎爬虫(Googlebot、Bingbot)和社交媒体爬虫(Twitter、Facebook、Slack、iMessage链接预览)无法可靠执行JavaScript。CSR页面在爬虫看来是空白的,会严重影响SEO和社交分享效果。
要求:
  • 所有文本内容(标题、描述、功能文案)在服务端响应中渲染为真实HTML元素——不得在 hydration 后通过JavaScript注入
  • 所有
    <meta>
    <title>
    、Open Graph和JSON-LD标签在初始HTML
    <head>
    中存在
  • 图片使用
    <img>
    标签,包含
    alt
    width
    height
    属性(内容图片不得使用CSS背景图)
  • 内部链接使用
    <a href>
    标签(导航不得使用JavaScript点击事件)
  • 主页面内容不得隐藏在仅JavaScript交互的背后
  • robots.txt
    允许抓取所有公开页面
  • 生成并引用
    sitemap.xml
静态预渲染(SSG):
  • 着陆页和法律页面(隐私政策、服务条款)应在构建时静态预渲染
  • 这会生成纯
    .html
    文件,可即时响应——请求时无需服务端计算
  • TanStack Start通过预渲染配置支持此功能
可爬取性测试:
  • 禁用JavaScript查看页面——所有内容应可见
  • 使用
    curl -s [URL]
    并验证HTML包含实际内容,而非空的
    <div id="root">
  • 部署后在Google Search Console中检查索引问题

Accessibility (WCAG 2.1 AA)

无障碍(WCAG 2.1 AA)

Semantic HTML:
  • Use proper heading hierarchy: one
    <h1>
    per page,
    <h2>
    for sections,
    <h3>
    for subsections
  • Use landmark elements:
    <header>
    ,
    <nav>
    ,
    <main>
    ,
    <section>
    ,
    <footer>
  • Each
    <section>
    should have an
    aria-label
    or
    aria-labelledby
  • Use
    <button>
    for actions,
    <a>
    for navigation — never
    <div onClick>
  • Forms: every
    <input>
    has a visible
    <label>
    (or
    aria-label
    )
Color & Contrast:
  • Text on background: minimum 4.5:1 contrast ratio (AA)
  • Large text (18px+ bold or 24px+): minimum 3:1
  • UI components and graphical objects: minimum 3:1 against adjacent colors
  • Never convey information through color alone
Keyboard Navigation:
  • All interactive elements reachable via Tab key
  • Visible focus indicators (
    :focus-visible
    ) on all interactive elements — use brand color outline
  • Skip-to-content link as first focusable element
  • No keyboard traps — users can always Tab away from any element
  • Escape key closes modals/menus
Motion & Animation:
  • Wrap all animations in
    @media (prefers-reduced-motion: no-preference)
  • Provide
    prefers-reduced-motion: reduce
    alternative that disables motion
  • No auto-playing animations that cannot be paused
  • No flashing content (3 flashes per second max)
Images:
  • All content images have descriptive
    alt
    text
  • Decorative images use
    alt=""
    and
    aria-hidden="true"
  • Device mockup images:
    alt
    describes the app screen shown, not the device frame
Screen Reader:
  • Dynamic content updates (waitlist form states) announced via
    aria-live
    regions
  • Error messages linked to inputs via
    aria-describedby
  • Loading states communicated via
    aria-busy
    or live region
语义化HTML:
  • 使用正确的标题层级:每页一个
    <h1>
    ,板块使用
    <h2>
    ,子板块使用
    <h3>
  • 使用地标元素:
    <header>
    ,
    <nav>
    ,
    <main>
    ,
    <section>
    ,
    <footer>
  • 每个
    <section>
    应包含
    aria-label
    aria-labelledby
  • 使用
    <button>
    执行操作,
    <a>
    用于导航——绝不使用
    <div onClick>
  • 表单:每个
    <input>
    有可见的
    <label>
    (或
    aria-label
颜色与对比度:
  • 文本与背景:最小对比度4.5:1(AA级)
  • 大文本(18px+粗体或24px+):最小对比度3:1
  • UI组件和图形对象:与相邻颜色的最小对比度3:1
  • 绝不能仅通过颜色传递信息
键盘导航:
  • 所有交互元素可通过Tab键访问
  • 所有交互元素有可见的焦点指示器(
    :focus-visible
    )——使用品牌颜色轮廓
  • 跳过内容链接作为第一个可聚焦元素
  • 无键盘陷阱——用户可随时通过Tab键离开任何元素
  • Escape键关闭模态框/菜单
动效与动画:
  • 所有动画包裹在
    @media (prefers-reduced-motion: no-preference)
  • 提供
    prefers-reduced-motion: reduce
    的替代方案,禁用动效
  • 无无法暂停的自动播放动画
  • 无闪烁内容(最多每秒3次闪烁)
图片:
  • 所有内容图片有描述性
    alt
    文本
  • 装饰图片使用
    alt=""
    aria-hidden="true"
  • 设备样机图片:
    alt
    描述展示的应用屏幕,而非设备框架
屏幕阅读器:
  • 动态内容更新(等待列表表单状态)通过
    aria-live
    区域通知
  • 错误信息通过
    aria-describedby
    关联到输入框
  • 加载状态通过
    aria-busy
    或实时区域传达

Analytics

分析

  • Event tracking on CTA clicks, waitlist submissions, scroll depth
  • Track without blocking render — load analytics scripts with
    defer
    or
    async
undefined
  • 跟踪CTA点击、等待列表提交、滚动深度事件
  • 跟踪时不阻塞渲染——使用
    defer
    async
    加载分析脚本
undefined

Phase 8: User Review

阶段8:用户审核

Present a summary of the assembled spec — section list, key visual decisions, and sample copy — directly in the conversation.
Ask the user to review the full spec document. Iterate on any feedback.
The spec is the deliverable of the design phase.
在对话中直接展示组装后的规范摘要——板块列表、关键视觉决策和样本文案。
请用户审核完整规范文档。根据反馈迭代调整。
规范是设计阶段的交付物。

Phase 9: Implementation Planning

阶段9:实现规划

After the spec is approved, transition to implementation using subagent-driven development:
  1. Create implementation plan — Break the spec into discrete, parallelizable tasks:
    • Project scaffolding (TanStack Start + React 19 + TypeScript)
    • SSR/SSG configuration (prerender landing + legal pages)
    • Component hierarchy (layout, sections, shared components)
    • Each section as an independent task
    • Waitlist integration
    • SEO setup (meta tags, OG, JSON-LD, sitemap, robots.txt)
    • Accessibility pass
    • Responsive polish
    • Animation pass
  2. Dispatch subagents — Use parallel subagents for independent sections:
    • Each subagent gets: the full spec, its assigned section(s), brand profile, and asset paths
    • Subagents work in isolated worktrees to avoid conflicts
    • Shared components (Header, Footer, Button, device mockup components) are built first in the main branch
  3. Integration — Merge subagent work, resolve any conflicts, verify the full page
规范获批后,过渡到基于子代理驱动的开发实现:
  1. 创建实现计划 — 将规范拆分为独立、可并行的任务:
    • 项目脚手架(TanStack Start + React 19 + TypeScript)
    • SSR/SSG配置(预渲染着陆页+法律页面)
    • 组件层级(布局、板块、共享组件)
    • 每个板块作为独立任务
    • 等待列表集成
    • SEO设置(meta标签、OG、JSON-LD、站点地图、robots.txt)
    • 无障碍检查
    • 响应式优化
    • 动效实现
  2. 分派子代理 — 使用并行子代理处理独立板块:
    • 每个子代理获得:完整规范、分配的板块、品牌档案和资产路径
    • 子代理在独立工作树中工作,避免冲突
    • 共享组件(Header、Footer、Button、设备样机组件)先在主分支构建
  3. 集成 — 合并子代理的工作,解决任何冲突,验证完整页面

Phase 10: Review & QA

阶段10:审核与QA

After implementation is complete, run a structured review:
  1. Code review — Use the code-reviewer agent to verify:
    • React 19 + TanStack Start best practices
    • TypeScript strictness (no
      any
      , proper typing)
    • Accessibility compliance (WCAG 2.1 AA)
    • Performance (no unnecessary re-renders, optimized images)
    • Responsive behavior across breakpoints
  2. SEO & crawler review — Verify:
    • curl
      the page and confirm HTML contains all text content (not empty shell)
    • All meta tags, OG tags, and JSON-LD present in
      <head>
      of server response
    • Canonical URL audit: grep all
      .svelte
      and
      .ts
      files for the domain — every occurrence must use the same primary domain. Mixed domains is a critical SEO bug.
    • robots.txt
      blocks private pages, references sitemap with correct domain
    • sitemap.xml
      lists only public pages, uses correct domain, has realistic priorities
    • Private pages have
      noindex={true}
      prop on SEO component
    • OG image loads at the URL specified in meta tags (test with
      curl -I [og:image URL]
      )
    • Disable JavaScript in browser — all content still visible
    • No social proof, ratings, or testimonials unless real data was provided
  3. Visual review — Compare implementation against spec:
    • Colors match brand profile
    • Typography matches scale
    • Spacing matches rhythm
    • Device mockups render correctly with screenshots
    • Animations are smooth and respect reduced motion
  4. Accessibility review — Verify:
    • Keyboard navigation works end-to-end (Tab through entire page)
    • Focus indicators visible on all interactive elements
    • Screen reader announces content in logical order
    • Color contrast passes WCAG AA on all text
    • prefers-reduced-motion
      disables animations
  5. Functional review — Verify:
    • Waitlist form submits correctly (all states work)
    • All links and CTAs work
    • Navigation works on all breakpoints
    • No console errors
  6. Bug squash — Fix any issues found in review before marking complete

实现完成后,执行结构化审核:
  1. 代码审核 — 使用代码审核代理验证:
    • React 19 + TanStack Start最佳实践
    • TypeScript严格性(无
      any
      ,正确类型)
    • 无障碍合规(WCAG 2.1 AA)
    • 性能(无不必要的重渲染,优化图片)
    • 跨断点的响应式行为
  2. SEO与爬虫审核 — 验证:
    • curl
      页面并确认HTML包含所有文本内容(非空壳)
    • 所有meta标签、OG标签和JSON-LD在服务端响应的
      <head>
      中存在
    • 规范URL审核:在所有
      .svelte
      .ts
      文件中搜索域名——每个实例必须使用相同的主域名。混合域名是严重的SEO错误。
    • robots.txt
      阻止私有页面,引用的站点地图域名正确
    • sitemap.xml
      仅列出公开页面,域名正确,优先级合理
    • 私有页面在SEO组件上设置
      noindex={true}
      属性
    • OG图片在meta标签指定的URL可加载(使用
      curl -I [og:image URL]
      测试)
    • 浏览器中禁用JavaScript——所有内容仍可见
    • 仅当提供真实数据时才包含社交证明、评分或评价
  3. 视觉审核 — 对比实现与规范:
    • 颜色匹配品牌档案
    • 排版匹配层级规范
    • 间距匹配节奏
    • 设备样机与截图正确渲染
    • 动效流畅且尊重减少动效偏好
  4. 无障碍审核 — 验证:
    • 键盘导航端到端可用(Tab键遍历整个页面)
    • 所有交互元素有可见的焦点指示器
    • 屏幕阅读器按逻辑顺序播报内容
    • 所有文本的颜色对比度通过WCAG AA标准
    • prefers-reduced-motion
      禁用动效
  5. 功能审核 — 验证:
    • 等待列表表单提交正确(所有状态正常工作)
    • 所有链接和CTA正常工作
    • 导航在所有断点正常工作
    • 无控制台错误
  6. 修复bug — 修复审核中发现的所有问题后标记完成

Quality Checklist

质量检查表

Before marking the spec or implementation as complete, every item must pass:
在标记规范或实现完成前,所有项必须通过:

Spec Quality

规范质量

  • Brand profile confirmed by user — no assumed values
  • Every section has a clear purpose tied to conversion
  • All copy passes the "one second test" — readable at a glance
  • No two adjacent sections share the same layout pattern
  • Device mockups show real app screenshots, never placeholders
  • Social proof uses ONLY real metrics — or is absent entirely
  • Waitlist/CTA appears 2-3 times (hero, mid-page, final) without feeling repetitive
  • 品牌档案已获用户确认——无假设值
  • 每个板块有明确的转化相关目的
  • 所有文案通过"一秒测试"——一眼可读
  • 无两个相邻板块使用相同布局模式
  • 设备样机展示真实应用截图,绝不用占位符
  • 社交证明仅使用真实数据——或完全省略
  • 等待列表/CTA在页面中出现2-3次(首屏、中间、末尾),且不显得重复

Visual Quality

视觉质量

  • Color usage matches the brand profile — no invented palette
  • Typography hierarchy is clear: h1 > h2 > h3 > body > muted
  • Generous whitespace between sections (120-200px)
  • At least one contrast section for visual rhythm
  • Decorative elements (if any) support the message, don't block content
  • Responsive behavior defined for all three breakpoints
  • Card grids have equal-height cards across each row
  • No emoji characters anywhere — all icons are inline SVGs in fixed-size containers
  • 颜色使用匹配品牌档案——无自创配色
  • 排版层级清晰:h1 > h2 > h3 > 正文 > 次要文本
  • 板块间有充足留白(120-200px)
  • 至少有一个对比板块以营造视觉节奏
  • 装饰元素(若有)支持信息传递,不遮挡内容
  • 定义了所有三个断点的响应式行为
  • 卡片网格中每行卡片等高
  • 无任何表情符号——所有图标均为固定尺寸容器内的内联SVG

Technical Quality

技术质量

  • curl
    returns full HTML with all content (not empty shell)
  • All meta tags, OG, and JSON-LD present in server-rendered
    <head>
  • Canonical URL consistency — every canonical, sitemap URL, robots.txt sitemap reference, OG url, and JSON-LD url uses the SAME domain. No mixed
    app.com
    vs
    theapp.com
    .
  • robots.txt
    blocks private pages and references sitemap with correct domain
  • sitemap.xml
    lists only public indexable pages with realistic priorities
  • Private pages (payment, reset, delete-account) have
    noindex
    meta tag
  • OG image exists at 1200x630, referenced correctly in meta tags
  • Favicons (16px, 32px), apple-touch-icon (180px), and web manifest with 192/512px icons
  • WCAG 2.1 AA: contrast ratios, keyboard nav, focus indicators, semantic HTML
  • prefers-reduced-motion
    disables all animations and shows content immediately
  • All images have
    alt
    ,
    width
    ,
    height
    attributes
  • No console errors, no layout shift on load
  • Lighthouse Performance score 90+ — animations use only
    transform
    /
    opacity
    , no layout-triggering properties
  • No animation library in bundle unless user explicitly requested complex animations
  • Animations don't increase TBT (Total Blocking Time) or cause CLS > 0.1
  • curl
    返回包含所有内容的完整HTML(非空壳)
  • 所有meta标签、OG和JSON-LD在服务端渲染的
    <head>
    中存在
  • 规范URL一致性——所有规范URL、站点地图URL、robots.txt站点地图引用、OG url和JSON-LD url使用相同域名。无
    app.com
    theapp.com
    混合使用的情况。
  • robots.txt
    阻止私有页面,引用的站点地图域名正确
  • sitemap.xml
    仅列出公开可索引页面,优先级合理
  • 私有页面(支付、重置密码、删除账户)有
    noindex
    meta标签
  • OG图片以1200x630尺寸存在,meta标签引用正确
  • 包含图标(16px、32px)、apple-touch-icon(180px)和含192/512px图标的web manifest
  • 符合WCAG 2.1 AA:对比度、键盘导航、焦点指示器、语义化HTML
  • prefers-reduced-motion
    禁用所有动效并立即显示内容
  • 所有图片有
    alt
    width
    height
    属性
  • 无控制台错误,加载时无布局偏移
  • Lighthouse性能得分90+——动效仅使用
    transform
    /
    opacity
    ,无触发布局的属性
  • 包中无动画库,除非用户明确要求复杂动画
  • 动效不增加TBT(总阻塞时间)或导致CLS > 0.1

Copy Quality

文案质量

  • Hero headline: 8-10 words max, benefit-first
  • Each feature headline sells an outcome, not a feature name
  • CTAs are action-oriented and specific
  • Microcopy reduces anxiety (no spam, free tier, cancel anytime)
  • No marketing buzzwords unless they're genuinely accurate
  • No two headlines use the same formula

  • 首屏标题:最多8-10个单词,利益导向
  • 每个功能标题突出结果,而非功能名称
  • CTA按钮动作导向且具体
  • 小字说明缓解焦虑(无垃圾邮件、免费 tier、随时取消)
  • 无营销 buzzwords,除非确实准确
  • 无两个标题使用相同句式

Key Principles

核心原则

  • Never assume — detect. Read the project first. Fill gaps with questions, don't start from scratch.
  • Ask first, then detect. Get user requirements (pages, screenshots, preferences) before diving into code.
  • Brand coherence. The landing page must feel like it belongs to the same product. Same fonts, same icon, same color palette. The header must show the app's actual icon next to the wordmark — never a text-only logo.
  • No generic AI aesthetics. No gratuitous gradients on white backgrounds, no stock-photo heroes, no "revolutionize your workflow" copy. Every choice derives from the actual brand and app type.
  • Product is the hero. Show the real product in real device frames —
    mockup.png
    for iOS,
    android.png
    for Android. Never illustrations of what the product "might look like."
  • Fewer sections, more space. Pre-launch pages need 3-4 sections max (Hero, Features, Secondary Features, CTA). Every additional section dilutes the conversion funnel. Generous whitespace (150-200px between sections) signals premium quality. Don't fill space with "How It Works" or "Problem/Solution" unless they add information the features don't already cover.
  • Conversion-focused. Every section exists to move the visitor toward the waitlist/download. If a section doesn't serve that goal, remove it. Pricing, FAQ, and testimonials belong on post-launch pages — not pre-launch waitlist pages.
  • Spec is the design deliverable. Detailed enough that any developer or AI tool can implement faithfully. No ambiguity in spacing, colors, or typography.
  • TanStack Start + React 19 + TypeScript for implementation. SSR/SSG for full crawlability. Landing pages must serve complete HTML — no empty shells. CSS transitions + IntersectionObserver for animations by default — zero bundle cost, Lighthouse-friendly. Only add GSAP or Framer Motion when the user explicitly requests complex animations.
  • Crawlable by default. Every piece of content must be in the server-rendered HTML. If
    curl
    returns an empty
    <div>
    , the implementation is wrong. Search engines, social media scrapers, and link previews depend on real HTML content.
  • Subagent-driven development. Parallelize independent sections for faster implementation.
  • Review before shipping. Code review, visual review, and functional review are mandatory before marking complete.
  • Real metrics or none. Never fabricate social proof, reviews, testimonials, user counts, or awards. Fake data destroys trust faster than no data at all. If the user has no metrics, focus on features, product screenshots, and the value proposition instead. A minimalist page with real content always beats a busy page with invented credibility.
  • Accessible by default. WCAG 2.1 AA is the floor, not the ceiling.
  • No emoji, ever. Emoji characters render inconsistently across platforms, look unprofessional, and can't be styled. Use inline SVGs (Heroicons, Lucide, or custom) inside fixed-size containers with a subtle background tint. SVGs scale cleanly, match the brand palette via
    currentColor
    , and support
    aria-hidden
    for accessibility.
  • 绝不假设——检测为先。先读取项目内容。通过问题填补空白,而非从零开始。
  • 先询问,再检测。先获取用户需求(页面、截图、偏好),再深入代码。
  • 品牌一致性。着陆页必须与产品风格统一。相同字体、相同图标、相同配色方案。页眉必须展示应用的实际图标和文字标识——绝不用纯文字Logo。
  • 无通用AI美学。无白色背景上的 gratuitous 渐变,无库存照片首屏,无"革新你的工作流程"这类文案。每个选择均源自实际品牌和应用类型。
  • 产品是主角。在真实设备框架中展示真实产品——iOS用
    mockup.png
    ,Android用
    android.png
    。绝不使用产品"可能看起来像什么"的插图。
  • 更少板块,更多空间。预启动页面最多需要3-4个板块(首屏、功能、次要功能、CTA)。额外板块会稀释转化漏斗。充足留白(板块间150-200px)传递高端品质感。除非功能未涵盖相关信息,否则不要用"工作原理"或"问题/解决方案"板块填充空间。
  • 聚焦转化。每个板块的存在都是为了引导访客加入等待列表/下载。若板块无法服务该目标,删除它。定价、FAQ和评价属于上线后页面——而非预启动等待列表页面。
  • 规范是设计交付物。足够详细,任何开发者或AI工具均可忠实实现。间距、颜色或排版无歧义。
  • 实现使用TanStack Start + React 19 + TypeScript。SSR/SSG确保全可爬取。着陆页必须提供完整HTML——无空壳。默认使用CSS过渡 + IntersectionObserver实现动效——无包体积成本,符合Lighthouse要求。仅当用户明确要求复杂动画时才添加GSAP或Framer Motion。
  • 默认可爬取。所有内容必须在服务端渲染的HTML中。若
    curl
    返回空的
    <div>
    ,则实现错误。搜索引擎、社交媒体爬虫和链接预览依赖真实HTML内容。
  • 子代理驱动开发。并行处理独立板块以加快实现速度。
  • 上线前审核。代码审核、视觉审核和功能审核是标记完成前的必要步骤。
  • 真实数据或无数据。绝不编造社交证明、评价、用户数或奖项。虚假数据比无数据更快摧毁信任。若用户无数据,聚焦于功能、产品截图和价值主张。有真实内容的极简页面始终优于含虚假可信度信息的繁杂页面。
  • 默认无障碍。WCAG 2.1 AA是底线,而非上限。
  • 绝不使用表情符号。表情符号在不同平台渲染不一致,看起来不专业,且无法样式化。使用内联SVG(Heroicons、Lucide或自定义),放在固定尺寸容器中并添加微妙背景色调。SVG可清晰缩放,通过
    currentColor
    匹配品牌配色,并支持
    aria-hidden
    以实现无障碍。