SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
2.5 KB · 46 lines tsx
Raw Blame History
1import { Search } from 'lucide-react';2import type { Metadata } from 'next';3import Link from 'next/link';4import { Container, Note } from '@/components/ui/section';5import { PUBLIC_API_BASE, routes } from '@/lib/site';67export const metadata: Metadata = { title: 'Not found', robots: { index: false } };89/** 404 for the whole site and for company/event/sensor pages whose id does not resolve. */10export default function NotFound() {11  return (12    <Container className="py-16 md:py-24">13      <p className="eyebrow">404 · Not on the map</p>14      <h1 className="display mt-2 text-3xl md:text-5xl">No monitored record at this address.</h1>15      <p className="mt-4 max-w-xl text-[15px] leading-relaxed text-ink-2">The company may not be onboarded yet, the slug may have changed (ids never do), or the page never existed. Nothing is invented to fill the gap — search the atlas instead.</p>16      <form action="/search" method="get" role="search" className="mt-6 flex max-w-xl items-stretch border border-rule-strong bg-surface focus-within:border-accent">17        <label htmlFor="nf-q" className="sr-only">18          Search Company Atlas19        </label>20        <Search className="my-auto ml-3 size-4 shrink-0 text-ink-3" aria-hidden />21        <input id="nf-q" name="q" type="search" placeholder="Search companies, industries, countries…" className="h-11 min-w-0 flex-1 bg-transparent px-3 text-[16px] text-ink placeholder:text-ink-3 focus:outline-none" autoComplete="off" spellCheck={false} />22        <button type="submit" className="bg-ink px-4 text-sm font-medium text-canvas hover:opacity-90">23          Search24        </button>25      </form>26      <div className="mt-6 flex flex-wrap gap-2 text-sm">27        <Link href={routes.home()} className="btn">28          Home29        </Link>30        <Link href={routes.companies()} className="btn">31          Companies32        </Link>33        <Link href={routes.live()} className="btn">34          Live feed35        </Link>36        <Link href={routes.events()} className="btn">37          Events38        </Link>39      </div>40      <Note className="mt-8 max-w-xl">41        Canonical URLs: <span className="mono">/company/&lt;slug&gt;</span>, <span className="mono">/industry/&lt;slug&gt;</span>, <span className="mono">/country/&lt;code&gt;</span>, <span className="mono">/events/&lt;id&gt;</span>. Programmatic lookup: <span className="mono">{PUBLIC_API_BASE.replace(/^https?:\/\/www\./, '')}/search/suggest?q=…</span>42      </Note>43    </Container>44  );45}46