SPB Git

spb/worthdoing Public

Autonomous investigation agent that discovers, challenges, and ranks things genuinely worth doing — Claude + Firecrawl, Next.js 16, PostgreSQL

TypeScript 91.5% SQL 5.8% CSS 2.2%
3.5 KB · 88 lines tsx
Raw Blame History
1/**2 * WorthDoing.ai3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 * File: src/app/layout.tsx6 * Description: Root layout — fonts (Fraunces display, Instrument Sans body, IBM Plex Mono telemetry), site chrome.7 */8import type { Metadata } from "next";9import { Fraunces, Instrument_Sans, IBM_Plex_Mono } from "next/font/google";10import Link from "next/link";11import "./globals.css";1213const display = Fraunces({14  variable: "--font-display",15  subsets: ["latin"],16  axes: ["opsz", "SOFT", "WONK"],17});1819const body = Instrument_Sans({20  variable: "--font-body",21  subsets: ["latin"],22});2324const tele = IBM_Plex_Mono({25  variable: "--font-tele",26  subsets: ["latin"],27  weight: ["400", "500"],28});2930export const metadata: Metadata = {31  title: "WorthDoing.ai — find what should exist",32  description:33    "An autonomous investigation agent that discovers, challenges, and ranks things genuinely worth doing. Google finds what exists. WorthDoing finds what should.",34  metadataBase: new URL(process.env.PUBLIC_BASE_URL ?? "https://www.worthdoing.ai"),35};3637export default function RootLayout({ children }: LayoutProps<"/">) {38  return (39    <html lang="en" className={`${display.variable} ${body.variable} ${tele.variable} h-full antialiased`}>40      <body className="min-h-full flex flex-col">41        <header className="sticky top-0 z-40 border-b border-line bg-paper/85 backdrop-blur-sm">42          <div className="mx-auto flex h-14 w-full max-w-6xl items-center justify-between px-4 sm:px-6">43            <Link href="/" className="flex items-center gap-2.5">44              {/* eslint-disable-next-line @next/next/no-img-element */}45              <img src="/logo.svg" alt="" className="h-7 w-7 rounded-md" />46              <span className="flex items-baseline gap-1.5">47                <span className="font-heading text-lg font-semibold tracking-tight text-ink sm:text-xl">48                  Worth<span className="text-verdict italic">Doing</span>49                </span>50                <span className="hidden font-mono text-[10px] uppercase tracking-widest text-ink-soft sm:inline">51                  .ai52                </span>53              </span>54            </Link>55            <nav className="flex items-center gap-0.5 sm:gap-2">56              <Link57                href="/explore"58                className="rounded-md px-2 py-2 text-[13px] text-ink-soft transition-colors hover:bg-secondary hover:text-ink sm:px-3 sm:text-sm"59              >60                Explore61              </Link>62              <Link63                href="/history"64                className="rounded-md px-2 py-2 text-[13px] text-ink-soft transition-colors hover:bg-secondary hover:text-ink sm:px-3 sm:text-sm"65              >66                History67              </Link>68              <Link69                href="/"70                className="ml-0.5 rounded-md bg-ink px-2.5 py-2 text-[13px] font-medium text-paper transition-opacity hover:opacity-85 sm:ml-1 sm:px-3.5 sm:text-sm"71              >72                Investigate73              </Link>74            </nav>75          </div>76        </header>77        <main className="flex-1">{children}</main>78        <footer className="border-t border-line py-6">79          <div className="mx-auto flex w-full max-w-6xl flex-col items-start justify-between gap-2 px-4 font-mono text-[11px] text-ink-soft sm:flex-row sm:items-center sm:px-6">80            <span>WorthDoing.ai — an autonomous opportunity analyst</span>81            <span>Google finds what exists. WorthDoing finds what should.</span>82          </div>83        </footer>84      </body>85    </html>86  );87}88