Add theme toggle, hero snippet, and reorganize homepage components

- Set up next-themes with a light/dark toggle in the header and move all
  sections onto theme tokens; dark mode stays pure black
- Replace the hero terminal line with the AI Elements Snippet component
- Restructure components into layout/, sections/, and shared/ with
  site-wide config in lib/site.ts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Rami Bitar
2026-09-18 09:29:12 -04:00
co-authored by Claude Fable 5.1
parent a40edbffa9
commit 07a99b441c
28 changed files with 812 additions and 437 deletions
+1 -1
View File
@@ -118,7 +118,7 @@
}
.dark {
--background: oklch(0.145 0 0);
--background: oklch(0 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
+15 -6
View File
@@ -1,10 +1,12 @@
import type { Metadata } from 'next';
import { ThemeProvider } from '@/components/layout/theme-provider';
import { siteConfig } from '@/lib/site';
import './globals.css';
export const metadata: Metadata = {
title: 'Vertex — Build. Preview. Ship.',
description:
'Vertex gives frontend teams the tooling and cloud infrastructure to build, preview, and ship a faster web.',
title: siteConfig.title,
description: siteConfig.description,
};
export default function RootLayout({
@@ -13,9 +15,16 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
<html lang="en" className="dark h-full antialiased">
<body className="min-h-full flex flex-col bg-black text-white font-sans selection:bg-white selection:text-black">
{children}
<html lang="en" suppressHydrationWarning className="h-full antialiased">
<body className="min-h-full flex flex-col bg-background text-foreground font-sans selection:bg-foreground selection:text-background">
<ThemeProvider
attribute="class"
defaultTheme="dark"
enableSystem
disableTransitionOnChange
>
{children}
</ThemeProvider>
</body>
</html>
);
+15 -15
View File
@@ -1,23 +1,23 @@
import { Cta } from '@/components/site/cta';
import { Features } from '@/components/site/features';
import { Footer } from '@/components/site/footer';
import { Hero } from '@/components/site/hero';
import { LogoCloud } from '@/components/site/logo-cloud';
import { Navbar } from '@/components/site/navbar';
import { Stats } from '@/components/site/stats';
import { SiteFooter } from '@/components/layout/site-footer';
import { SiteHeader } from '@/components/layout/site-header';
import { CtaSection } from '@/components/sections/cta-section';
import { FeaturesSection } from '@/components/sections/features-section';
import { HeroSection } from '@/components/sections/hero-section';
import { LogosSection } from '@/components/sections/logos-section';
import { StatsSection } from '@/components/sections/stats-section';
export default function Home() {
return (
<>
<Navbar />
<main>
<Hero />
<LogoCloud />
<Features />
<Stats />
<Cta />
<SiteHeader />
<main id="top">
<HeroSection />
<LogosSection />
<FeaturesSection />
<StatsSection />
<CtaSection />
</main>
<Footer />
<SiteFooter />
</>
);
}