Stock forecasts that tell you when not to trust them
A buyer deciding how much to reorder is betting under uncertainty, but most tools show one number with no sense of how wrong it might be. StockProphet, our own product, tests every forecast and only gives a firm reorder quantity when the forecast has earned it.
The situation
StockProphet is our own inventory forecasting product for merchants who sell on WooCommerce, Magento 2 and Amazon. It syncs orders and stock, forecasts demand for each product 90 days ahead, and turns the forecast into reorder decisions.
What made it hard
A single forecast number hides how wrong it might be. A buyer who acts on a bad forecast loses money, and a buyer burned once stops trusting the tool.
What we did
- Tested each product’s forecast against recent sales before showing a reorder quantity. When the error is too high, the page says the forecast is not stable enough and holds back a firm number.
- Switched slow sellers, where most days have no sales, to a method built for that pattern.
- Removed out-of-stock days from training, so an empty shelf never reads as zero demand.
- Showed a forecast band and the test error next to every recommendation, so the buyer can see why the number is what it is.
- Gave every product a clear status (healthy, watch, reorder or out) with a quantity and a reorder-by date when the forecast passes.
- Kept the merchant in control: the system never sends a purchase order or changes a price without their click.
- Put the forecasting behind its own HTTP contract, so the Python model and the Laravel app can change without touching each other.
Before and after
What we would do differently
We reviewed our own marketing against the product and rewrote every claim the product could not demonstrate. Our next step is a published accuracy result on a public dataset, with the evaluation script beside it.
Built with
Laravel · Vue · Inertia · Python · Prophet · PostgreSQL · Amazon SP-API
Related picks
An airline’s marketing team publishes without a developer
Editors build their own pages in three languages. The public site holds no database and no credentials, so the booking path stays out of reach.
One pickup map for every checkout
The last screen before a shopper pays had been copied into every plugin, and each copy had drifted. Now one phone-first widget serves every platform and brand, and a fix lands everywhere at once.
Ready to build something great?
Tell us what’s breaking, or what you need built. You talk to the engineer who does the work.
