"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 ( {`${name} ) } 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 (

{title}

{description}

) } 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 (

Every leading model, one gateway.

{customerLogos.map((logo) => (
{`${logo.name}
))}
{"> 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}
))}
8 regions online
{[ { 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}
))}
{[ { 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) => )}
) }