From 0a63bcab64d969c04534ecc09a2c2ebf800cc716 Mon Sep 17 00:00:00 2001 From: Jens Astrup Date: Tue, 15 Sep 2026 17:38:36 -0400 Subject: [PATCH 1/2] Refactor global styles and layout components - Updated font variables in globals.css to use Instrument Sans and IBM Plex Mono. - Added new color variables for branding and body text. - Modified layout.tsx to reflect new font usage and removed unused components. - Reorganized page.tsx to include new Header, Hero, and ProjectsSection components, while removing the AnimatedProductSection and FixedFooterLinks. - Introduced new ProjectCard and ProjectsSection components for better project display. - Removed deprecated components and hooks related to product display. This update enhances the overall design and structure of the application. --- src/app/globals.css | 35 +++-- src/app/layout.tsx | 19 ++- src/app/page.tsx | 76 ++--------- src/components/animated-product-section.tsx | 15 --- src/components/fixed-footer-links.tsx | 50 ------- src/components/footer.tsx | 56 ++++---- src/components/header.tsx | 57 +++----- src/components/hero.tsx | 24 ++-- src/components/product-card.tsx | 138 -------------------- src/components/product-grid.tsx | 37 ------ src/components/project-card.tsx | 33 +++++ src/components/projects-section.tsx | 23 ++++ src/components/scroll-indicator.tsx | 21 --- src/config/links.ts | 5 +- src/config/products.ts | 34 ++--- src/hooks/use-intersection-observer.ts | 58 -------- src/types/css.d.ts | 4 + 17 files changed, 179 insertions(+), 506 deletions(-) delete mode 100644 src/components/animated-product-section.tsx delete mode 100644 src/components/fixed-footer-links.tsx delete mode 100644 src/components/product-card.tsx delete mode 100644 src/components/product-grid.tsx create mode 100644 src/components/project-card.tsx create mode 100644 src/components/projects-section.tsx delete mode 100644 src/components/scroll-indicator.tsx delete mode 100644 src/hooks/use-intersection-observer.ts create mode 100644 src/types/css.d.ts diff --git a/src/app/globals.css b/src/app/globals.css index e1ca93a..5430d79 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -6,8 +6,13 @@ @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); + --font-sans: var(--font-instrument-sans), system-ui, sans-serif; + --font-mono: var(--font-ibm-plex-mono), ui-monospace, monospace; + --color-brand: var(--brand); + --color-brand-hover: var(--brand-hover); + --color-brand-soft: var(--brand-soft); + --color-brand-softer: var(--brand-softer); + --color-body-muted: var(--body-muted); --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); @@ -45,10 +50,10 @@ :root { --radius: 0.625rem; - --background: oklch(0 0 0); - --foreground: oklch(1 0 0); - --card: oklch(0.15 0 0); - --card-foreground: oklch(1 0 0); + --background: #08080a; + --foreground: #f4f4f6; + --card: #101013; + --card-foreground: #f4f4f6; --popover: oklch(0.15 0 0); --popover-foreground: oklch(1 0 0); --primary: oklch(0.929 0.013 255.508); @@ -56,13 +61,18 @@ --secondary: oklch(0.279 0.041 260.031); --secondary-foreground: oklch(1 0 0); --muted: oklch(0.279 0.041 260.031); - --muted-foreground: oklch(0.704 0.04 256.788); + --muted-foreground: #9a9aa2; --accent: oklch(0.279 0.041 260.031); --accent-foreground: oklch(1 0 0); --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); + --border: rgb(255 255 255 / 8%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.551 0.027 264.364); + --brand: #5b6cf0; + --brand-hover: #6e7df5; + --brand-soft: #8e9bff; + --brand-softer: #b4bdff; + --body-muted: #a8a8b0; --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); @@ -119,4 +129,13 @@ body { @apply bg-background text-foreground; } + ::selection { + background: var(--brand); + color: #ffffff; + } + @media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } + } } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9dbdd69..1e1db29 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,20 +1,21 @@ import { Analytics } from '@vercel/analytics/next' import type { Metadata } from 'next' -import { Geist, Geist_Mono } from 'next/font/google' +import { IBM_Plex_Mono, Instrument_Sans } from 'next/font/google' import { Widget as ProductlaneWidget } from '@/components/productlane/widget' import './globals.css' -const geistSans = Geist({ - variable: '--font-geist-sans', +const instrumentSans = Instrument_Sans({ + variable: '--font-instrument-sans', subsets: ['latin'], }) -const geistMono = Geist_Mono({ - variable: '--font-geist-mono', +const ibmPlexMono = IBM_Plex_Mono({ + variable: '--font-ibm-plex-mono', subsets: ['latin'], + weight: ['400', '500'], }) export const metadata: Metadata = { @@ -22,15 +23,11 @@ export const metadata: Metadata = { description: 'Developer tools for the modern era', } -function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode -}>): React.ReactNode { +function RootLayout({children}: Readonly<{children: React.ReactNode}>): React.ReactNode { return ( {children} diff --git a/src/app/page.tsx b/src/app/page.tsx index b051c7c..906bb5e 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,11 +1,9 @@ import type { Metadata } from 'next' -import Image from 'next/image' -import { AnimatedProductSection } from '@/components/animated-product-section' -import { FixedFooterLinks } from '@/components/fixed-footer-links' import { Footer } from '@/components/footer' -import { ScrollIndicator } from '@/components/scroll-indicator' -import { Button } from '@/components/ui/button' +import { Header } from '@/components/header' +import { Hero } from '@/components/hero' +import { ProjectsSection } from '@/components/projects-section' const APP_NAME = 'Void Works' @@ -103,20 +101,6 @@ export default function Home(): React.ReactNode { } const productSchemas = [ - { - '@context': 'https://schema.org', - '@type': 'SoftwareApplication', - 'name': 'Shortcut Assistant', - 'applicationCategory': 'BrowserApplication', - 'operatingSystem': 'Chrome', - 'description': 'Enhance your browsing experience with powerful keyboard shortcuts and productivity tools.', - 'url': 'https://chromewebstore.google.com/detail/shortcut-assistant/kmdlofehocppnlkpokdbiaalcelhedef', - 'offers': { - '@type': 'Offer', - 'price': '0', - 'priceCurrency': 'USD', - }, - }, { '@context': 'https://schema.org', '@type': 'MobileApplication', @@ -142,7 +126,7 @@ export default function Home(): React.ReactNode { ] return ( -
+
{/* Structured Data */}