objects of interest

Cabinet - under the hood

"use client";
import { useEffect, useRef } from "react";
import JsBarcode from "jsbarcode";

export function Barcode({ value }) {
  const ref = useRef<SVGSVGElement>(null);
  useEffect(() => {
    if (!ref.current || !value) return;
    JsBarcode(ref.current, value, { format: "CODE128" });
  }, [value]);
  return <svg ref={ref} />;
}
The Cabinet drawer icon, glowing electric blue.

Centralized management of jewellery stock across all business locations — own stores, franchises, warehouses, online. Version 1.5.0

What's inside · 01

01CatalogueEvery piece with stones, photos, documents and cost — plus an auto Code-128 barcode and printable labels.
02Scan anythingPhone camera or USB / Bluetooth scanner, working globally on any screen — unknown codes offer to create the piece.
03Stock & locationsQuantities and value per shop and warehouse, with transfers and stocktakes.
04Sell & servePoint-of-sale, sales history, customers and online-listing tracking.
05Roles & securityAdmin, manager, seller and marketing — per-location row-level security, with cost locked to admins.
06Insight & alertsAnalytics, slow-moving stock, pending transfers and sync errors, surfaced live with a badge count.

Details & tech · 02

App router, server actions
Next.js 15
Type safety
TypeScript 5
Postgres, auth, storage, RLS
Supabase
Import & export
SheetJS (xlsx)
Camera scanning
html5-qrcode
Frontend interface
React 19
Design
Tailwind CSS 4
Analytics
Recharts
Barcodes
JsBarcode · Code-128
Icons
lucide-react

Shipped in five phases · 03

P1FoundationsFourteen-table schema, products with stones & documents, auto barcodes, camera and USB scanning, locations and stock.
P2RolesFour roles with a stored permission matrix, per-location row-level security, cost isolated at the database level.
P3MovementTransfers between locations with receipt confirmation, and full stocktake flows.
P4TradePoint-of-sale, sales history, customers, and online-listing tracking.
P5PolishInstallable PWA, live notifications, print-ready labels, bulk import, and a warm dark theme.

Cost is invisible below admin — enforced in the database, not the interface.

The security model · 04

The Cabinet roles administration screen.

Roles & permissions, in production

For the team

cabinet.mstcollective.com ↗
© 2026 mst collective. all rights reserved. objects of interest