All docs

Products & SKUs

Everything you sell or stock should have a product record. The product table is the source of truth that POs, sales, write-offs, and reports all hang off of.

Adding a product

Open Products → New product. The minimum fields are SKU and name; everything else can be filled in later.

SKU naming. Pick a format and stick with it. SKUs are workspace-scoped, so they only need to be unique to you. Common patterns:

  • BRAND-LINE-VARIANT — e.g. RR-TH for Royal Red tee holder
  • CATEGORY-NUMBER — e.g. WIDGET-001
  • Mirror your Shopify variant SKUs so imports auto-match

Reorder point. When on-hand drops below this number, the SKU shows up on the dashboard's Low stock card. Set this once you have a feel for sell-through; leave it blank until you do.

Reorder qty. How many to reorder when you re-up. Used as a default on new POs.

Lead time (days). How long the supplier takes to deliver. Drives reorder-by-date math.

Hidden vs. archived

Products live in three states:

  • Active — the default; shows everywhere, available on POs and sales
  • Hidden — kept on the books but hidden from the main list. Use for products you've stopped selling but might bring back
  • Archived — soft-deleted. Excluded from queries; won't show on POs or imports. Use when you're sure you're done

You can toggle hidden/archived from the product detail page.

Simple vs. bundle

  • Simple — tracked directly. Receive, sell, count, write off. The default
  • Bundle — assembled from component SKUs. A "Holder + 10 tees" product is really 1 holder + 1 bag-portion of tees. Bundles need an assembly step before they can be sold (see Assembly)

Bundle component editing is currently done in Prisma Studio (npm run db:studio). The dedicated UI is on the roadmap.

Shopify import

If you sell on Shopify, Settings → Shopify lets you connect your store. Once connected, Integrations → Shopify products lists every Shopify product with three options per row:

  • Link to existing — match the Shopify variant to a product you already have
  • Create new — pull the variant in as a new product
  • Skip — never import this variant

Multi-pack support is built in: a single product can be the inventory source for multiple Shopify variants via a units per order multiplier (e.g. one CC-PYN product supplies both 1-pack at units=1 and 2-pack at units=2).

Costs and visibility

Cost columns (landed unit cost, line totals, COGS) are gated by the costs:view permission. Owner, Admin, and Accountant see them. Fulfillment and Viewer roles do not. This is enforced at the page level and cannot be bypassed by URL.