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
{fmtInt(services.length)} providers · what we observe from our probes next to what the vendor declares. The discrepancy is the valuable part.
| 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(', ') : '—'} |
|