Implements ADR 0013 — browse mode part.
Backend
GET /api/lookup/snipeit?page=1&page_size=24&category=…&sort=name (paginated list)
GET /api/lookup/grocy?page=1&page_size=24&location=…&sort=name
GET /api/lookup/spoolman?page=1&page_size=24&material=…&sort=name
- All return
{items: [...], page, page_size, total, next_cursor?} with stable ordering
- Filters per integration (Snipe-IT category, Grocy location, Spoolman material/vendor)
Frontend
- Browse tab UI with grid layout (mobile 2-col, desktop 4-col)
- Tile shows: image (or placeholder), title, ID
- Infinite scroll OR pagination controls
- Tap a tile → item detail view (separate issue: detail view + layout dropdown)
- Loading states, empty states, error states
Acceptance
- Sort is stable (no duplicate items between pages)
- Pagination works on phone + desktop
- Empty state shows helpful message
Implements ADR 0013 — browse mode part.
Backend
GET /api/lookup/snipeit?page=1&page_size=24&category=…&sort=name(paginated list)GET /api/lookup/grocy?page=1&page_size=24&location=…&sort=nameGET /api/lookup/spoolman?page=1&page_size=24&material=…&sort=name{items: [...], page, page_size, total, next_cursor?}with stable orderingFrontend
Acceptance