Home / Help Center / pos-app-garment / garment / Style Lifecycle
🗃️ garment

Style Lifecycle

Style Lifecycle lets you manually tag every product with a merchandising stage — Intro, Peak, Slow Mover or Clearance — so the whole team can see at a glance which styles to reorder, promote or mark down.

📍 Menu path: /garment/style-lifecycle
👤 Who uses it: Owner,Manager

Overview

Every product in the catalogue (up to 500, fetched once via GET /products) is listed with a set of four stage buttons: Intro (new arrival — just launched), Peak (best seller — reorder recommended), Slow Mover (below target — consider promotion), and Clearance (end of life — mark down to clear).

Clicking a stage button saves it immediately via PUT /products/:id with a single field, { lifecycleStage: 'PEAK' } (etc.); clicking the currently-active stage again clears it back to untagged (null).

Stage counts, filter chips (All / Intro / Peak / Slow Mover / Clearance / Untagged) and a live search box (by name or SKU) all work off the same in-memory product list, so switching filters is instant with no extra network calls.

Before You Start

Step-by-Step Guide

1 Tag a style with its current stage

  1. Find the product using the search box (matches name or SKU) or by browsing the full list.
  2. Click the stage button that matches where the style currently sits — Intro, Peak, Slow Mover, or Clearance — on that product's row.
  3. The badge next to the product name updates immediately and the change saves to the server without a separate Save step.
💡 Clicking the same stage button a second time removes the tag entirely (sets it back to untagged) rather than toggling between stages.

2 Review stock by stage

  1. Use the stage summary chips at the top (All, Intro, Peak, Slow Mover, Clearance, Untagged) to filter the list to just that group, each with a live count.
  2. Combine a stage filter with the search box to find a specific style within that stage.

Every Field & Button, Explained

Field / ButtonWhat it does
Stage summary chipsAll / Intro / Peak / Slow Mover / Clearance / Untagged — each shows a live count and filters the list below when clicked.
Search boxFilters the already-loaded product list by name or SKU as you type; no separate server call.
Product rowShows product name, SKU, category and season (when set), plus its current stage badge (if tagged) and the four stage buttons.
Intro buttonTags the product lifecycleStage = INTRO ("new arrival — just launched").
Peak buttonTags the product lifecycleStage = PEAK ("best seller — reorder recommended").
Slow Mover buttonTags the product lifecycleStage = SLOW_MOVER ("below target — consider promotion").
Clearance buttonTags the product lifecycleStage = CLEARANCE ("end of life — mark down to clear").
Stage badgeColoured pill shown next to a tagged product's name (Intro indigo, Peak green, Slow Mover amber, Clearance red); absent for untagged products.

Tips & Best Practices

Troubleshooting & FAQ

Does the stage change automatically based on how well a style is actually selling?
No — every stage on this page is set manually by clicking a button. There is no sales-velocity, stock-age or reorder-based calculation behind it; a style tagged Peak will stay Peak indefinitely until a staff member changes it.
I clicked a stage button and the badge disappeared instead of changing.
Clicking the stage that is already active on a product clears the tag back to untagged rather than leaving it set — click a different stage button instead if you meant to change it, not remove it.
The stage button looked stuck / greyed out for a moment.
Each row disables its buttons briefly while the PUT /products/:id save is in flight for that specific product, to prevent double-clicks; it re-enables once the save completes.
Tagging a product Clearance didn't change its price or add it to a promotion.
Style Lifecycle only writes the lifecycleStage field on the product — it has no side effects on pricing, discounts or promotions; apply those separately from the Products or Promotions pages.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/pos-app-garment/src/pages/garment/StyleLifecyclePage.jsx

Backend endpoints used:

  • GET /products
  • PUT /products/:id

Related tables (db-core repositories):

  • Product (lifecycleStage TEXT column)

Redux slices:

  • None — local component state only

Feature flag key: inventory

lifecycleStage is a plain free-text column added directly to the generic Product table (see the `ALTER TABLE "Product" ADD COLUMN IF NOT EXISTS "lifecycleStage" TEXT` migrations in backend/src/lib/db.js) rather than a garment-specific table, so it rides on the same generic PUT /products/:id endpoint used everywhere else in BazaarPOS. This is entirely a manual tagging tool — despite "lifecycle" implying automation, there is no cron job, sales-velocity calculation, or stock-age logic anywhere in this component or its backend call that ever sets or changes the stage on its own; every transition is a direct user click. A useful future enhancement (not currently built) would be to auto-suggest Slow Mover/Clearance based on days-since-last-sale or sell-through rate, similar to how Season Comparison already aggregates historic sales data elsewhere in the garment variant.