Part of the Simple Agility stack. Canonical copy:
~/source/stockroom/docs/superpowers/specs/2026-10-05-stockroom-barcode-inventory-design.md. This page mirrors the decisions for retrieval. It follows StockroomIntakeInventoryPricingDesign and the phase 3 build (StockroomPhase3ListingPreparationPlan). Status: draft for operator review, 2026-10-05.
Stockroom takes books into stock by scanning their ISBN, and records where items are (room, shelf, bin). It has no physical layer that scanning can drive. That means no barcodes of its own, no containers that move, no scanning into places, no finding by scan, no picking and no counting. The operator reopened this deferred scope because inventory across several sales channels (FBA, eBay, Craigslist, possibly Facebook Marketplace) is about to become critical.
The work is split in two:
| Topic | Decision |
|---|---|
| Crates | A movable location kind. Items point at their crate, so moving the crate moves its contents. A crate sits in a room or on a shelf, never in a bin or another crate. Bulky items can sit directly on a shelf or floor spot. |
| Printed labels | Code 128, encoding I-<SKU> for items and L-<code> for places and crates. The codes are derived from the thing itself, so no table is needed and any label can be reprinted. |
| Pre-printed stickers | A registry binds an opaque sticker code to an item or a location on first scan. Codes in Stockroom's own format are refused, and so are codes already bound to something else. |
| Item labels | Optional. Unlabeled identical copies are interchangeable. A copy whose condition differs gets its own label, and its listing describes that copy. |
| Scan resolution | Checked in this order: Stockroom's own codes, then bound stickers, then product barcodes (ISBN, UPC, EAN), then a typed SKU, then unknown, which offers to bind the code as a sticker. A product barcode means a copy in the crate or place currently being worked in; otherwise a chooser lists the copies. |
| Scanning devices | One scan bar for both. The handheld scanner types into it. A camera button decodes through the browser's barcode detector, or a ZXing WebAssembly polyfill on iPhone. The camera needs HTTPS, which comes from a Cloudflare proxy. |
| Jobs | Intake straight into a crate; place (put-away); move a crate; find; pick (from FBA, buyback, lot or ad hoc sources); count. Counts and picks are sessions stored on the server. |
| Missing items | A finished count marks unfound items as missing and lists them in a Missing queue. Nothing is deleted, and an item scanned later is no longer missing. |
| Printing | Printer-agnostic PDF, one label per page, rendered on the server with PDFBox and ZXing. Bar widths land on whole printer dots (203 or 300 dpi). Default sizes: item 2.25 x 1.25 in, crate 4 x 6 in, shelf or bin 2.25 x 1.25 in. |
One implementation plan, which becomes rollout phase 4 ahead of photo-first identification. It needs HTTPS through the Cloudflare proxy before the camera can be used.