import type { Metadata } from 'next'; import Link from 'next/link'; import { Check } from 'lucide-react'; import { PageHeader, Section, Note } from '@/components/ui/section'; import { Badge, StatusBadge } from '@/components/ui/badge'; import { EmptyState } from '@/components/ui/empty-state'; import { Freshness } from '@/components/ui/freshness'; import { listSources, COVERAGE_DOMAINS, sourceDomains } from '@/lib/queries/sources'; import { fmtDate, fmtInt, humanize, relativeTime } from '@/lib/format'; export const metadata: Metadata = { title: 'Sources', description: 'Public catalog of every data source: license status, access, coverage matrix and connector health.' }; export const revalidate = 600; export default async function SourcesPage() { const sources = await listSources(); return (
{sources.length === 0 ? ( Run `pnpm cix sources:sync` to seed the registry from connector manifests. ) : (
{COVERAGE_DOMAINS.map((d) => ( ))} {sources.map((s) => { const dom = sourceDomains(s); return ( {COVERAGE_DOMAINS.map((d) => ( ))} ); })}
Source {d} License Status
{s.name} {s.organization ?? humanize(s.category)} {dom.has(d) ? : ·} {s.license_status}
{sources.map((s) => ( ))}
Source Category Access License Redistribution Health Last success Records Dataset version
{s.name} {s.slug} {humanize(s.category)} {s.access_type} · {humanize(s.access_auth)} {s.license ?? —} {humanize(s.redistribution)} {s.last_success_at ? relativeTime(s.last_success_at) : '—'} {fmtInt(s.record_count)} {s.last_dataset_version ?? '—'}
((m, s) => (s.last_run_finished_at && (!m || s.last_run_finished_at > m) ? s.last_run_finished_at : m), null)} />
License status meanings — approved: reviewed, may be ingested and displayed with attribution · review: terms under assessment, no public records · restricted: displayed with limits · blocked: not usable. See each source page for the plain-language summary.
)}
); }