Admin Dashboard for Fact Engine (WI-6)

Context

Replace legacy admin pages (urls, domains, audience, diff-settings) with fact engine management views. The admin app at apps/admin/ currently has v1 pages that reference dropped tables.

Current State

  • Admin has legacy pages: audience, avatars, billing, changes, content, diff-settings, domains, feature-flags, feeder-sources, media, onboarding, queue, urls, users
  • Most reference dropped v1 tables or irrelevant v1 features
  • No fact engine management UI exists

Gap Analysis

FeatureRequiredCurrentGap
Dashboard with pipeline statsYesLegacy statsFAIL
Facts list with filtersYesMissingFAIL
Stories list with clustering viewYesMissingFAIL
Queue depth monitoringYesLegacy queue viewFAIL
Challenge review queueYesMissingFAIL
Dispute review queueYesMissingFAIL
Reward milestone configYesMissingFAIL
Remove legacy pagesYesStill presentFAIL

Challenges

Challenge 6.1: Dashboard Stats

Requirement: Main dashboard shows fact engine health. Acceptance Criteria:

  • Fact count by status (pending, validated, rejected, archived)
  • Ingestion run stats (last 24h: processed, created, failed)
  • Pipeline throughput (facts/hour, validation rate)
  • Topic category distribution chart Evaluation: FAIL Files: apps/admin/app/(dashboard)/page.tsx

Challenge 6.2: Facts Management

Requirement: CRUD list for fact records. Acceptance Criteria:

  • Paginated fact list with status filters
  • Search by title/topic
  • Bulk actions (validate, reject, archive)
  • Individual fact detail view with edit capability Evaluation: FAIL Files: apps/admin/app/(dashboard)/facts/

Challenge 6.3: Stories View

Requirement: List stories with clustering status. Acceptance Criteria:

  • Story list with status filter (clustering, published, archived)
  • Source count and domain list per story
  • Link to associated fact records Evaluation: FAIL Files: apps/admin/app/(dashboard)/stories/

Challenge 6.4: Queue Monitoring

Requirement: Queue health dashboard. Acceptance Criteria:

  • Depth per queue (12 queues: 7 original fact engine + RESOLVE_CHALLENGE_IMAGE, GENERATE_CHALLENGE_CONTENT, EXPLODE_CATEGORY_ENTRY, FIND_SUPER_FACTS, and 1 additional)
  • Processing rate (messages/minute)
  • Stuck message detection
  • Manual retry capability Evaluation: FAIL Files: apps/admin/app/(dashboard)/queue/ (modify existing)

Challenge 6.5: Challenge Review Queue

Requirement: Review and approve/reject AI-generated challenges. Acceptance Criteria:

  • List of recently generated challenges
  • Preview challenge as user would see it
  • Approve/reject/edit actions
  • Challenge image review (anti-spoiler compliance)
  • Format/style combination preview (8 formats x 6+ styles)
  • Drift coordinator results display (voice, structure, schema, taxonomy, difficulty, reveal, textbook) Evaluation: FAIL Files: apps/admin/app/(dashboard)/challenges/

Challenge 6.6: Dispute Review

Requirement: See user score disputes and AI decisions. Acceptance Criteria:

  • Dispute list with status filters
  • View user argument and AI evaluation
  • Override capability for admins Evaluation: FAIL Files: apps/admin/app/(dashboard)/disputes/

Challenge 6.7: Reward Configuration

Requirement: Manage reward milestones. Acceptance Criteria:

  • Milestone list with point thresholds
  • Edit milestone rewards (Eko+ days)
  • Claim tracking per user Evaluation: FAIL Files: apps/admin/app/(dashboard)/rewards/

Challenge 6.8: Remove Legacy Pages

Requirement: Delete admin pages for dropped features. Acceptance Criteria:

  • Remove or stub: audience, avatars, changes, content, diff-settings, domains, feeder-sources, urls
  • Keep: billing, feature-flags, media, onboarding, queue, users
  • No broken imports or dead links Evaluation: FAIL

Challenge 6.9: Enrichment & Pipeline Monitor

Requirement: View enrichment API health and cost tracking. Acceptance Criteria:

  • Enrichment API health dashboard (13 clients: Wikipedia, Wikidata, OpenLibrary, MusicBrainz, TMDB, GeoNames, etc.)
  • Cache hit rates per API client
  • API error rates and latency metrics
  • Cost tracking dashboard (model spend by task type, daily caps, per-model budgets) Evaluation: FAIL Files: apps/admin/app/(dashboard)/enrichment/

Challenge 6.10: Taxonomy Management

Requirement: Manage subcategory activation and schema coverage. Acceptance Criteria:

  • Subcategory list with activation status (~95 active)
  • Schema coverage per subcategory (domain-specific schemas)
  • Fact count per subcategory
  • Schema editor preview Evaluation: FAIL Files: apps/admin/app/(dashboard)/taxonomy/

Quality Tier

Challenge 6.Q: Admin Quality Standards

Requirement: Meet admin dashboard quality criteria. Acceptance Criteria:

  • All tables paginated and sortable
  • Responsive at desktop breakpoints (admin is desktop-first)
  • Loading states for async data
  • bun run build succeeds for apps/admin Evaluation: PENDING

Implementation Notes

  • Reuse existing admin CRUD table components from apps/admin/
  • Admin queries should use service_role Supabase client (bypasses RLS)
  • Consider adding admin-specific API routes or server actions in apps/admin/
  • 12 queue types now exist (up from 7 at original writing): includes RESOLVE_CHALLENGE_IMAGE, GENERATE_CHALLENGE_CONTENT, EXPLODE_CATEGORY_ENTRY, FIND_SUPER_FACTS
  • Enrichment orchestrator has 13 API clients — monitor page should show health for all
  • Drift coordinators (7 semantic validators) produce results that should be visible in challenge review