import type { Metadata } from 'next'; import Link from 'next/link'; import { LevelBadge, PNum, Section } from '@/components/ui/primitives'; import { apiGet } from '@/lib/api'; import { fmtInt, fmtPct } from '@/lib/format'; import { VendorIndicator } from '@/components/service/VendorIndicator'; import type { ServiceRow } from '@/lib/types'; export const dynamic = 'force-dynamic'; export const metadata: Metadata = { title: 'Services', description: 'Independent observation of major Internet services versus what their status pages declare.' }; export default async function ServicesPage() { const { services } = await apiGet<{ services: ServiceRow[] }>('/api/v1/services'); const sorted = [...services].sort((a, b) => b.pressure - a.pressure); return (

Index

Services

{fmtInt(services.length)} providers · what we observe from our probes next to what the vendor declares. The discrepancy is the valuable part.

{sorted.map((s) => { const discrepancy = s.affected_regions.length > 0 && s.vendor_status?.indicator === 'none'; return ( ); })}
Service Category Pressure Level Observed avail. 24h Targets Affected regions Vendor status
{s.name} {discrepancy && discrepancy} {s.category} {fmtPct(s.observed_availability_24h, 2)} {fmtInt(s.targets)} {s.affected_regions.length ? s.affected_regions.join(', ') : '—'}
); }