"use client"
import Image from "next/image"
import { useState } from "react"
import {
Activity,
ArrowRight,
Check,
ChevronDown,
ChevronRight,
CircleCheck,
Code2,
Gauge,
LockKeyhole,
Route,
ShieldCheck,
Workflow,
Zap,
} from "lucide-react"
import { ThemeToggle } from "@/components/theme-toggle"
import { UsageChart } from "@/components/usage-chart"
import { AnimatedList } from "@/components/ui/animated-list"
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"
// Original SVG artwork sourced from https://svgl.app.
const integrations = [
{ name: "Supabase", src: "/logos/integrations/supabase.svg" },
{ name: "Notion", src: "/logos/integrations/notion.svg" },
{ name: "Figma", src: "/logos/integrations/figma.svg" },
{ name: "Dropbox", src: "/logos/integrations/dropbox.svg" },
{ name: "Gmail", src: "/logos/integrations/gmail.svg" },
{ name: "Slack", src: "/logos/integrations/slack.svg" },
{ name: "Google Drive", src: "/logos/integrations/google-drive.svg" },
{ name: "GitHub", src: "/logos/integrations/github.svg" },
]
const customerLogos = [
{ name: "OpenAI", src: "/logos/openai.svg", width: 110, height: 31 },
{ name: "Retool", src: "/logos/retool.svg", width: 113, height: 25 },
{ name: "Stripe", src: "/logos/stripe.svg", width: 73, height: 31 },
{ name: "Wise", src: "/logos/wise.svg", width: 96, height: 23 },
{ name: "Tailwind CSS", src: "/logos/tailwindcss.svg", width: 262, height: 33, className: "w-full max-w-[158px] brightness-0" },
{ name: "Medium", src: "/logos/medium.svg", width: 132, height: 21 },
{ name: "Next.js", src: "/logos/nextjs.svg", width: 394, height: 80 },
{ name: "Linear", src: "/logos/linear.svg", width: 122, height: 31 },
]
const routingEvents = [
{
icon: ,
title: "Routed to Claude Sonnet",
meta: "342ms · 8.2k tokens",
accent: "bg-blue-600/15 text-blue-600 dark:text-blue-400",
},
{
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 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 VertexMark({ className }: { className?: string }) {
return (
)
}
function Brand({ compact = false }: { compact?: boolean }) {
return (
{!compact && (
Vertex
)}
)
}
function IntegrationMark({ src, name }: { src: string; name: string }) {
return (
)
}
function SectionHeading({
eyebrow,
title,
description,
className,
}: {
eyebrow: string
title: string
description: string
className?: string
}) {
return (
{eyebrow}
{title}
{description}
)
}
function FeatureCopy({
title,
description,
}: {
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 (
{[
["Products", "#features"],
["Models", "#models"],
["Features", "#features"],
["Pricing", "#pricing"],
["Docs", "#developers"],
].map(([label, href]) => (
{label}
{label === "Products" && }
))}
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.
Every leading model,
one gateway.
{customerLogos.map((logo) => (
))}
{"> 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.
{integrations.slice(0, 4).map((integration) => (
))}
{integrations.slice(4).map((integration) => (
))}
{routingEvents.map((event) => (
{event.icon}
{event.title}
{event.meta}
))}
{[
{
icon: Code2,
title: "Change one base URL",
text: "Keep your existing OpenAI-compatible SDK, payloads, and streaming logic.",
},
{
icon: Workflow,
title: "Set a routing policy",
text: "Choose a model directly or let Vertex optimize for cost, quality, or latency.",
},
{
icon: Gauge,
title: "Observe every request",
text: "Trace performance and spend across models, applications, and environments.",
},
].map((step, index) => (
{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-sm 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-sm 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.name}
{plan.popular && (
Most popular
)}
{plan.price}
{plan.cadence && {plan.cadence} }
{plan.description}
{plan.action}
{plan.features.map((feature) => (
{feature}
))}
))}
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.
)
}