Skip to content

Commit 66ee2a2

Browse files
committed
fixes
1 parent f173984 commit 66ee2a2

8 files changed

Lines changed: 222 additions & 159 deletions

File tree

landing/app/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Metadata } from "next";
2+
import Script from "next/script";
23
import HomeClient from "@/components/HomeClient";
34

45
export const metadata: Metadata = {
@@ -40,7 +41,8 @@ export default function HomePage() {
4041

4142
return (
4243
<>
43-
<script
44+
<Script
45+
id="home-jsonld"
4446
type="application/ld+json"
4547
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
4648
/>

landing/components/ComparisonSection.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
"use client";
22

3-
import { motion } from "framer-motion";
4-
import { Zap, Activity, Timer, ArrowRight, Gauge, Cpu } from "lucide-react";
5-
import { useState, useEffect } from "react";
3+
import { motion, useReducedMotion } from "framer-motion";
64

75
const COMPARISON_METRICS = [
86
{
@@ -32,6 +30,8 @@ const COMPARISON_METRICS = [
3230
];
3331

3432
export default function ComparisonSection() {
33+
const shouldReduceMotion = useReducedMotion();
34+
3535
return (
3636
<section className="py-24 relative overflow-hidden bg-[#09090b]">
3737
{/* Background Grain & Gradients */}
@@ -43,14 +43,14 @@ export default function ComparisonSection() {
4343
<div className="max-w-7xl mx-auto px-6 lg:px-8 relative z-10">
4444
<div className="mb-20 space-y-6 text-center">
4545
<motion.div
46-
initial={{ opacity: 0, scale: 0.9 }}
46+
initial={shouldReduceMotion ? false : { opacity: 0, scale: 0.9 }}
4747
whileInView={{ opacity: 1, scale: 1 }}
4848
className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/5 border border-white/10 text-[9px] font-black text-white uppercase tracking-[0.4em]"
4949
>
5050
Benchmarks
5151
</motion.div>
5252
<motion.h2
53-
initial={{ opacity: 0, y: 20 }}
53+
initial={shouldReduceMotion ? false : { opacity: 0, y: 20 }}
5454
whileInView={{ opacity: 1, y: 0 }}
5555
className="text-6xl lg:text-8xl font-black tracking-[calc(-0.05em)] text-white leading-[0.8]"
5656
>
@@ -61,26 +61,32 @@ export default function ComparisonSection() {
6161
Measured by <span className="text-white font-bold">Pure Gateway Overhead.</span> <br />
6262
Benchmarked under identical hardware and workload conditions.
6363
</p>
64+
<a
65+
href="/docs/performance/benchmarks"
66+
className="inline-flex items-center text-[11px] font-black uppercase tracking-[0.2em] text-cyan-400 hover:text-cyan-300 transition-colors"
67+
>
68+
View benchmark methodology
69+
</a>
6470
</div>
6571

6672
<div className="grid lg:grid-cols-2 gap-8 items-start">
6773
{COMPARISON_METRICS.map((metric, idx) => (
68-
<MetricCard key={metric.id} metric={metric} delay={idx * 0.1} />
74+
<MetricCard key={metric.id} metric={metric} delay={idx * 0.1} shouldReduceMotion={Boolean(shouldReduceMotion)} />
6975
))}
7076
</div>
7177
</div>
7278
</section>
7379
);
7480
}
7581

76-
function MetricCard({ metric, delay }: any) {
82+
function MetricCard({ metric, delay, shouldReduceMotion }: any) {
7783
const maxVal = Math.max(...metric.data.map((d: any) => d.value));
7884

7985
return (
8086
<motion.div
81-
initial={{ opacity: 0, y: 20 }}
87+
initial={shouldReduceMotion ? false : { opacity: 0, y: 20 }}
8288
whileInView={{ opacity: 1, y: 0 }}
83-
transition={{ delay, duration: 0.6 }}
89+
transition={shouldReduceMotion ? { duration: 0 } : { delay, duration: 0.6 }}
8490
className="glass-premium rounded-[3rem] p-12 border border-white/5 relative group overflow-hidden bg-white/[0.01] text-center"
8591
>
8692
<div className="relative z-10 flex flex-col items-center">
@@ -110,9 +116,9 @@ function MetricCard({ metric, delay }: any) {
110116
</div>
111117
<div className="h-2 w-full bg-white/[0.03] rounded-full overflow-hidden border border-white/5 relative">
112118
<motion.div
113-
initial={{ width: 0 }}
119+
initial={shouldReduceMotion ? false : { width: 0 }}
114120
whileInView={{ width: `${Math.max(1, percentage)}%` }}
115-
transition={{ delay: delay + (i * 0.1) + 0.3, duration: 1, ease: "circOut" }}
121+
transition={shouldReduceMotion ? { duration: 0 } : { delay: delay + (i * 0.1) + 0.3, duration: 1, ease: "circOut" }}
116122
className={`h-full rounded-full relative ${item.highlight
117123
? 'bg-gradient-to-r from-cyan-600 to-cyan-400 shadow-[0_0_20px_rgba(6,182,212,0.3)]'
118124
: 'bg-neutral-800'

landing/components/Footer.tsx

Lines changed: 90 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,44 @@
11
"use client";
22

33
import { motion } from "framer-motion";
4-
import { Github, Twitter, Linkedin, Activity } from "lucide-react";
4+
import Image from "next/image";
5+
import Link from "next/link";
6+
import { Twitter, Linkedin } from "lucide-react";
7+
8+
const SOCIAL_LINKS = [
9+
{ name: "Twitter", icon: Twitter, href: "https://x.com/GetHyperionHQ" },
10+
{ name: "LinkedIn", icon: Linkedin, href: "https://www.linkedin.com/company/hyperionhq/" },
11+
];
12+
13+
const productLinks = [
14+
{ label: "Features", href: "/features" },
15+
{ label: "Semantic Caching", href: "/semantic-caching" },
16+
{ label: "Routing", href: "/routing" },
17+
{ label: "Security", href: "/security" },
18+
{ label: "Pricing", href: "/pricing" },
19+
];
20+
21+
const resourceLinks = [
22+
{ label: "AI Gateway", href: "/ai-gateway" },
23+
{ label: "LLM Gateway", href: "/llm-gateway" },
24+
{ label: "Performance", href: "/blog/go-gateway-performance" },
25+
];
26+
27+
const useCaseLinks = [
28+
{ label: "All Use Cases", href: "/use-cases" },
29+
{ label: "Chatbots", href: "/use-cases/chatbots" },
30+
{ label: "SaaS", href: "/use-cases/saas" },
31+
{ label: "Healthcare", href: "/use-cases/healthcare" },
32+
{ label: "Internal Tools", href: "/use-cases/internal-tools" },
33+
];
34+
35+
const companyLinks = [
36+
{ label: "About Us", href: "/about" },
37+
{ label: "Contact Us", href: "/contact" },
38+
{ label: "Blog", href: "/blog" },
39+
{ label: "FAQs", href: "/faqs" },
40+
{ label: "Privacy", href: undefined },
41+
];
542

643
export default function Footer() {
744
return (
@@ -12,27 +49,41 @@ export default function Footer() {
1249
<div className="grid grid-cols-1 md:grid-cols-6 gap-8 lg:gap-12">
1350
{/* Brand Column */}
1451
<div className="col-span-1 md:col-span-2 border-r border-white/5 pr-8 lg:pr-12">
15-
<div className="flex items-center space-x-3 mb-6 group cursor-pointer brightness-125 drop-shadow-[0_0_20px_rgba(255,255,255,0.3)] hover:brightness-150 transition-all duration-300">
52+
<Link href="/" className="flex items-center space-x-3 mb-6 group cursor-pointer brightness-125 drop-shadow-[0_0_20px_rgba(255,255,255,0.3)] hover:brightness-150 transition-all duration-300">
1653
<div className="relative w-8 h-8">
17-
<img src="/HyperionLogo3.png" alt="Hyperion" className="w-full h-full object-contain" />
54+
<Image src="/HyperionLogo3.png" alt="Hyperion" width={32} height={32} className="w-full h-full object-contain" />
1855
</div>
1956
<span className="text-xl font-bold bg-gradient-to-r from-white to-white/70 bg-clip-text text-transparent drop-shadow-[0_0_30px_rgba(255,255,255,0.7)]">
2057
Hyperion
2158
</span>
22-
</div>
59+
</Link>
2360
<p className="text-sm text-neutral-400 leading-relaxed mb-6 max-w-sm">
2461
Empowering the next generation of AI infrastructure. Microsecond gateway latency, enterprise-grade security.
2562
</p>
2663
<div className="flex space-x-3">
27-
{[Twitter, Linkedin].map((Icon, i) => (
28-
<motion.a
29-
key={i}
30-
href="#"
31-
whileHover={{ y: -2, color: '#10b981' }}
32-
className="p-2 rounded-lg bg-white/[0.03] border border-white/5 text-neutral-500 hover:text-white transition-colors"
33-
>
34-
<Icon size={16} />
35-
</motion.a>
64+
{SOCIAL_LINKS.map(({ name, icon: Icon, href }) => (
65+
href ? (
66+
<motion.a
67+
key={name}
68+
href={href}
69+
target="_blank"
70+
rel="noopener noreferrer"
71+
whileHover={{ y: -2, color: '#10b981' }}
72+
className="p-2 rounded-lg bg-white/[0.03] border border-white/5 text-neutral-500 hover:text-white transition-colors"
73+
aria-label={name}
74+
>
75+
<Icon size={16} />
76+
</motion.a>
77+
) : (
78+
<span
79+
key={name}
80+
className="p-2 rounded-lg bg-white/[0.03] border border-white/5 text-neutral-600 cursor-not-allowed"
81+
aria-label={`${name} coming soon`}
82+
title={`${name} coming soon`}
83+
>
84+
<Icon size={16} />
85+
</span>
86+
)
3687
))}
3788
</div>
3889
</div>
@@ -41,11 +92,11 @@ export default function Footer() {
4192
<div>
4293
<h4 className="text-sm font-black text-white uppercase tracking-[0.2em] mb-4">Product</h4>
4394
<ul className="space-y-2">
44-
{['Features', 'Semantic Caching', 'Routing', 'Security', 'Pricing'].map((link) => (
45-
<li key={link}>
46-
<a href={link === 'Features' ? '/features' : link === 'Semantic Caching' ? '/semantic-caching' : link === 'Routing' ? '/routing' : link === 'Security' ? '/security' : link === 'Pricing' ? '/pricing' : '#'} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
47-
{link}
48-
</a>
95+
{productLinks.map((link) => (
96+
<li key={link.label}>
97+
<Link href={link.href} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
98+
{link.label}
99+
</Link>
49100
</li>
50101
))}
51102
</ul>
@@ -55,11 +106,11 @@ export default function Footer() {
55106
<div>
56107
<h4 className="text-sm font-black text-white uppercase tracking-[0.2em] mb-4">Resources</h4>
57108
<ul className="space-y-2">
58-
{['AI Gateway', 'LLM Gateway', 'Performance'].map((link) => (
59-
<li key={link}>
60-
<a href={link === 'AI Gateway' ? '/ai-gateway' : link === 'LLM Gateway' ? '/llm-gateway' : link === 'Performance' ? '/blog/go-gateway-performance' : '#'} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
61-
{link}
62-
</a>
109+
{resourceLinks.map((link) => (
110+
<li key={link.label}>
111+
<Link href={link.href} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
112+
{link.label}
113+
</Link>
63114
</li>
64115
))}
65116
</ul>
@@ -69,17 +120,11 @@ export default function Footer() {
69120
<div>
70121
<h4 className="text-sm font-black text-white uppercase tracking-[0.2em] mb-4">Use Cases</h4>
71122
<ul className="space-y-2">
72-
{['All Use Cases', 'Chatbots', 'SaaS', 'Healthcare', 'Internal Tools'].map((link) => (
73-
<li key={link}>
74-
<a href={
75-
link === 'All Use Cases' ? '/use-cases' :
76-
link === 'Chatbots' ? '/use-cases/chatbots' :
77-
link === 'SaaS' ? '/use-cases/saas' :
78-
link === 'Healthcare' ? '/use-cases/healthcare' :
79-
link === 'Internal Tools' ? '/use-cases/internal-tools' : '#'
80-
} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
81-
{link}
82-
</a>
123+
{useCaseLinks.map((link) => (
124+
<li key={link.label}>
125+
<Link href={link.href} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
126+
{link.label}
127+
</Link>
83128
</li>
84129
))}
85130
</ul>
@@ -89,11 +134,17 @@ export default function Footer() {
89134
<div>
90135
<h4 className="text-sm font-black text-white uppercase tracking-[0.2em] mb-4">Company</h4>
91136
<ul className="space-y-2">
92-
{['About Us', 'Contact Us', 'Blog', 'FAQs', 'Privacy'].map((link) => (
93-
<li key={link}>
94-
<a href={link === 'Blog' ? '/blog' : link === 'About Us' ? '/about' : link === 'Contact Us' ? '/contact' : link === 'FAQs' ? '/faqs' : '#'} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
95-
{link}
96-
</a>
137+
{companyLinks.map((link) => (
138+
<li key={link.label}>
139+
{link.href ? (
140+
<Link href={link.href} className="text-sm text-neutral-400 hover:text-emerald-400 transition-colors">
141+
{link.label}
142+
</Link>
143+
) : (
144+
<span className="text-sm text-neutral-500 cursor-not-allowed" title="Coming soon">
145+
{link.label}
146+
</span>
147+
)}
97148
</li>
98149
))}
99150
</ul>

0 commit comments

Comments
 (0)