feat: migrate from Next.js to TanStack Router + TanStack Query 5 months ago
Authored
JoeJoeflyn 5/31/2026, 6:04:43 AM - Replace Next.js app router with TanStack Router (Vite-based)
- Add TanStack Query with queryOptions factories in lib/queries.ts
- Wire queryClient into router context for typed loader access
- Replace page-based API with route loaders for data prefetching
- Fix pagination: replace <a href> with <Link search> to avoid full page reloads
- Add next-page prefetch for document pagination via useEffect
- Add workspace detail hover prefetch on workspace cards
- Add workspace graph deduplication with query key matching
- Move pagination component from components/ to lib/ Parente831648
66 files changed
README.md +27 −2 apps/web/components.json +0 −25 apps/web/index.html +22 −0 apps/web/next-env.d.ts +0 −6 apps/web/next.config.ts +0 −12 apps/web/package.json +23 −17 apps/web/postcss.config.js +5 −0 apps/web/postcss.config.mjs +0 −5 apps/web/public/logo.png
—
—
apps/web/src/app/api/workspaces/[workspaceId]/index/route.ts +0 −82
apps/web/src/app/api/workspaces/[workspaceId]/jobs/[jobId]/route.ts +0 −43
apps/web/src/app/api/workspaces/[workspaceId]/jobs/route.ts +0 −28
apps/web/src/app/documents/page.tsx +0 −68
apps/web/src/app/jobs/page.tsx +0 −92
apps/web/src/app/layout.tsx +0 −36
apps/web/src/app/query/actions.ts +0 −103
apps/web/src/app/query/page.tsx +0 −29
apps/web/src/app/query/query-form.tsx +0 −186
apps/web/src/app/workspaces/[workspaceId]/GraphButton.tsx +0 −26
apps/web/src/app/workspaces/[workspaceId]/IndexButton.tsx +0 −59
apps/web/src/app/workspaces/[workspaceId]/IndexJobsPanel.tsx +0 −259
apps/web/src/app/workspaces/[workspaceId]/IndexStatus.tsx +0 −140
apps/web/src/app/workspaces/[workspaceId]/graph/actions.ts +0 −225
apps/web/src/app/workspaces/[workspaceId]/graph/index.ts +0 −2
apps/web/src/app/workspaces/[workspaceId]/graph/page.tsx +0 −145
apps/web/src/app/workspaces/[workspaceId]/page.tsx +0 −468
apps/web/src/app/workspaces/actions.ts +0 −300
apps/web/src/app/workspaces/new/page.tsx +0 −200
apps/web/src/{app/workspaces/[workspaceId] => components}/graph/GraphClient.tsx +89 −192
apps/web/src/components/graph/GraphLegend.tsx +1 −2
apps/web/src/components/graph/WorkspaceGraph.tsx +395 −133
apps/web/src/components/header.tsx +0 −13
apps/web/src/components/sidebar.tsx +51 −61
apps/web/src/components/status-badge.tsx +15 −0
apps/web/src/components/theme-toggle.tsx +1 −4
apps/web/src/{app => }/globals.css +21 −49
apps/web/src/lib/api.ts +161 −0
apps/web/src/lib/dashboard.ts +0 −148
apps/web/src/{components => lib}/pagination.tsx +9 −9
apps/web/src/lib/queries.ts +46 −0
apps/web/src/lib/registry-access.ts +0 −25
apps/web/src/lib/theme.tsx +78 −0
apps/web/src/lib/utils.ts +1 −1
apps/web/src/main.tsx +38 −0
apps/web/src/routeTree.gen.ts +292 −0
apps/web/src/routes/__root.tsx +26 −0
apps/web/src/routes/documents.tsx +102 −0
apps/web/src/{app/page.tsx => routes/index.tsx} +31 −36
apps/web/src/routes/jobs.tsx +77 −0
apps/web/src/routes/query.tsx +176 −0
apps/web/src/{app/settings/page.tsx => routes/settings.tsx} +24 −46
apps/web/src/routes/workspaces.tsx +5 −0
apps/web/src/routes/workspaces/$workspaceId.tsx +9 −0
apps/web/src/routes/workspaces/$workspaceId/graph.tsx +88 −0
apps/web/src/routes/workspaces/$workspaceId/index.tsx +315 −0
apps/web/src/{app/workspaces/page.tsx => routes/workspaces/index.tsx} +45 −84
apps/web/src/routes/workspaces/new.tsx +234 −0
apps/web/src/server/index.ts +457 −0
apps/web/src/server/sqlite.ts +1 −1
apps/web/src/types/better-sqlite3.d.ts +0 −28
apps/web/tsconfig.json +20 −23
apps/web/vite-env.d.ts +1 −0
apps/web/vite.config.ts +22 −0
package.json +1 −1
packages/indexer/src/languages.ts +3 −3
packages/indexer/src/scanner.ts +4 −17