You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
frontend/apps/web/src/App.tsx imports all pages eagerly; only JsonViewer/ColumnLayoutModal are lazy. The 285 KB main chunk includes LoginPage/CreatePage not needed on first authenticated paint — lazy-load them.
The ?all list path (up to list_max_show_all = 200 rows) renders every row into the DOM with no virtualization — add row virtualization for the show-all path.
Post-[tech-debt] Split oversized page components (DetailPage 1100 LOC, ListPage 886 LOC) #657, ListPage.tsx (~874 lines, bundles filtering/selection/bulk/column-layout/search) and FieldInput.tsx (~561-line type/widget if/else ladder) remain oversized. Extract ListPage concerns into pages/list/ siblings (mirroring pages/detail/) and consider a widget-registry dispatch table for FieldInput.
Audit 2026-06-02 — performance + maintainability (Low)
frontend/apps/web/src/App.tsximports all pages eagerly; onlyJsonViewer/ColumnLayoutModalare lazy. The 285 KB main chunk includesLoginPage/CreatePagenot needed on first authenticated paint — lazy-load them.?alllist path (up tolist_max_show_all= 200 rows) renders every row into the DOM with no virtualization — add row virtualization for the show-all path.ListPage.tsx(~874 lines, bundles filtering/selection/bulk/column-layout/search) andFieldInput.tsx(~561-line type/widget if/else ladder) remain oversized. ExtractListPageconcerns intopages/list/siblings (mirroringpages/detail/) and consider a widget-registry dispatch table forFieldInput.