"use client"
import { useState } from "react"
import {
Activity,
ArrowRight,
Check,
ChevronRight,
CircleCheck,
Code2,
Gauge,
Globe2,
LockKeyhole,
Network,
Route,
ShieldCheck,
Sparkles,
Waypoints,
Workflow,
Zap,
} from "lucide-react"
import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"
import { ThemeToggle } from "@/components/theme-toggle"
import { AnimatedList } from "@/components/ui/animated-list"
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
type ChartConfig,
} from "@/components/ui/chart"
import { FlickeringGrid } from "@/components/ui/flickering-grid"
import { Globe } from "@/components/ui/globe"
import { Marquee } from "@/components/ui/marquee"
import { OrbitingCircles } from "@/components/ui/orbiting-circles"
import { Ripple } from "@/components/ui/ripple"
import {
AnimatedSpan,
Terminal,
TypingAnimation,
} from "@/components/ui/terminal"
import { cn } from "@/lib/utils"
const providers = [
{ name: "OpenAI", mark: "OA" },
{ name: "Anthropic", mark: "A" },
{ name: "Gemini", mark: "G" },
{ name: "Meta", mark: "M" },
{ name: "Mistral", mark: "MI" },
{ name: "xAI", mark: "x" },
{ name: "Cohere", mark: "C" },
{ name: "DeepSeek", mark: "DS" },
]
const routingEvents = [
{
icon: ,
title: "Routed to Claude Sonnet",
meta: "342ms · 8.2k tokens",
accent: "bg-violet-500/15 text-violet-500",
},
{
icon: ,
title: "Prompt cache hit",
meta: "Saved $0.018 · 42ms",
accent: "bg-amber-500/15 text-amber-500",
},
{
icon: ,
title: "Latency policy applied",
meta: "Gemini Flash · 118ms",
accent: "bg-blue-500/15 text-blue-500",
},
{
icon: ,
title: "Fallback completed",
meta: "OpenAI → Mistral · 621ms",
accent: "bg-emerald-500/15 text-emerald-500",
},
{
icon: ,
title: "Guardrail passed",
meta: "No sensitive data detected",
accent: "bg-cyan-500/15 text-cyan-500",
},
]
const usageData = [
{ time: "08:00", cost: 28, latency: 54 },
{ time: "10:00", cost: 35, latency: 48 },
{ time: "12:00", cost: 31, latency: 64 },
{ time: "14:00", cost: 48, latency: 57 },
{ time: "16:00", cost: 41, latency: 72 },
{ time: "18:00", cost: 57, latency: 66 },
{ time: "20:00", cost: 52, latency: 82 },
]
const chartConfig = {
cost: { label: "Requests", color: "#2563eb" },
latency: { label: "Latency", color: "#8b5cf6" },
} satisfies ChartConfig
const reviews = [
{
initials: "MK",
name: "Maya Kim",
role: "AI Platform Lead",
quote:
"Vertex gave us one reliable interface for every model experiment. We stopped rebuilding provider integrations and started shipping.",
},
{
initials: "JL",
name: "Jon Bell",
role: "Founding Engineer",
quote:
"Fallback routing turned model outages into a non-event. Our application stays fast even when a provider is under pressure.",
},
{
initials: "AR",
name: "Ari Rao",
role: "VP of Engineering",
quote:
"The unified cost view finally made inference spend understandable across teams, providers, and environments.",
},
{
initials: "SC",
name: "Sofia Chen",
role: "Product Engineer",
quote:
"We changed one base URL and had access to the models we needed. The developer experience is exactly that simple.",
},
{
initials: "OT",
name: "Owen Taylor",
role: "Infrastructure Director",
quote:
"Vertex lets our developers move quickly while the platform team keeps control of budgets, policies, and reliability.",
},
{
initials: "NB",
name: "Nina Brooks",
role: "Applied AI Engineer",
quote:
"Model comparisons that used to take days now take minutes. The same payload works everywhere we want to test.",
},
]
const globeConfig = {
width: 800,
height: 800,
onRender: () => {},
devicePixelRatio: 2,
phi: 0,
theta: 0.28,
dark: 1,
diffuse: 1.1,
mapSamples: 12000,
mapBrightness: 4.5,
baseColor: [0.05, 0.12, 0.32] as [number, number, number],
markerColor: [0.15, 0.46, 1] as [number, number, number],
glowColor: [0.08, 0.18, 0.48] as [number, number, number],
markers: [
{ location: [37.7749, -122.4194] as [number, number], size: 0.08 },
{ location: [40.7128, -74.006] as [number, number], size: 0.06 },
{ location: [51.5072, -0.1276] as [number, number], size: 0.07 },
{ location: [48.8566, 2.3522] as [number, number], size: 0.05 },
{ location: [1.3521, 103.8198] as [number, number], size: 0.08 },
{ location: [35.6762, 139.6503] as [number, number], size: 0.06 },
{ location: [-33.8688, 151.2093] as [number, number], size: 0.05 },
{ location: [-23.5505, -46.6333] as [number, number], size: 0.06 },
],
}
function Brand({ compact = false }: { compact?: boolean }) {
return (
{!compact && (
Vertex
)}
)
}
function ProviderMark({ mark, name, small = false }: { mark: string; name: string; small?: boolean }) {
return (
{mark}
)
}
function SectionHeading({
eyebrow,
title,
description,
}: {
eyebrow: string
title: string
description: string
}) {
return (
{eyebrow}
{title}
{description}
)
}
function FeatureCopy({
icon: Icon,
title,
description,
}: {
icon: React.ComponentType<{ className?: string }>
title: string
description: string
}) {
return (
)
}
function ReviewCard({ review }: { review: (typeof reviews)[number] }) {
return (
“{review.quote}”
{review.initials}
{review.name}
{review.role}
)
}
export function VertexLandingPage() {
const [annual, setAnnual] = useState(false)
const firstReviews = reviews.slice(0, 3)
const secondReviews = reviews.slice(3)
return (
{[
["Models", "#models"],
["Features", "#features"],
["Developers", "#developers"],
["Pricing", "#pricing"],
].map(([label, href]) => (
{label}
))}
The unified AI gateway
One API for every
AI model.
Route, optimize, and observe every model request through one OpenAI-compatible endpoint built for production.
Your application
POST /v1/chat/completions
Vertex Gateway
Routing by latency
Best available model
{providers.slice(0, 4).map((provider) => (
))}
Every leading model, one gateway
{providers.map((provider) => (
))}
Switch models without rewriting your stack.
One stable API gives your team the freedom to change providers, enforce policies, and optimize every request behind the scenes.
{"> curl https://api.vertex.ai/v1/chat/completions \\"}
{` -d '{ "model": "vertex/auto", "messages": [...] }'`}
→ evaluating 14 available models
→ route selected: anthropic/claude-sonnet
✓ response streamed in 342ms
One endpoint. Any model. No rewrites.
{providers.slice(0, 4).map((provider) => (
))}
{providers.slice(4).map((provider) => (
))}
{routingEvents.map((event) => (
{event.icon}
{event.title}
{event.meta}
))}
{[
{
number: "01",
icon: Code2,
title: "Change one base URL",
text: "Keep your existing OpenAI-compatible SDK, payloads, and streaming logic.",
},
{
number: "02",
icon: Workflow,
title: "Set a routing policy",
text: "Choose a model directly or let Vertex optimize for cost, quality, or latency.",
},
{
number: "03",
icon: Gauge,
title: "Observe every request",
text: "Trace performance and spend across models, applications, and environments.",
},
].map((step, index) => (
{step.number}
{step.title}
{step.text}
))}
Reliability built into every request.
Production-grade controls keep your workloads available, observable, and protected as they scale.
{[
["99.99%", "Gateway uptime"],
["8", "Global regions"],
["< 20ms", "Routing overhead"],
].map(([value, label], index) => (
{value}
{label}
))}
setAnnual(false)}
className={cn("rounded-full px-4 py-1.5 text-xs font-medium transition", !annual ? "bg-background text-foreground shadow-sm" : "text-muted-foreground")}
>
Monthly
setAnnual(true)}
className={cn("rounded-full px-4 py-1.5 text-xs font-medium transition", annual ? "bg-background text-foreground shadow-sm" : "text-muted-foreground")}
>
Annual −20%
{[
{
name: "Developer",
price: "$0",
cadence: "/ month",
description: "For prototypes, side projects, and individual builders.",
action: "Start building",
popular: false,
features: ["Pay-as-you-go model usage", "All model providers", "Basic usage analytics", "Community support"],
},
{
name: "Team",
price: annual ? "$39" : "$49",
cadence: "/ month",
description: "For teams running reliable AI products in production.",
action: "Start 14-day trial",
popular: true,
features: ["Everything in Developer", "Routing and fallback policies", "Team budgets and alerts", "90-day request analytics", "Priority support"],
},
{
name: "Enterprise",
price: "Custom",
cadence: "",
description: "For organizations that need security and scale.",
action: "Talk to sales",
popular: false,
features: ["Everything in Team", "SAML SSO and audit logs", "Custom retention and regions", "Dedicated capacity", "Enterprise SLA"],
},
].map((plan) => (
{plan.popular && (
Most popular
)}
{plan.name}
{plan.price}
{plan.cadence && {plan.cadence} }
{plan.description}
{plan.action}
{plan.features.map((feature) => (
{feature}
))}
))}
Model usage is billed separately at transparent provider rates. No long-term contracts.
Early access feedback
Built for teams shipping AI
{firstReviews.map((review) => )}
{secondReviews.map((review) => )}
Build on every model.
Ship through one API.
Your models will change. Your infrastructure doesn’t have to.
)
}