From 5482283727c127c64b247f45bedfd5a25ceb16d2 Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Thu, 16 Apr 2026 19:12:06 +0800 Subject: [PATCH] feat(seo): add useHead to all landing pages with Command as Service titles and descriptions --- deploy/templates/ingress.yaml | 3 --- src/app/about/page.tsx | 3 +++ src/app/docs/page.tsx | 3 +++ src/app/network/api/page.tsx | 3 +++ src/app/network/page.tsx | 3 +++ src/app/network/rooms/page.tsx | 3 +++ src/app/pricing/enterprise/page.tsx | 3 +++ src/app/pricing/faq/page.tsx | 3 +++ src/app/pricing/page.tsx | 3 +++ src/app/skills/docs/page.tsx | 3 +++ src/app/skills/page.tsx | 3 +++ src/app/skills/publish/page.tsx | 3 +++ src/app/solutions/governance/page.tsx | 3 +++ src/app/solutions/memory/page.tsx | 3 +++ src/app/solutions/page.tsx | 3 +++ src/app/solutions/rooms/page.tsx | 3 +++ 16 files changed, 45 insertions(+), 3 deletions(-) diff --git a/deploy/templates/ingress.yaml b/deploy/templates/ingress.yaml index 3229e90..ed69621 100644 --- a/deploy/templates/ingress.yaml +++ b/deploy/templates/ingress.yaml @@ -49,7 +49,6 @@ spec: name: {{ $fullName }}-frontend port: number: 80 - # Dedicated API host - host: api.gitdata.ai http: paths: @@ -60,7 +59,6 @@ spec: name: {{ $fullName }}-app port: number: {{ .Values.app.service.port }} - # Gitserver HTTP - host: git.gitdata.ai http: paths: @@ -71,7 +69,6 @@ spec: name: {{ $fullName }}-gitserver-http port: number: {{ .Values.gitserver.service.http.port }} - # Static files - host: static.gitdata.ai http: paths: diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index adc64c7..5b99608 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {ArrowRight, Book} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const TEAM = [ {name: 'Alex Chen', role: 'Founder & CEO', initials: 'AC'}, {name: 'Sarah Kim', role: 'CTO', initials: 'SK'}, @@ -10,6 +11,8 @@ const TEAM = [ ]; export default function AboutPage() { + + useHead({ title: 'About — GitDataAI', description: 'We believe every engineering action should be a versioned command. GitDataAI: Where Humans & Agents Engineer Together.' }); const navigate = useNavigate(); return ( diff --git a/src/app/docs/page.tsx b/src/app/docs/page.tsx index 20cb64b..5c6e3f6 100644 --- a/src/app/docs/page.tsx +++ b/src/app/docs/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Book, Code2, Command, FileText, Layers} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const DOCS_SECTIONS = [ { icon: Book, @@ -36,6 +37,8 @@ const DOCS_SECTIONS = [ ]; export default function DocsPage() { + + useHead({ title: 'Documentation — GitDataAI', description: 'Everything you need to build, deploy, and scale agentic workflows via GitDataAI Command as Service.' }); const navigate = useNavigate(); return ( diff --git a/src/app/network/api/page.tsx b/src/app/network/api/page.tsx index fe7b7e1..55d226e 100644 --- a/src/app/network/api/page.tsx +++ b/src/app/network/api/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Globe, Key, Terminal} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const ENDPOINTS = [ {method: 'GET', path: '/v1/agents', desc: 'List all agents in your workspace'}, {method: 'POST', path: '/v1/rooms', desc: 'Create a command-first room for humans and agents'}, @@ -10,6 +11,8 @@ const ENDPOINTS = [ ]; export default function NetworkApiPage() { + + useHead({ title: 'Developer API — GitDataAI', description: 'Emit commands, stream agent results, and orchestrate your AI workforce via a unified REST API.' }); const navigate = useNavigate(); return ( diff --git a/src/app/network/page.tsx b/src/app/network/page.tsx index 8d12246..5fc1594 100644 --- a/src/app/network/page.tsx +++ b/src/app/network/page.tsx @@ -1,6 +1,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {Bot, Lock, Network, Users} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const STATS = [ {value: '12,400+', label: 'Active Agents'}, {value: '840+', label: 'Workspaces'}, @@ -15,6 +16,8 @@ const FEATURED_ROOMS = [ ]; export default function NetworkPage() { + + useHead({ title: 'The Network — GitDataAI', description: 'A growing ecosystem of agents, workspaces, and skills collaborating through a unified command stream. Every agent action is a command.' }); return (
diff --git a/src/app/network/rooms/page.tsx b/src/app/network/rooms/page.tsx index 8052d16..da87442 100644 --- a/src/app/network/rooms/page.tsx +++ b/src/app/network/rooms/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Bot, Users} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const PUBLIC_ROOMS = [ {title: 'OSS Security Audit: actix-web', agents: 5, participants: 24, tags: ['security', 'rust', 'audit'], live: true}, {title: 'React Performance Deep Dive', agents: 3, participants: 12, tags: ['frontend', 'react', 'performance'], live: true}, @@ -12,6 +13,8 @@ const PUBLIC_ROOMS = [ ]; export default function NetworkRoomsPage() { + + useHead({ title: 'Public Rooms — GitDataAI', description: 'Join open rooms where developers and AI agents execute engineering commands together on real problems.' }); const navigate = useNavigate(); return ( diff --git a/src/app/pricing/enterprise/page.tsx b/src/app/pricing/enterprise/page.tsx index 14571f2..78830bd 100644 --- a/src/app/pricing/enterprise/page.tsx +++ b/src/app/pricing/enterprise/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {ArrowRight, Check} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const FEATURES = [ 'Unlimited agents and memory', 'Dedicated compute infrastructure', @@ -16,6 +17,8 @@ const FEATURES = [ ]; export default function PricingEnterprisePage() { + + useHead({ title: 'Enterprise — GitDataAI', description: 'Command as Service at enterprise scale. Custom deployment, granular command-stream governance, and dedicated SLA for your agent fleet.' }); const navigate = useNavigate(); return ( diff --git a/src/app/pricing/faq/page.tsx b/src/app/pricing/faq/page.tsx index 046ee4e..d245d3f 100644 --- a/src/app/pricing/faq/page.tsx +++ b/src/app/pricing/faq/page.tsx @@ -3,6 +3,7 @@ import {useNavigate} from 'react-router-dom'; import {ChevronDown} from 'lucide-react'; import {useState} from 'react'; +import {useHead} from '@/hooks/useHead'; const FAQS = [ ['How does billing work?', 'You are billed monthly based on your active tier. Upgrades take effect immediately; downgrades apply at the next billing cycle.'], ['What counts as a token?', 'Tokens are the sum of all input and output tokens consumed by your agents executing commands across all models. Memory storage is billed separately.'], @@ -15,6 +16,8 @@ const FAQS = [ ]; export default function PricingFaqPage() { + + useHead({ title: 'Billing FAQ — GitDataAI', description: 'Answers to common questions about pricing, billing, and command stream usage on GitDataAI.' }); const navigate = useNavigate(); const [open, setOpen] = useState(0); diff --git a/src/app/pricing/page.tsx b/src/app/pricing/page.tsx index ba663db..7728eab 100644 --- a/src/app/pricing/page.tsx +++ b/src/app/pricing/page.tsx @@ -2,6 +2,7 @@ import {useNavigate} from 'react-router-dom'; import {LandingLayout} from '@/components/landing/landing-layout'; import {Check} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const TIERS = [ { name: 'Free', @@ -49,6 +50,8 @@ const TIERS = [ ]; export default function PricingPage() { + + useHead({ title: 'Pricing — GitDataAI', description: 'Simple, transparent pricing. Start free. Scale as your agent fleet grows. Command as Service for every team.' }); const navigate = useNavigate(); return ( diff --git a/src/app/skills/docs/page.tsx b/src/app/skills/docs/page.tsx index 3755c76..0d63b69 100644 --- a/src/app/skills/docs/page.tsx +++ b/src/app/skills/docs/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {BookOpen, Code2, Terminal} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const SECTIONS = [ {icon: BookOpen, title: 'Skill Manifest', desc: 'Define skill metadata, tools, prompts, and trigger conditions.'}, {icon: Code2, title: 'Tool Definitions', desc: 'Register custom tools that your skill agents can call.'}, @@ -9,6 +10,8 @@ const SECTIONS = [ ]; export default function SkillsDocsPage() { + + useHead({ title: 'Building Skills — GitDataAI', description: 'A skill is a versioned package of prompts, tools, and behavior patterns — invoked by command, composable into any workflow.' }); const navigate = useNavigate(); return ( diff --git a/src/app/skills/page.tsx b/src/app/skills/page.tsx index 8ba1b2b..393b388 100644 --- a/src/app/skills/page.tsx +++ b/src/app/skills/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Bot, Code2, Globe, Layers, Search, Star} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const FEATURED_SKILLS = [ { icon: Code2, @@ -44,6 +45,8 @@ const FEATURED_SKILLS = [ const CATEGORIES = ['All', 'Frontend', 'Backend', 'DevOps', 'Security', 'Data', 'Testing']; export default function SkillsPage() { + + useHead({ title: 'Skill Registry — GitDataAI', description: 'Reusable, versioned agent behaviors packaged as skills — invoked by command, deployed across your entire agent fleet.' }); const navigate = useNavigate(); return ( diff --git a/src/app/skills/publish/page.tsx b/src/app/skills/publish/page.tsx index ff83477..aab2641 100644 --- a/src/app/skills/publish/page.tsx +++ b/src/app/skills/publish/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {ArrowRight, BookOpen, Code2, Star} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const STEPS = [ {icon: Code2, title: '1. Write your skill', desc: 'Define prompts, tools, and behaviors in a skill manifest YAML file.'}, {icon: BookOpen, title: '2. Test locally', desc: 'Use the CLI to simulate agent runs and validate outputs before publishing.'}, @@ -9,6 +10,8 @@ const STEPS = [ ]; export default function SkillsPublishPage() { + + useHead({ title: 'Publish a Skill — GitDataAI', description: 'Turn your best agent behaviors into reusable, versioned skills — invoked by command, composable into any workflow.' }); const navigate = useNavigate(); return ( diff --git a/src/app/solutions/governance/page.tsx b/src/app/solutions/governance/page.tsx index 51f2626..b676550 100644 --- a/src/app/solutions/governance/page.tsx +++ b/src/app/solutions/governance/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Cpu} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const LIMITS = [ {tier: 'Free', tokens: '100K', compute: '1x', agents: '3'}, {tier: 'Pro', tokens: '10M', compute: '4x', agents: 'Unlimited'}, @@ -9,6 +10,8 @@ const LIMITS = [ ]; export default function SolutionsGovernancePage() { + + useHead({ title: 'Compute Governance — GitDataAI', description: 'Unified management of LLM tokens and compute resources. Every AI command has a cost — full visibility into your command stream spend.' }); const navigate = useNavigate(); return ( diff --git a/src/app/solutions/memory/page.tsx b/src/app/solutions/memory/page.tsx index e6bea59..3f981cf 100644 --- a/src/app/solutions/memory/page.tsx +++ b/src/app/solutions/memory/page.tsx @@ -2,7 +2,10 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Brain, GitBranch, RotateCcw} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; export default function SolutionsMemoryPage() { + + useHead({ title: 'Agent Memory — GitDataAI', description: 'Git-native long-term memory for AI agents — versioned command context that travels with every command.' }); const navigate = useNavigate(); return ( diff --git a/src/app/solutions/page.tsx b/src/app/solutions/page.tsx index 35fe80b..45c0a89 100644 --- a/src/app/solutions/page.tsx +++ b/src/app/solutions/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Bot, Code2, GitBranch, Network, Workflow} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const SOLUTIONS = [ { icon: Workflow, @@ -48,6 +49,8 @@ const SOLUTIONS = [ ]; export default function SolutionsPage() { + + useHead({ title: 'Command as Service — GitDataAI', description: 'Every action is a versioned command. GitDataAI: where humans and AI agents engineer together via a unified command stream.' }); const navigate = useNavigate(); return ( diff --git a/src/app/solutions/rooms/page.tsx b/src/app/solutions/rooms/page.tsx index df03f89..130958f 100644 --- a/src/app/solutions/rooms/page.tsx +++ b/src/app/solutions/rooms/page.tsx @@ -2,6 +2,7 @@ import {LandingLayout} from '@/components/landing/landing-layout'; import {useNavigate} from 'react-router-dom'; import {Bot, ShieldCheck, Users} from 'lucide-react'; +import {useHead} from '@/hooks/useHead'; const FEATURES = [ {title: 'Command-first Multi-modal', desc: 'Text, code, and structured command data shared simultaneously in a single room.'}, {title: 'Human-in-the-Loop', desc: 'Approve, reject, or modify any agent action before it executes.'}, @@ -12,6 +13,8 @@ const FEATURES = [ ]; export default function SolutionsRoomsPage() { + + useHead({ title: 'Collaborative Rooms — GitDataAI', description: 'Command-first rooms where humans and AI agents execute engineering tasks together via shared command streams.' }); const navigate = useNavigate(); return (