feat(admin): admin card catalog with batch edit + async job queue #162

Merged
rstillwell merged 2 commits from feat/admin-catalog into main 2026-09-21 13:03:12 -04:00
Owner

Summary

Convoy + Brief

  • Convoy: .convoys/<slug>.md
  • Brief: .convoys/<slug>/brief-<N>-...md

Acceptance criteria

  • No scope expansion (only files listed in the brief's files: were edited)

Test plan

Pipeline gates

  • CI: lint, types, build, unit tests
  • Forbidden patterns / npm audit (if installed)
  • Visual diff (if UI change)
  • A11y audit (if UI change)
  • Design-system audit (if UI change)
  • Security audit (if code change)
  • Reviewer report
  • Smoke on staging (after merge to develop)

Security notes

Notes for reviewer

<!-- PR title for convoy work: convoy: <short description> (pipeline: convoy=<slug>, brief=<N>) skip: <comma-separated flags or empty> Skip flags (Conductor sets these — do not edit by hand): ia, ux, arch, test, review, security, visual, a11y, design, smoke, qa, docs, flag Never skip: plan-approval, pr-merge, prod-promote When convoy-metrics-gate.yml is installed: convoy PRs must add rows to .convoys/.metrics.jsonl. Run scripts/log-convoy-event.sh after each role, or add skip-metrics label with reason in the PR body. --> ## Summary <!-- 2-3 bullets: what changed and why. User-facing language preferred. --> ## Convoy + Brief - Convoy: `.convoys/<slug>.md` - Brief: `.convoys/<slug>/brief-<N>-...md` ## Acceptance criteria <!-- Copy from the brief; check off as you complete. --> - [ ] - [ ] - [ ] No scope expansion (only files listed in the brief's `files:` were edited) ## Test plan <!-- What was tested, how, and what wasn't tested with rationale. --> ## Pipeline gates <!-- Filled in by CI / role-reviewer. Don't edit. --> - [ ] CI: lint, types, build, unit tests - [ ] Forbidden patterns / npm audit (if installed) - [ ] Visual diff (if UI change) - [ ] A11y audit (if UI change) - [ ] Design-system audit (if UI change) - [ ] Security audit (if code change) - [ ] Reviewer report - [ ] Smoke on staging (after merge to develop) ## Security notes <!-- Auth, permissions, or data-handling changes? Link security audit findings. --> ## Notes for reviewer <!-- Anything unusual, intentional trade-offs, or follow-ups. -->
rstillwell added 2 commits 2026-09-21 12:33:08 -04:00
- New admin API: /api/admin/cards with filters (game/rarity/set/price/verified),
  sorting, pagination, admin rate limiting
- New admin page: /admin/catalog with GlassSurface table, filters panel,
  sortable columns, infinite scroll pagination
- New hook: useAdminCatalog for state management
- Components: AdminCatalogView, AdminCatalogFilters, AdminCatalogTable, AdminCatalogPagination
- Protected by withAdmin middleware, reuses design system tokens
feat(admin): add batch selection + batch edit (Phase 2)
Some checks failed
CI / Lint (pull_request) Has been cancelled
CI / Schema map up to date (pull_request) Has been cancelled
CI / Forbidden patterns (9 checks) (pull_request) Has been cancelled
CI / Migrations apply (node-pg-migrate) (pull_request) Has been cancelled
CI / Unit tests (vitest) (pull_request) Has been cancelled
Convoy metrics gate / Require role-event telemetry on convoy PRs (pull_request) Has been cancelled
PR Health rollup / Aggregate gate status (pull_request) Has been cancelled
Preview smoke / Should run? (pull_request) Has been cancelled
Visual diff / Should run? (pull_request) Has been cancelled
Preview smoke / Playwright smoke (pull_request) Has been cancelled
Visual diff / Screenshot diff (pull_request) Has been cancelled
70806d81ec
- AdminBulkSelectionToolbar: floating toolbar with batch edit action + clear selection
- BatchEditModal: form for editing allowed fields (rarity, verified, game, mana_cost, cmc, card_type, edhrec_rank, layout, released_at, reserved, reprint) with live preview
- API: POST /api/admin/cards/batch with validation, allowlist, 1000-card cap, audit logging
- Hook: selection state (Set), select-all, batch edit workflow
- Table: checkbox column, row highlighting, select-all header
- Build: all routes compile, lint clean (pre-existing only), 342 tests pass
rstillwell merged commit d5f4a38f44 into main 2026-09-21 13:03:12 -04:00
Sign in to join this conversation.
No description provided.