Inventory Management
Real-time stock tracking with AI demand forecasting, SKU search, and movement logs.
Overview
Inventory Management is the source of truth for all physical stock in your warehouse. It tracks real-time stock levels for every SKU, records every movement with a full audit trail, surfaces low-stock alerts before you run out, and provides an AI-powered demand forecasting panel that tells you which SKUs to reorder and when.
Ctrl+K Global Search
Press Ctrl+K anywhere to open an instant search overlay. Type a SKU code, product name, or category. The matching row highlights and scrolls into view immediately.
AI Demand Forecasting
The Predict Restock Dates panel calculates velocity per SKU and ranks urgency. Items needing immediate reorder are flagged red; monitoring items are flagged blue.
10-Period Sparklines
Each inventory row displays an SVG sparkline of the last 10 stock history periods. Green lines are trending up; red lines are declining — spot trouble at a glance.
Movement Log
The 8 most recent stock movements are always visible: in, out, and adjustments — each with actor, delta, product name, notes, and a relative timestamp.
Quick Start
- Switch to Warehouse mode (or Project Management mode — this screen is visible in both) using the mode switcher in the header.
- Click Stock & Inventory in the left sidebar.
- The inventory table loads with all active SKUs. Use the filter tabs to narrow by status.
- Press Ctrl+K at any time to instantly jump to any SKU by name, code, or category.
- Click the Predict Restock Dates button in the right sidebar to run AI demand forecasting across your entire catalog.
Keyboard Shortcut
Ctrl+K works everywhere on the page — you do not need to click a search box first. It is the fastest way to find a specific SKU in a large catalog. Press Escape to dismiss the overlay without navigating.
Adding a New Product
Click Add Product in the header bar (next to Export/Import) to create a brand-new SKU directly from this screen — no need to switch to Purchasing. The form asks for name, SKU, category, and cost price only.
New Products Start at 0 Stock
Creating a product here defines its identity (name, SKU, category, cost price) — it does not add stock. Every new product starts at 0 units. Use the existing stock-adjustment tools on this screen (or a Purchase Order receipt) to bring the quantity up once inventory physically arrives.
Products created from this screen are marked not sellable by default, so warehouse-only supplies (packing tape, pallets, internal consumables) don't clutter the product picker in Sales Quotations or POS. If a warehouse-created item should also be sold to customers, enable it from Purchase → Products & Variants ("Can Sell" flag).
SKU Is Unique — Saving Updates the Matching Product
Every product's SKU is unique across the warehouse catalog. If you save a product with a SKU that already belongs to another record — whether through Add Product here, the Purchasing product form, or a Purchase Products CSV import — that existing product is updated in place with your new values instead of a second, duplicate record being created. This applies everywhere the warehouse catalog is written to, since Sales, Purchase, POS, Pick & Pack, and Warehouse Link all share this one product list.
Dashboard Stat Tiles
Four summary tiles at the top of the screen give an instant health snapshot of your warehouse before you look at any individual row.
| Tile | What It Shows | Visual Alert |
|---|---|---|
| Total Stock Value | Sum of quantity × unit price for every active SKU in the warehouse |
None — informational |
| Stock Alerts | Count of Low Stock + Out of Stock items combined | Pulses orange when count is non-zero |
| Active Shipments | Incoming and outgoing shipments currently in transit | None — informational |
| Storage Capacity | Percentage of total warehouse slots currently occupied | Turns red when above 85% |
Inventory Table
The main table displays every active SKU. Each column is sortable. The table respects the active filter tab selection (All, In Stock, Low Stock, Out of Stock).
| Column | Description |
|---|---|
| SKU | Unique stock-keeping unit code displayed in monospace font for visual distinction |
| Item Name | Full product name as configured in the product record |
| Category | Product category — Electronics, Furniture, Networking, Safety, or Office Supplies |
| Status | Color-coded badge indicating current stock health (see Status Badges below) |
| Stock Level | Horizontal progress bar showing quantity / maxCapacity ratio, plus the raw unit count beside it |
| Trend | 10-period SVG sparkline — green if stock is generally increasing, red if declining |
| Location | Primary bin address in Building-Aisle-Shelf format (e.g. A-A1-S3) |
| Unit Price | Cost per single unit in USD, used for the Total Stock Value calculation |
Stock Status Badges
| Badge | Color | Condition |
|---|---|---|
| In Stock | Green | quantity > minThreshold |
| Low Stock | Yellow (pulsing) | 0 < quantity ≤ minThreshold |
| Out of Stock | Red | quantity = 0 |
Low Stock Pulsing Animation
Low Stock badges use a CSS pulse animation to draw the eye — they are designed to be noticed during a quick scan of a large table. If you are seeing many pulsing badges, click the Stock Alerts tile to filter down to only the affected rows and address them as a batch.
Ctrl+K Global Search
The Ctrl+K global search overlay is the fastest way to navigate a large catalog. It queries all active SKUs simultaneously across three dimensions:
- SKU code — exact or partial match (e.g.
MACmatchesMACBOOK-PRO-16) - Product name — case-insensitive substring match (e.g.
macbook) - Category — matches any product in the category (e.g.
electronics)
Results appear as you type. Press Enter or click a result row to jump directly to that product in the main table — the row highlights with a brief animation and scrolls into the viewport. Press Escape to close the overlay without navigating.
Example Searches
- Type
macbook→ Enter → jumps to the MacBook Pro row - Type
electronics→ shows all electronics category items; click one to jump - Type
OUT→ matches SKUs containing "OUT"; combine with the Out of Stock filter for a targeted reorder review
AI Demand Forecasting
Click Predict Restock Dates in the right sidebar panel to run the forecasting engine across your entire catalog. The engine uses the 10-period rolling stockHistory array stored per product to calculate demand velocity and project when each SKU will reach zero.
Reading a Prediction Card
Each SKU with a meaningful forecast appears as a card in the results panel, ranked from most urgent to least urgent.
| Field | Meaning |
|---|---|
| Days left | Estimated periods until stock hits zero at current consumption velocity |
| Velocity | Average units consumed per historical period (lower = slower-moving stock) |
| Recommend ordering | Suggested reorder quantity to refill to 80% of maxCapacity |
Urgency Color Coding
| Color | Days Left | Recommended Action |
|---|---|---|
| Red | 4 days or fewer | Order immediately — stockout is imminent |
| Yellow | 5–10 days | Plan a reorder this week |
| Blue | 11–29 days | Monitor closely — add to next regular PO |
How Velocity Is Calculated
The engine takes the 10-period stockHistory array (a rolling window of stock levels over past periods) and computes the average decrease per period. SKUs with erratic histories (large single drops followed by restocks) may show a higher velocity than their true consumption rate — review these manually before committing to a large reorder.
Movement Log
The Movement Log panel always shows the 8 most recent stock movements across all SKUs. Each entry includes all the information you need for a quick audit review without navigating away from the main screen.
| Element | Meaning |
|---|---|
| Direction arrow | ↓ green = stock in (receipt/return); ↑ red = stock out (pick/shipment); ⟳ blue = manual adjustment |
| Actor | The user or system process that created the movement |
| Quantity delta | +N for increases, −N for decreases |
| Product name | The SKU display name |
| Notes | Free-form reason or reference (e.g. PO number, adjustment reason code) |
| Time ago | Relative timestamp (e.g. "3 min ago", "yesterday") |
Investigating Discrepancies
If a SKU's stock level looks wrong, check the Movement Log first. A large unexpected −N entry may indicate a Pick & Pack commit that ran against the wrong bin, or a manual adjustment entered with an incorrect sign. All movements are immutable — corrections require a subsequent adjustment entry, not an edit of the original.
Batch Actions
Select one or more rows in the inventory table using the checkboxes in the leftmost column. Once at least one row is selected, the batch action toolbar appears above the table with the following actions:
- Print Labels — generates a printable label sheet for the selected SKUs. Each label includes the SKU code, product name, bin location, and a barcode.
- Bulk Edit — opens a modal to update shared fields (min threshold, max capacity, or category) across all selected rows simultaneously.
- ✕ Clear — deselects all rows and dismisses the batch toolbar.
Label Printing Workflow
To reprint bin labels for all Out of Stock items: click the 🔴 Out filter tab → Ctrl+A to select all visible rows → Print Labels. This generates a complete label sheet for the zero-stock SKUs so your team can update bin signage when stock arrives.
Appearance Follows List Style
The selection checkboxes and overall table layout are driven by the same List Style setting used across My Workspace list screens (Settings → Appearance). That single setting controls the checkbox shape (circle or square), whether a check icon is drawn inside a selected checkbox, the corner rounding of the table (sharp or rounded), and the row layout itself — table rows or a card-based grid. Switching to card layout replaces the table with individual product cards, each carrying its own selection control in the same shape and style. Any change you make in Settings → Appearance applies instantly here, with no page reload required.
Data Persistence
All inventory data is stored server-side via warehouseInventoryService.ts. There is no local storage involvement — all reads and writes go through the JSON API endpoint.
| Endpoint | File | Used For |
|---|---|---|
GET /api/data/warehouse-inventory | warehouse-inventory.json | Load all inventory products on screen open |
POST /api/data/warehouse-inventory | warehouse-inventory.json | Save all inventory changes (adjustments, edits) |
Product Data Shape
Each product record in the JSON store contains the following fields:
| Field | Type | Notes |
|---|---|---|
id | string | Unique identifier, used as the foreign key in pick-and-pack records |
sku | string | Human-readable stock code — must be unique across all products |
name | string | Display name shown in tables, pick lists, and labels |
category | string | One of the five supported categories |
quantity | number | Current on-hand units — updated by Pick & Pack commits and manual adjustments |
minThreshold | number | Low Stock alert trigger level |
maxCapacity | number | Maximum capacity of the assigned bin — used for the stock level progress bar and reorder recommendations |
price | number | Unit price in USD — used for Total Stock Value tile |
location | object | { building, aisle, shelf } — the three-part bin coordinate |
stockHistory | number[] | Rolling 10-period array used by the AI forecasting engine |
lastUpdated | string | ISO 8601 timestamp of the last quantity change |
stockHistory Array
The stockHistory array is maintained automatically as quantities change — do not manually edit it in the JSON file. If the history array is corrupted or empty, the AI forecasting engine will skip that SKU rather than display a misleading prediction. Truncated history arrays are treated as valid — the engine will use however many periods are available, with less confidence the shorter the history.
AI Assistant
Select one or more inventory items and open the AI Assistant panel to analyze stock levels, identify stock-outs and reorder needs, and get demand-based optimisation suggestions grounded in your actual inventory data.
Click Attach Knowledge in the assistant's bottom dock to ground its answers in your My Knowledge library — your own sources, or anything a colleague has shared tenant-wide.
Opening the panel does not cover the inventory table. The main content area shrinks to make room on the right edge of the screen, so the table remains visible (at a narrower width) while you continue chatting with the assistant. Closing the panel smoothly restores the table to full width.
Frequently Asked Questions
warehouseInventoryService directly to deduct stock. The inventory table therefore reflects the committed quantities immediately — there is no sync delay. When you return to Inventory Management after completing an order in Pick & Pack, the quantities will already be updated.minThreshold and a single primary bin location. If you store the same SKU in multiple bins, the recommended approach is to use the Bulk Edit action to set the threshold at the total combined quantity level, and manage bin allocation manually through the location field and movement notes.−N entries. If the spike was a one-off event, the next few restock periods will bring the velocity estimate back to its true level.