Documentation
Customize

Customize Landing Page

Configure the display content for product introduction, pricing plans, FAQ, and other modules

Landing Page Configuration

All landing page content is configured in src/config/locale/landing.content.ts, with multi-language support.

Module Display Control

Each module has a display field to control visibility (except Hero, which is always shown):

banner: { display: true, ... },
powerBy: { display: true, ... },
threeBenefits: { display: true, ... },
introduction: { display: true, items: [...] },
features: { display: true, ... },
pricing: { display: true },
horizontalShowcase: { display: true, ... },
userTestimonials: { display: true, ... },
mediaCoverage: { display: true, ... },
faq: { display: true, ... },
cta: { display: true, ... },
header: { display: true, ... },
footer: { display: true, ... },
banner: {
  display: true,
  text: t({
    en: "Open Sourced in 2026: Production-grade AI SaaS template available!",
    zh: "2026 年开源:生产级 AI SaaS 模板现已发布!",
  }),
  button: {
    text: t({ en: "View on GitHub", zh: "在 GitHub 上查看" }),
    href: github,
  },
},
Config ItemDescription
displayWhether to show the Banner
textBanner text content
button.textButton text
button.hrefButton link

Hero Section

hero: {
  title: t({
    en: "Vibe Any AI Startups in hours, not days",
    zh: "VibeAny AI 加速想法落地",
  }),
  description: t({
    en: "VibeAny is a TanStack boilerplate...",
    zh: "VibeAny 是一个 TanStack Start 模板...",
  }),
  announcement: {
    show: true,
    text: t({ en: "...", zh: "..." }),
    href: github,
  },
  buttons: {
    start: { text: t({ en: "Get Started", zh: "开始" }), url: "/chat" },
    docs: { text: t({ en: "Learn More", zh: "了解更多" }), url: "/docs" },
  },
  image: {
    enabled: false,
    src: "/landing/hero/home.png",
    width: 2700,
    height: 1440,
  },
},

Three Key Benefits

threeBenefits: {
  display: true,
  title: t({ en: "Three Key Benefits", zh: "三大核心优势" }),
  description: t({ en: "Discover why...", zh: "了解为什么..." }),
  items: [
    {
      title: t({ en: "Lightning Fast Startup", zh: "极速启动" }),
      description: t({ en: "...", zh: "..." }),
      icon: "Zap",
    },
    // ...more items
  ],
},

Icons

The icon field uses Lucide React icon names, such as Zap, Shield, Code, etc.

Feature Introduction

The introduction section configures multiple feature introduction blocks with images:

introduction: {
  display: true,
  items: [
    {
      type: "image",
      title: t({ en: "Zero-Config Authentication", zh: "零配置认证系统" }),
      description: t({ en: "...", zh: "..." }),
      image: "/landing/introduction/auth.webp",
      imagePosition: "left", // "left" | "right"
      features: [
        {
          title: t({ en: "One-Click Social Login", zh: "一键社交登录" }),
          description: t({ en: "...", zh: "..." }),
        },
        // ...
      ],
    },
  ],
},

User Testimonials

userTestimonials: {
  display: true,
  title: t({ en: "What Our Users Say", zh: "用户评价" }),
  testimonials: [
    {
      text: t({ en: "...", zh: "..." }),
      image: "/avatars/user1.avif",
      name: "Sarah Chen",
      role: t({ en: "CTO, TechStart", zh: "TechStart 首席技术官" }),
    },
    // ...
  ],
},

FAQ

faq: {
  display: true,
  title: t({ en: "Frequently Asked Questions", zh: "常见问题" }),
  description: t({ en: "...", zh: "..." }),
  items: [
    {
      question: t({ en: "What is VibeAny?", zh: "什么是 VibeAny?" }),
      answer: t({ en: "...", zh: "..." }),
    },
  ],
},

Header Navigation

header: {
  display: true,
  items: [
    { label: t({ en: "Documentation", zh: "文档" }), href: "/docs" },
    { label: t({ en: "Chat", zh: "聊天" }), href: "/chat" },
    {
      label: t({ en: "More Features", zh: "更多功能" }),
      children: [
        { label: t({ en: "Blog", zh: "博客" }), href: "/blog" },
        { label: t({ en: "Roadmap", zh: "路线图" }), href: "/roadmap" },
      ],
    },
  ],
},
footer: {
  display: true,
  companyName: "VibeAny",
  scrollToTop: t({ en: "Back to Top", zh: "返回顶部" }),
  sections: [
    {
      title: t({ en: "About", zh: "关于" }),
      links: [
        { label: t({ en: "About Us", zh: "关于我们" }), href: "/about" },
        // ...
      ],
    },
  ],
},

Pricing Configuration

The pricing module display is controlled in landing.content.ts:

pricing: {
  display: true,
},

Pricing page content is configured in src/config/locale/pricing.content.ts.

Package prices and subscription logic are configured in src/config/website-config.ts. See the Payment System section for details.

Privacy Policy & Terms of Service

Legal page content is stored in the content/legal/ directory, written in MDX format:

FilePageRoute
content/legal/privacy-policy.mdxPrivacy Policy (English)/legal/privacy-policy
content/legal/privacy-policy.zh.mdxPrivacy Policy (Chinese)/zh/legal/privacy-policy
content/legal/terms-of-service.mdxTerms of Service (English)/legal/terms-of-service
content/legal/terms-of-service.zh.mdxTerms of Service (Chinese)/zh/legal/terms-of-service

Other Page Configurations

File PathPage
src/config/locale/auth.content.tsLogin/Registration
src/config/locale/user-dashboard.content.tsUser Dashboard
src/config/locale/admin.content.tsAdmin Panel
src/config/locale/404.content.ts404 Page
src/config/locale/error.content.tsError Page

On this page