Appearance
Tailwind #57 — Admin asset CRUD
| Field | Value |
|---|---|
| GitLab | sourcecontrollers/safecall#57 |
| Parent | #52 |
| Roadmap | tailwind-roadmap.md |
| Depends on | #55 (closed); prefer #56 done first |
| Workflow | closed |
Goal
Migrate the repeated admin listing + modal CRUD pattern for users, devices, beacons, and gateways onto Tailwind catalog + utilities.
Design principles
- Shared listing/modal patterns should look consistent; extend catalog if the same structure repeats (listing toolbar, columns modal) rather than copy-paste utility walls.
- Forms:
.field/.input/.select/.checkbox; buttons:.btnvariants. - Explicit soft/solid tags for status chips (online/offline, battery, etc.).
Acceptance criteria
- [x]
templates/admin/users/**+admin/pages/users.tsmigrated - [x]
templates/admin/devices/**+ devices page / asset-replace modal migrated - [x]
templates/admin/beacons/**+ beacons page migrated - [x]
templates/admin/gateways/**+ gateways page migrated - [x] Columns modals / delete / edit / new modals in these areas use catalog modals
- [x] Smoke: list + open edit modal for each entity type
Implementation notes
Largest shared pattern in the app (field/control/modal-card). Reuse helpers from #54. Dynamic tag/button class strings in TS must use catalog variants.
If this exceeds one context window, split into two child issues (e.g. users+devices vs beacons+gateways) and update the parent roadmap checklist.
Out of scope
| Work | Issue |
|---|---|
| Locations / maps / zones / navigation | #58 |
| Eink / sensors overview | #59 |
| Admin tools | #60 |
Key paths
web/src/templates/admin/{users,devices,beacons,gateways}/**web/src/admin/pages/{users,devices,beacons,gateways,asset-replace-modal}.ts
Verification
- Web typecheck; run relevant E2E if specs cover these pages (
bun test:e2ewhen practical). - Smoke each listing + one modal flow.
- Grep those template dirs for
button is-,columns,modal-cardBulma-only leftovers → 0.
Done when / handoff
- Operator verifies → commit with
Closes #57→ pushgitlab. - Next: #58 admin spatial.