import { ArrowRight, Code2 } from 'lucide-react'; import Link from 'next/link'; import { Suspense } from 'react'; import { Sparkline } from '@/components/charts/sparkline'; import { WorldMap } from '@/components/charts/world-map'; import { CompanyMiniList } from '@/components/company/company-table'; import { EventList } from '@/components/events/event-row'; import { LiveCounters } from '@/components/live/counters'; import { LiveFeed } from '@/components/live/live-feed'; import { Chip, CountryChip } from '@/components/ui/badges'; import { Container, Empty, Note, Section, Stat, StatGrid, Unavailable } from '@/components/ui/section'; import { api, liveItems, safe } from '@/lib/api'; import { countryName } from '@/lib/countries'; import { fmtBytes, fmtDate, fmtDays, fmtInt, fmtPctSigned, fmtScore } from '@/lib/format'; import { ALT_TAGLINE, DESCRIPTION, PUBLIC_API_BASE, routes, TAGLINE } from '@/lib/site'; import type { Event, Pulse } from '@/lib/types'; export const revalidate = 60; export default async function HomePage() { const [pulse, live, index, signals] = await Promise.all([safe(api.pulse()), safe(api.live({ limit: 40 })), safe(api.index()), safe(api.signals({ limit: 8 }))]); const initialLive: Event[] = liveItems(live).length ? liveItems(live) : (pulse?.live ?? []); const stats = pulse?.stats ?? (await safe(api.stats())); const p: Partial = pulse ?? {}; return ( <> {/* Hero */}

Continuous corporate observation network

{TAGLINE}

{DESCRIPTION}

{ALT_TAGLINE}

Open the live feed Browse companies API & data
{/* Live feed + movers */}
{live || pulse ? ( }> ) : ( )}
{p.movers ? : } Activity Score = decayed weight of meaningful changes and structured events over 30 days, normalised per active sensor (0–100, see methodology).
{/* Map */}
{p.map && p.map.length ? (

Most active countries (30 d)

    {(p.countries ?? []).slice(0, 8).map((c) => (
  1. {c.name} {fmtInt(c.companies)} co. {fmtInt(c.events_30d)}
  2. ))}
) : ( )}
{/* Hiring / launches / pricing */}
{p.hiring ? : }
{p.launches ? : }
{p.pricing ? : }
{/* AI / industries / countries */}
{p.ai ? : } Scored from public evidence only (AI listings, products, documentation, communications). Never a claim about internal use.
{p.industries ? (
    {p.industries.slice(0, 10).map((i) => (
  1. {i.name} {fmtInt(i.companies)} co. {fmtScore(i.activity_score)} {fmtInt(i.events_30d)}
  2. ))}
) : ( )}

activity · events 30 d

{p.countries ? (
    {p.countries.slice(0, 10).map((c) => (
  1. {c.name} 0 ? 'text-positive' : (c.hiring_momentum_30d ?? 0) < 0 ? 'text-danger' : 'text-ink-3'}`}>{fmtPctSigned(c.hiring_momentum_30d, 0)} {fmtInt(c.events_30d)}
  2. ))}
) : ( )}

hiring 30 d · events 30 d

{/* Trending + index */}

Trending terms (7 d)

{p.trending?.length ? (
    {p.trending.slice(0, 8).map((t) => (
  • {t.term} {fmtInt(t.companies)} co. 0 ? 'text-positive' : 'text-ink-3'}`}>{t.momentum === null ? '—' : fmtPctSigned(t.momentum, 0)}
  • ))}
) : ( )}

Cross-company signals

{signals?.items.length ? (
    {signals.items.slice(0, 6).map((s) => (
  • signal {s.title} {Math.round(s.confidence * 100)} %
    {s.scope_key &&

    {s.scope} · {s.scope === 'country' ? countryName(s.scope_key) : s.scope_key}

    }
  • ))}
) : ( )}
{p.activity_index ? (

{p.activity_index.value === null ? '—' : p.activity_index.value.toFixed(1)}

0 ? 'text-positive' : (p.activity_index.delta_7d ?? 0) < 0 ? 'text-danger' : ''}`}>{fmtPctSigned(p.activity_index.delta_7d)} 7 d

{index &&

0 ? 'text-positive' : (index.delta_30d ?? 0) < 0 ? 'text-danger' : ''}`}>{fmtPctSigned(index.delta_30d)} 30 d

}
x.value)} width={420} height={72} tone="accent" baseline={100} className="mt-3 h-auto w-full" />

Last 90 days · coverage-normalised · {index?.formula_version ?? 'v1'}

) : ( )}
{/* Platform statistics + API CTA */}
{stats ? ( ) : ( )}

API & data

Every event, metric and history version is available through a public JSON API.

Companies, events with filters, timelines, rankings, industries, countries, search, streaming (SSE) and exports (JSON, NDJSON, CSV). {PUBLIC_API_BASE}

Read the API docs Methodology
); }