'use client'; import { useEffect, useState } from 'react'; import { AdminShell } from '@/components/AdminShell'; import { getDataQuality } from '@/lib/api'; function Pct({ value }: { value: number }) { const pct = (value * 100).toFixed(1); const color = value < 0.05 ? 'text-green-400' : value < 0.2 ? 'text-yellow-400' : 'text-red-400'; return {pct}%; } export default function DataQualityPage() { const [data, setData] = useState> | null>(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { getDataQuality() .then(setData) .catch((e) => setError(e.message)) .finally(() => setLoading(false)); }, []); return (

Data quality

{error &&

{error}

} {loading &&

Loading…

} {data && ( <>
Scoring calls (30d)
{data.scoringCallsLast30d}
Missing feature rate
Integration tokens
{data.totalTokens}
Stale token rate (>7d)

Daily feature completeness (14d)

{data.dailyQuality.map((row) => { const coverage = row.total > 0 ? row.withFeatures / row.total : 0; return ( ); })} {data.dailyQuality.length === 0 && ( )}
Date Scoring calls With features Coverage Avg candidates
{row.date} {row.total} {row.withFeatures} {row.avgCandidates?.toFixed(1) ?? '—'}
No data yet
)}
); }