import Link from "next/link"; import type { Metadata } from "next"; import { Bar, Empty, PageHeader, Panel, Stat, Table, Td } from "@/components/ui"; import { api } from "@/lib/api"; import { fmtInt, fmtPct, relTime } from "@/lib/format"; export const dynamic = "force-dynamic"; export const metadata: Metadata = { title: "Coverage", description: "Global Observation Coverage Score: how much of the world's high-value public web WebSensor observes, sector by sector — listed companies, governments, AI, cloud, cybersecurity, markets, science, healthcare, energy, transport, telecom, logistics, open source and commerce.", alternates: { canonical: "/coverage" } }; function band(score: number): string { return score >= 80 ? "text-signal" : score >= 60 ? "text-high" : score >= 40 ? "text-warn" : "text-fg-muted"; } export default async function CoveragePage() { const c = await api.coverage(); if (!c || !c.sectors.length) { return ( <> Coverage universes are not loaded yet. ); } const factoryQueued = (c.factory.queued ?? 0) + (c.factory.discovering ?? 0); return ( <> Coverage {c.global_score.toFixed(1)} / 100} description={`How much of the world's high-value public web do we observe? ${fmtInt(c.covered)} of ${fmtInt(c.members)} organizations in ${c.sectors.length} sector universes have at least one active sensor. The denominator is explicit (config/coverage), the score is explainable (breadth 70 % · depth 30 %), and the Source Factory expands it continuously: ${fmtInt(c.monitored.shadow)} sensors are in shadow monitoring, ${fmtInt(factoryQueued)} organizations are queued for discovery.`} />
{c.global_score.toFixed(1)}} hint="sector-weighted" />
updated {relTime(c.generated_at)}}> {c.sectors.map((s) => ( ))}
{s.label}
{s.description ?? s.sector}
{s.score.toFixed(1)}
= 80 ? "signal" : s.score >= 60 ? "high" : s.score >= 40 ? "mid" : "info"} />
{fmtPct(s.breadth)} {fmtPct(s.depth)} {fmtInt(s.members)} {fmtInt(s.covered)} {fmtInt(s.shadow_members)} {fmtInt(s.queued)} {fmtInt(s.sensors)} ×{s.weight} members →

Method — {c.method}. A member counts as observed when at least one active (non-shadow) sensor lives on its registrable domain or on a host it declares. Shadow sensors are new sensors the Source Factory found and validated; they are polled and their evidence is kept, but nothing is published until they prove signal over noise. Universes live in config/coverage/*.yaml with provenance and retrieval dates; they are the denominator, not the registry. {c.issues.length > 0 && {c.issues.length} universe file{c.issues.length > 1 ? "s" : ""} could not be loaded.}

); }