Home

giogio / openez-graph

public
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

feat: migrate from Next.js to TanStack Router + TanStack Query

5 months ago

0431f37
Authored
JoeJoeflyn5/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