Goal
A consumer (production-Django pilot) wants to deprecate the legacy Django admin entirely and run only the React SPA at /admin2/. The backend has shipped most features; the SPA shell renders registry / list / detail / create / update / delete. But several backend surfaces have no SPA implementation yet — the SPA either ignores the metadata or renders a placeholder. This meta-issue tracks the remaining frontend work, each as a discrete pickup.
Each row: backend status (shipped) → SPA status (the gap) → acceptance criterion.
Frontend implementation gaps
| # |
Surface |
Backend |
SPA gap |
Acceptance |
| 1 |
list_filter sidebar drawer + chip row |
✅ #99 (filters[] in list response) |
SPA doesn't render the filter sidebar / chips / URL state |
N-7 |
| 2 |
date_hierarchy drill-down strip |
✅ #80 (date_hierarchy in list response) |
SPA doesn't render the year→month→day strip |
N-8 |
| 3 |
list_editable inline cell editing |
✅ #103 (bulk PATCH endpoint + editable column flag) |
SPA renders the flag but no click-to-edit cell → bulk PATCH |
E-12 |
| 4 |
actions bulk-actions menu |
✅ #101 (actions[] + runner endpoint) |
SPA doesn't render the actions menu / selection checkboxes |
E-? |
| 5 |
M2M widget (filter_horizontal/vertical) |
✅ #107 (many_to_many descriptor + widget hint) |
SPA renders read but no dual-list write widget |
E-11 |
| 6 |
Inlines render (Tabular/Stacked) |
✅ #109 (inlines[] in detail response) |
SPA doesn't render inline tables / card stacks |
E-13 / #54 |
| 7 |
FileField / ImageField render |
✅ #110 ({name,url,size} descriptor) |
SPA doesn't render thumbnail / Replace / Clear |
E-14 |
| 8 |
Session-expiry re-login modal |
✅ #95 (session_expired envelope) + #79 (contract) |
SPA doesn't render the focus-trapped re-login modal |
N-5 |
| 9 |
Dark mode |
🟡 #102 (UX contract) |
no SPA implementation |
#84 / V-6..V-8 |
| 10 |
Mobile patterns (FAB / bottom-sheet / swipe) |
🟡 #102 (UX contract) |
no SPA implementation |
#85 / R-6..R-10 |
| 11 |
PWA (manifest + SW + cache-on-logout) |
🟡 #102 (UX contract) |
no SPA implementation |
#86 / I-1..I-6 |
Plus the Django-admin-parity gaps already filed: #133 (filter-as-you-type sidebar), #136 (alphabetical sort), #138 (get_app_list groupings), #147 (parity audit).
How to pick up
- Claim a row on the Project board + comment here.
- The wire data is already in the API response — verify with
GET /api/v1/<app>/<model>/ (list) or /<pk>/ (detail).
- UI contract lives in
docs/ux/ (theming.md / responsive.md / pwa.md / states.md).
- Components: generic →
@dar/ui; model-aware → @dar/list / @dar/details. Data flows only through @dar/data (CLAUDE.md §7).
Definition of "ready to deprecate the legacy admin"
A consumer can delete path("admin/", admin.site.urls) and lose zero workflows. That means rows 1–8 above must be ✅ (the v0.2 polish rows 9–11 are desirable but not deprecation-blocking).
Goal
A consumer (production-Django pilot) wants to deprecate the legacy Django admin entirely and run only the React SPA at
/admin2/. The backend has shipped most features; the SPA shell renders registry / list / detail / create / update / delete. But several backend surfaces have no SPA implementation yet — the SPA either ignores the metadata or renders a placeholder. This meta-issue tracks the remaining frontend work, each as a discrete pickup.Each row: backend status (shipped) → SPA status (the gap) → acceptance criterion.
Frontend implementation gaps
list_filtersidebar drawer + chip rowfilters[]in list response)date_hierarchydrill-down stripdate_hierarchyin list response)list_editableinline cell editingeditablecolumn flag)actionsbulk-actions menuactions[]+ runner endpoint)filter_horizontal/vertical)many_to_manydescriptor + widget hint)inlines[]in detail response){name,url,size}descriptor)session_expiredenvelope) + #79 (contract)Plus the Django-admin-parity gaps already filed: #133 (filter-as-you-type sidebar), #136 (alphabetical sort), #138 (
get_app_listgroupings), #147 (parity audit).How to pick up
GET /api/v1/<app>/<model>/(list) or/<pk>/(detail).docs/ux/(theming.md / responsive.md / pwa.md / states.md).@dar/ui; model-aware →@dar/list/@dar/details. Data flows only through@dar/data(CLAUDE.md §7).Definition of "ready to deprecate the legacy admin"
A consumer can delete
path("admin/", admin.site.urls)and lose zero workflows. That means rows 1–8 above must be ✅ (the v0.2 polish rows 9–11 are desirable but not deprecation-blocking).