Summary
The Content Browser is currently optimized for raw JSON inspection, but not for human supervisors who need to quickly locate, interpret, and review content.
This issue proposes a broader redesign so the browser becomes a human-first operational workspace while staying read-focused (not a full editor).
Current pain points
- Model discovery is weak:
- Sidebar shows mostly name + slug, without helpful context like item volume or recent activity.
- Item findability is low:
- No search box.
- No visible status/date filters.
- No visible pagination controls despite backend pagination metadata.
- Item readability is low:
- List rows are JSON-string snippets, which are hard to scan.
- There is no stable “display title” per item.
- Version review is shallow:
- Timeline shows snapshots, but no explicit diff view to explain what changed.
- Rollback decision support is limited:
- Rollback exists, but without a clear human-readable change summary before confirmation.
Proposal (human-first redesign)
- Add a findability toolbar on the item list:
- Search (text query)
- Status filter
- Date range filter
- Sort by updated/created
- Pagination controls (next/prev + total)
- Make list rows schema-aware:
- Derive a primary display label from common fields (
title, name, headline, slug, fallback to Item #id)
- Show key metadata chips (status, version, updated time)
- Keep raw JSON as secondary/expandable, not primary
- Upgrade model sidebar into model summaries:
- Item count
- Last item update
- Optional status breakdown (draft/published/archived)
- Sort models by recent activity
- Add explicit version diff mode:
- Compare current vs selected historical version
- Highlight added/removed/changed fields
- Keep raw snapshots accessible in a separate tab
- Improve rollback safety UX:
- Confirmation modal includes concise diff summary and impact statement
- Keep existing confirmation gate, but make decision context clearer
Public API/interface additions proposed
GET /api/content-items:
- Add optional
q query param for server-side text search across selected top-level fields
- Add optional sort controls (
sortBy, sortDir) if not already standardized
GET /api/content-types:
- Add optional
includeStats=true to return model-level stats:
itemCount
lastItemUpdatedAt
- optional status counts
- (Optional)
GET /api/content-items/:id/diff?fromVersion=&toVersion=:
- Return normalized field-level diff payload for UI rendering
Files likely affected
ui/src/routes/content/+page.svelte
ui/src/lib/components/* (new list-row, filters, diff-view components)
ui/src/lib/utils.ts (display label + diff helpers)
src/api/routes.ts (query additions / stats endpoint behavior)
Acceptance criteria
- Supervisors can find an item by title/slug/status/date without scanning raw JSON blocks.
- Item list shows human-readable labels with metadata, with JSON preview as secondary.
- Model list shows at least item count and last updated metadata.
- Version history supports explicit diff visualization between two versions.
- Rollback confirmation includes a human-readable change summary.
- Behavior works on desktop and mobile layouts.
- Existing read-only stance is preserved (no direct inline editing introduced by this issue).
Non-goals
- Building a full content editor
- Changing workflow policy semantics
- Replacing audit logs functionality
Summary
The Content Browser is currently optimized for raw JSON inspection, but not for human supervisors who need to quickly locate, interpret, and review content.
This issue proposes a broader redesign so the browser becomes a human-first operational workspace while staying read-focused (not a full editor).
Current pain points
Proposal (human-first redesign)
title,name,headline,slug, fallback toItem #id)Public API/interface additions proposed
GET /api/content-items:qquery param for server-side text search across selected top-level fieldssortBy,sortDir) if not already standardizedGET /api/content-types:includeStats=trueto return model-level stats:itemCountlastItemUpdatedAtGET /api/content-items/:id/diff?fromVersion=&toVersion=:Files likely affected
ui/src/routes/content/+page.svelteui/src/lib/components/*(new list-row, filters, diff-view components)ui/src/lib/utils.ts(display label + diff helpers)src/api/routes.ts(query additions / stats endpoint behavior)Acceptance criteria
Non-goals