The warehouse is a pnpm monorepo in three packages: an ETL worker with a REST API, a Next.js dashboard, and a shared types package both import so the data contract cannot drift. The API side is about 17,000 lines of TypeScript across 95 files with 15 migrations; the dashboard is another 20,000. It is the largest thing I have built alone, and the shared types are most of why it stayed manageable — when a metric changes shape, the compiler tells me every place that cares, including the chart that renders it.
Every twelve hours a coordinator loads active projects, determines which providers each is configured for, and runs each eligible one through a common interface: take a project, a lookback window and a job id, report rows inserted and updated. Adding a fifth provider is one file that satisfies that interface. The dashboard on top is Next.js with React Query and Recharts, deliberately boring: metrics endpoints take a project, a date range and a provider, and return everything for the range — the date range itself is the pagination.