spb/internetpressure
Public
TypeScript 36.3%
Python 31.8%
Go 18%
JavaScript 9.8%
Shell 1.9%
SQL 1.4%
CSS 0.5%
1import type { Metadata, Viewport } from 'next';2import { GeistMono } from 'geist/font/mono';3import { GeistSans } from 'geist/font/sans';4import './globals.css';5import { TimeProvider } from '@/lib/time';6import { DESCRIPTION, SITE_NAME, SITE_URL, TAGLINE } from '@/lib/site';78export const metadata: Metadata = {9 metadataBase: new URL(SITE_URL),10 title: { default: `${SITE_NAME} — ${TAGLINE}`, template: `%s · ${SITE_NAME}` },11 description: DESCRIPTION,12 applicationName: SITE_NAME,13 robots: { index: true, follow: true },14 alternates: { canonical: '/' },15 openGraph: { type: 'website', siteName: SITE_NAME, url: SITE_URL, title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },16 twitter: { card: 'summary_large_image', title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },17 authors: [{ name: 'Simon-Pierre Boucher', url: 'mailto:contact@spboucher.ai' }],18 creator: 'Simon-Pierre Boucher',19 publisher: 'MacLustr (www.maclustr.io)',20 // icons: Next file conventions in src/app — icon.svg, icon.png, apple-icon.png, favicon.ico (generated by scripts/brand.py)21};2223export const viewport: Viewport = {24 width: 'device-width',25 initialScale: 1,26 viewportFit: 'cover',27 themeColor: '#070A0F',28 colorScheme: 'dark',29};3031export default function RootLayout({ children }: { children: React.ReactNode }) {32 return (33 <html lang="en" className={`dark ${GeistSans.variable} ${GeistMono.variable} h-full antialiased`}>34 <body className="flex min-h-full flex-col">35 <a href="#main" className="sr-only focus:not-sr-only focus:fixed focus:left-3 focus:top-3 focus:z-[200] focus:rounded-[3px] focus:bg-accent focus:px-3 focus:py-2 focus:text-sm focus:text-bg">36 Skip to content37 </a>38 <TimeProvider>{children}</TimeProvider>39 </body>40 </html>41 );42}43