feat: new design

This commit is contained in:
Nik L
2026-04-13 13:09:46 -04:00
parent 14fcaea830
commit b2879e1a5e
34 changed files with 573 additions and 608 deletions

View File

@@ -1,37 +1,46 @@
import type { Metadata } from 'next'
import { Inter, Source_Serif_4 } from 'next/font/google'
import { Geist } from 'next/font/google'
import localFont from 'next/font/local'
import './globals.css'
const inter = Inter({
const geistSans = Geist({
variable: '--font-geist-sans',
subsets: ['latin'],
display: 'swap',
variable: '--font-inter',
})
const sourceSerif = Source_Serif_4({
subsets: ['latin'],
const sourceSerifPro = localFont({
src: [
{
path: '../public/fonts/Source_Serif_4/SourceSerif4-VariableFont_opsz,wght.ttf',
style: 'normal',
},
{
path: '../public/fonts/Source_Serif_4/SourceSerif4-Italic-VariableFont_opsz,wght.ttf',
style: 'italic',
},
],
variable: '--font-source-serif-pro',
weight: '200 900',
display: 'swap',
variable: '--font-source-serif',
style: ['normal', 'italic'],
axes: ['opsz'],
preload: true,
})
export const metadata: Metadata = {
metadataBase: new URL('https://greywall.io'),
title: 'Greywall: Sandbox for AI Agents',
title: 'Greywall | Contained Sandboxing for AI Agents',
description:
'Container-free, default-deny sandboxing with real-time observability for AI agents on Linux and macOS. Five kernel-enforced security layers in one command. Open source.',
'Default-deny sandboxing with real-time observability for AI agents on Linux and macOS. Filesystem, network, and command boundaries stay under your control.',
icons: {
icon: [
{ url: '/icon.svg', type: 'image/svg+xml' },
{ url: '/greyhaven-mark.svg', type: 'image/svg+xml' },
{ url: '/icon-dark-32x32.png', sizes: '32x32', type: 'image/png', media: '(prefers-color-scheme: dark)' },
{ url: '/icon-light-32x32.png', sizes: '32x32', type: 'image/png', media: '(prefers-color-scheme: light)' },
],
apple: '/apple-icon.png',
},
openGraph: {
title: 'Greywall: Sandbox for AI Agents',
description: 'Container-free, default-deny sandboxing with real-time observability for AI agents. Five kernel-enforced security layers in one command.',
title: 'Greywall | Contained Sandboxing for AI Agents',
description: 'Default-deny sandboxing with real-time observability for AI agents on Linux and macOS.',
url: 'https://greywall.io',
siteName: 'Greywall',
type: 'website',
@@ -39,8 +48,8 @@ export const metadata: Metadata = {
},
twitter: {
card: 'summary_large_image',
title: 'Greywall: Sandbox for AI Agents',
description: 'Container-free, default-deny sandboxing with real-time observability for AI agents. Five kernel-enforced security layers in one command.',
title: 'Greywall | Contained Sandboxing for AI Agents',
description: 'Default-deny sandboxing with real-time observability for AI agents on Linux and macOS.',
images: ['/og-image.png'],
},
alternates: {
@@ -56,7 +65,7 @@ const jsonLd = {
'@id': 'https://greyhaven.co/#organization',
name: 'Greyhaven',
url: 'https://greyhaven.co',
logo: { '@type': 'ImageObject', url: 'https://greywall.io/icon.svg' },
logo: { '@type': 'ImageObject', url: 'https://greywall.io/greyhaven-mark.svg' },
sameAs: ['https://github.com/GreyhavenHQ'],
},
{
@@ -71,7 +80,7 @@ const jsonLd = {
'@id': 'https://greywall.io/#software',
name: 'Greywall',
description:
'Container-free, default-deny sandboxing with real-time observability and dynamic controls for AI agents on Linux and macOS.',
'Default-deny sandboxing with real-time observability and dynamic controls for AI agents on Linux and macOS.',
applicationCategory: 'SecurityApplication',
operatingSystem: 'Linux, macOS',
url: 'https://greywall.io',
@@ -107,14 +116,14 @@ export default function RootLayout({
children: React.ReactNode
}>) {
return (
<html lang="en" className={`dark ${inter.variable} ${sourceSerif.variable}`}>
<html lang="en">
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</head>
<body className="font-sans antialiased bg-background text-foreground">
<body className={`${geistSans.variable} ${sourceSerifPro.variable} min-h-dvh flex flex-col`}>
{children}
</body>
</html>