# Product ## Problem This inventory is not sunglasses. There are no size/color variations of one SKU. Every slab is a unique unit and a unique listing: unique photos, categorization, title, short title, description, price, and tags. Shooting photos is tedious. The work that makes the business run starts after the photos exist: produce a listing a buyer can find, filter, and want on the product page. ## What "done" means A slab is ready to create on WooCommerce when all of this is present: - One or more inventory photos (uniform appearance on the site) - SKU, length, thickness, price - Species, wood category, edge type, figure, grade - Thickness band, moisture - At least one `fig-*` tag - Title, short title, description - `feat-*` tags optional Species + one figure is not enough. The store taxonomy (categories, attributes, `fig-*` / `feat-*` tags) is the filter system. Copy sits on top of measured facts. ## Who decides | Field | Who | |---|---| | Length, thickness | User types | | SKU | User types | | Mask / crop | App proposes, user approves on the photo | | Widths, sqft, bdft | App computes from the approved reference photo + length/thickness | | Species, wood category, edge, figure, grade, tags | App may propose; user reviews; all editable | | Price | App proposes `bdft × species $/bdft`; user may override | | Title, short title, description | Templates from facts; optional Generate text later; user edits | Non-math decisions stay mutable until submit. Math follows `docs/CAPTURE.md`. ## After Slice 1 - Templates always build title / short title / description from facts. LLM prose is optional and never required to publish. - FastAPI is the only Woo caller. Browser never holds store secrets. - Practice SKUs `SLAB-UAT-*` create as **draft** even if settings say publish. - Duplicate SKU stops the create. No update path in this version. - Vision / Call 1 / Call 2 only after a manual listing path works. Inference off must still produce a complete listing. Depth that is no longer live: `docs/archive/CONTENT-WOO.md`, `docs/archive/DATA-MODEL.md`, `docs/archive/PROMPTS.md`.