Skip to content

loobric-server 0.14.0 — catalogs, dashboard, account backup

Choose a tag to compare

@sliptonic sliptonic released this 16 Aug 20:46
· 5 commits to master since this release

Added

  • Catalogs: named collections of catalog records (grilled 2026-08-16 — the one-giant-pile problem). A Catalog is a sectioned record (canonical.name + provenance-tagged members) at /api/v1/catalogs. Membership is organization, never identity: many-to-many, uncataloged records allowed (surfaced as Uncataloged), deleting a catalog deletes no records, and the account-wide natural key is untouched. Importers auto-catalog each run — records land in a catalog named from the source, idempotently. The Web UI Catalog tab groups by catalog; each record's page gets a membership checklist.
  • Account backup: GET /api/v1/account/export — the owner-operated escape hatch (first slice of #46): one zip with every record collection as sectioned JSON, labels, referenced media blobs, and a manifest. The Account tab gains a "Download backup (.zip)" card.

Changed

  • Web UI: /ui/ lands on a dashboard — attention first (pending proposals, NOT READY setups), then count cards per area, then a map of how the pieces fit.
  • Web UI: every list is a table (presets-table style) with browse-level row actions: tools (rename/retire/delete), machines, tool sets, catalog records, set members, and the Labels lists.
  • Web UI: all label printing lives on the Labels tab — blank labels plus a spec-label section with one kind combo (spec QR+specs / spec plaque / inventory QR-only), stock picker, and tool multiselect with select-all/deselect-all.
  • DEPLOYMENT.md: media persistence is part of the sample compose — the database volume alone does not persist media; a redeploy without a MEDIA_DIR volume silently discards every blob.

Removed

  • The v1 ManufacturerCatalog table and router (an R6 slice): deep-model substrate unreachable from the v2 facade, squatting on the name and route the first-class Catalog needed. Migration 0008 drops the table; v1 rows are pre-facade data, deliberately not migrated.