| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { Link } from '@tanstack/react-router'
- import { ArrowRight } from 'lucide-react'
- import { useTranslation } from 'react-i18next'
- import { useSystemConfig } from '@/hooks/use-system-config'
- import { Button } from '@/components/ui/button'
- import { HeroTerminalDemo } from '../hero-terminal-demo'
- interface HeroProps {
- className?: string
- isAuthenticated?: boolean
- }
- export function Hero(props: HeroProps) {
- const { t } = useTranslation()
- const { systemName } = useSystemConfig()
- return (
- <section className='relative z-10 flex flex-col items-center overflow-hidden px-6 pt-28 pb-16 md:pt-36 md:pb-24'>
- {/* Radial gradient background */}
- <div
- aria-hidden
- className='pointer-events-none absolute inset-0 -z-10 opacity-25 dark:opacity-[0.12]'
- style={{
- background: [
- 'radial-gradient(ellipse 60% 50% at 20% 20%, oklch(0.72 0.18 250 / 80%) 0%, transparent 70%)',
- 'radial-gradient(ellipse 50% 40% at 80% 15%, oklch(0.65 0.15 200 / 60%) 0%, transparent 70%)',
- 'radial-gradient(ellipse 40% 35% at 40% 80%, oklch(0.70 0.12 280 / 40%) 0%, transparent 70%)',
- ].join(', '),
- }}
- />
- {/* Grid pattern */}
- <div
- aria-hidden
- className='absolute inset-0 -z-10 bg-[linear-gradient(to_right,var(--border)_1px,transparent_1px),linear-gradient(to_bottom,var(--border)_1px,transparent_1px)] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_30%,black_20%,transparent_100%)] bg-[size:4rem_4rem] opacity-[0.08]'
- />
- <div className='flex max-w-3xl flex-col items-center text-center'>
- <h1
- className='landing-animate-fade-up text-[clamp(2rem,5.5vw,3.5rem)] leading-[1.15] font-bold tracking-tight'
- style={{ animationDelay: '0ms' }}
- >
- {t('Unified API Gateway for')}
- <br />
- <span className='bg-gradient-to-r from-blue-400 via-violet-400 to-purple-500 bg-clip-text text-transparent'>
- {t('All Your AI Models')}
- </span>
- </h1>
- <p
- className='landing-animate-fade-up text-muted-foreground/80 mt-5 max-w-lg text-base leading-relaxed opacity-0 md:text-lg'
- style={{ animationDelay: '80ms' }}
- >
- {systemName}{' '}
- {t(
- 'is an open-source AI API gateway for self-hosted deployments. Connect multiple upstream services, manage models, keys, quotas, logs, and routing policies in one place.'
- )}
- </p>
- <div
- className='landing-animate-fade-up mt-8 flex items-center gap-3 opacity-0'
- style={{ animationDelay: '160ms' }}
- >
- {props.isAuthenticated ? (
- <Button className='group rounded-lg' asChild>
- <Link to='/dashboard'>
- {t('Go to Dashboard')}
- <ArrowRight className='ml-1 size-3.5 transition-transform duration-200 group-hover:translate-x-0.5' />
- </Link>
- </Button>
- ) : (
- <>
- <Button className='group rounded-lg' asChild>
- <Link to='/sign-up'>
- {t('Get Started')}
- <ArrowRight className='ml-1 size-3.5 transition-transform duration-200 group-hover:translate-x-0.5' />
- </Link>
- </Button>
- <Button
- variant='outline'
- className='border-border/50 hover:border-border hover:bg-muted/50 rounded-lg'
- asChild
- >
- <Link to='/pricing'>{t('View Pricing')}</Link>
- </Button>
- </>
- )}
- </div>
- </div>
- <div
- className='landing-animate-fade-up w-full opacity-0'
- style={{ animationDelay: '300ms' }}
- >
- <HeroTerminalDemo />
- </div>
- </section>
- )
- }
|