Screens: inventory, members and settings
S5. Inventory list (inventory) ← R2 header/stat cards + adapted dense table (§5)
Section titled “S5. Inventory list (inventory) ← R2 header/stat cards + adapted dense table (§5)”Layout: L3 ListLayout width="wide". The slots are filled as follows: header = title,
meta counts, “+ Add item” primary, an Export menu as secondary; callout = reorder suggestions;
tabs = All / Low / Out / Archived; filters = search, saved views and column picker; body =
table (DataTable in card chrome); bulkBar = QR enable/disable and export; detail = S6
drawer.
Inventory ( Export ▾ ) [■ + Add item ]248 items · 12 low stock · 3 on the repair shelf┌ ! 6 items are at or below their reorder point. Review suggestions → ┐ (only if >0)All 248 │ Low stock 12 │ Out of stock 4 │ Archived [ Search items ⌕ ] [Views ▾] [Columns ▾]┌──────────────────────────────────────────────────────────────────────────────────────────────┐│ ☐ Item Mode Total Available Issued Damaged Lost ⋯ │ 40h header│ ☐ [img] Arduino Uno R3 Count 20 (Limited) 3 15 1 1 ⋯ │ 56h rows│ ☐ [img] Multimeter Fluke 101 Individual 6 (Available) 5 1 0 0 ⋯ │└──────────────────────────────────────────────────────────────────────────────────────────────┘ 1–24 of 248 ‹ 1 2 3 … 11 ›╭ 3 selected ( Enable QR ) ( Disable QR ) ( Export 3 ) Clear ╮ ← sticky bulk bar- Collapse the ~9 toolbar buttons to: primary “+ Add item”; secondary “Export ▾” (CSV/XLSX,
scoped to the selection when rows are selected); filter tabs for Active/Low/Out/Archived
(replacing three toggles; the
archived,low_stockandout_of_stockURL params are unchanged); Saved views and a column picker on the right. Bulk QR enable/disable lives only in the selection bar (the existingBulkActionToolbar). - Row: the whole name cell opens the item detail. The row “⋯” menu holds Edit, Move to repair
shelf…, Add to To buy…, Archive. Archive has no confirm dialog because it already has a
toast with Undo (
useInventoryArchive): “Arduino Uno archived. Undo”. Restore works the same way. - The availability cell keeps
InventoryAvailabilityas a status pill with the word. ReorderSuggestionsbecomes the single callout (P5.1) linking to a drawer with the suggestions.- Empty (no items): “No parts added yet. Add your first item.” with “+ Add item” repeated in-card (brand voice example). Filtered empty: “Nothing low on stock.” / “No archived items.”
- Mobile: table becomes stacked cards (image, name, availability pill, “Issued 15 · Damaged 1 · Lost 1”), selection via long-press or a checkbox; bulk bar fixed at the bottom.
S6. Inventory item detail ← R7 (detail header + tabs) + R5 (settings rows, danger zone)
Section titled “S6. Inventory item detail ← R7 (detail header + tabs) + R5 (settings rows, danger zone)”Layout: L4 DetailLayout presentation="drawer" width=720. The slots are filled as follows:
identity = image; status = availability; tabs = Details / Stock / QR & assets / History /
Custody; Details main = SettingsRows (the rows from L5, used standalone) with a dirty save
footer; danger = Archive. Add item is L6 FormPageLayout; preview = the public
ProductCard.
Opens as a drawer at 720 px or full screen on mobile (it is currently the ItemModal with 8
stacked blocks). Deep link ?item=<id> (new param; the current id list filter stays separate).
← Inventory[img] Arduino Uno R3 ( View public page ↗ ) (Limited) Count-tracked · Electronics · Public: status onlyDetails Stock QR & assets History Custody───────────────────────────────────────────────Details: settings rows (Name & description │ Photo │ Category │ Public visibility │ Kit components │ Borrowing terms) ( Discard ) [■ Save changes ] ← appears when dirty┌ Archive item ─ Hides it from active inventory and the public catalogue. ( Archive… ) ┐ red- Stock tab: stat cards (Total, Available, Issued, Damaged, Lost), then
QuantityAdjustas a form card with a reason; Individual mode adds the asset table (IndividualAssets). - QR & assets:
QrHistory. History:LendingHistory. Custody:ChainOfCustodyBlock. The last two only whencanViewAudit. - Public visibility row groups
is_public,public_availability_mode(segmented: Exact count / Status only / Hidden) andshow_public_count, with a live preview pill of what the public sees (R3 live-preview pattern). The rule from CLAUDE.md is computed client-side only for display. “Exact count” withshow_public_count=falsepreviews as “Limited” and the helper says why. - Add item uses the same layout as a create page (R3): form left, “Public catalogue preview” card right (ProductCard rendering). Then, as today, it reopens in edit mode to add a photo, with the copy “Item created. Add a photo so members can recognise it.”
S7. Members (members) ← R4
Section titled “S7. Members (members) ← R4”Layout: L3 ListLayout. The slots are filled as follows: header = “Invite member” primary;
callout = pending requests; tabs = Members / Requests / Present now / Plans / Waivers;
body = table; detail = member drawer (L4 drawer with SettingsRows).
Members [■ Invite member ]People who belong to this makerspace and what they can do here.┌ ! 3 people are waiting for approval. Review requests → ┐Members 128 │ Requests 3 │ Present now 4 │ Plans │ Waivers [ Search ⌕ ] [Status ▾]┌──────────────────────────────────────────────────────────────────────────────────────┐│ Person Role Status Waiver Joined ⋯ ││ (MN) Meera Nair (Verified) (Member) (Active) Current 13 Oct ⋯ ││ meera@example.test │└──────────────────────────────────────────────────────────────────────────────────────┘- Invite = the R4 invite card pattern, opened from the primary into a modal: email, role
select (defaults to first role, as today) and “Send invite”. The Requests tab lists both
membership requests and staff invitations (today’s second panel), each with inline
“Approve” (primary pill) and “Decline…” (red text). The plan picker appears inline in the
approve modal when
membershipis on. - Row “⋯”: Change role, Verify / Unverify, Can refer (toggle), Can verify (toggle), Terms,
Record witnessed acceptance (only when the waiver is needed), then a divider, then
“Revoke membership…” (red). Clicking the row opens a member drawer with settings rows
(role, capabilities, waiver, payments via
PaymentReconcileActions, vouches) so the table row stays one line. - Present now tab = the current “Currently present” panel as a P14 table with “until 18:30”.
The Plans and Waivers tabs show only when
membershipis on andcanManageMakerspace(current gating). - Empty (members): “It’s just you so far. Invite someone with the button above.” Requests empty: “No one is waiting. New membership requests appear here.”
- Mobile: the table becomes cards (name, role and status pills, ⋯).
S8. Staff & roles (users) ← R4 (table) + R6 (checkbox cards for permissions)
Section titled “S8. Staff & roles (users) ← R4 (table) + R6 (checkbox cards for permissions)”Layout: L3 ListLayout. The slots are filled as follows: tabs = Staff / Roles /
Invitations; body = table. The role detail is L4 DetailLayout (page). Its main =
permission checkbox-card groups with a Discard/Save footer, and danger = “Delete role…”.
“Create makerspace” is L6 (or an L7 onboarding flow).
Staff & roles ( Create makerspace )* [■ Add staff ]Who can work in this makerspace and what each role is allowed to do.[Makerspace ▾]* Staff 9 │ Roles 6 │ Invitations 1Staff table: Person · Role (pill) · Makerspace* · Status (Restricted pill if any) · ⋯ (Change role, Reset password…, Restrict…, Restore, Revoke role…)* superadmin / multi-makerspace only.
- The first-staff invitation link renders as the R4 invite-link card (read-only field, “Unused” pill, “Copy link” primary, “Dismiss”).
- Roles tab: role list rows (name, the “Default” pill for the 4 protected roles, “n actions”,
“m staff”) leading to a role detail with the
RoleEditoractions grouped as checkbox cards (R6) by area (Lending, Inventory, Machines, Community, Money, Admin), each card showing the human label plus the action key in mono, andRoleMachineScopeEditoras its own settings row. Save via a Discard/Save pair. Danger zone: “Delete role…” for custom roles. - Invitations tab:
StaffInvitations(whenstaff.invitations). - Empty: “No staff yet. Add staff to share the work.”
S9. Makerspace settings (settings) ← R5 + R6 + R17
Section titled “S9. Makerspace settings (settings) ← R5 + R6 + R17”Layout: L5 SettingsLayout subnav="auto". The slots are filled as follows: sections = the
12 groups in the table below, each with its own save; danger = the archive request. The
Settings-family siblings (Staff & roles, API access, and the rest) are separate tabs using L3 or
L5 as listed in S24.
MakerspaceSettingsPanel stacks ~30 independent sections on one page. Spec: an in-page
sub-nav (sticky, left column 200 at ≥1280; a horizontal scroll chip row below that) with
scroll-spy, so no routing change is needed. Optional later: settings/<section> via
TABS_WITH_SUBPATHS, which PLAN §5 already allows.
| Sub-nav section | Existing components |
|---|---|
| General | MakerspaceGeneralSettings, MakerspaceProfileSettings, MakerspaceLocationSettings (incl. hours) |
| Branding & public site | MakerspaceBrandingSettings, MakerspacePublicStatsSettings, public print status lookup policy, MakerspaceSubdomainSettings, MakerspaceCustomDomainSettings |
| Features | MakerspaceFeatureSettings, SpacePacksPanel |
| Lending | loan, reminder and kit settings inside MakerspaceReminderSettings, KioskStationSettings |
| Membership | MakerspaceMembershipSettings, MakerspaceGeofenceSettings |
| Bookings | MakerspaceBookingSettings, MakerspaceBookingRulesSettings |
| Machines & materials | MakerspaceFilamentSettings |
| Money | MakerspacePaymentSettings, BillingDocumentsSettings |
| Notifications | staff email toggle, NotificationTimingSettings, NotificationMuteMatrix, NotificationRecipientPicker, NotificationDestinations |
| Email & integrations | MakerspaceEmailSettings, MakerspaceWebhookSettings, IntegrationHealthPanel |
| Privacy & evidence | Superadmin access, EvidenceRetentionPanel (and AbandonedUploadCleanupSection where it lives) |
| Danger zone | MakerspaceArchiveRequestPanel (the two-key archive request) as a P16 card |
- Every section is a P15 block: an
h2section title (20 bold), then rows with label and helper on the left and the control on the right. - Save model: instant toggles keep saving on change, with a toast “Staff emails turned off.” and, where the PATCH is symmetric, Undo by re-PATCHing the previous value. Text and field groups get a per-section Discard/Save pair that appears only when the section is dirty (sticky at the bottom of the viewport while that section is in view). Never one global Save for 30 sections.
- Status pills on rows (On/Off, “Token only”) stay; the button copy is the action (“Turn off access”).
- The “Manage my authenticator…” link moves to the user menu (§2.4); it is personal, not makerspace configuration.
- The
h1“Makerspace settings” is a test pin and is kept. The sidebar item reads “General”. - Loading: row skeletons per section. Error: per-section error with Retry (the sections load independently).
Part of Space Works UX spec, published from docs/ux-spec.md. Edit it there.