One preorder slot, instant sell-through
The problem
Fashion outfits on the Central Market sell the moment they list. Players can only hold one preorder at a time. Most buyers aren't chasing the look — they want Crons (materials that protect gear during upgrades), so choosing the wrong preorder slot wastes the only shot you get.
Why it matters
Queue depth and item velocity vary wildly by outfit, region, and week. Gut feel fails when you cannot see trade history or estimate how many competitors are ahead of you in line.
Real-world parallel
Like auction sniping or allocating one scarce resource slot across competing options — the domain is a game market, but the decision shape is familiar to capacity and queue planning.
Approach
Daily Central Market snapshots land as star-schema Parquet on Cloudflare R2 (item dimension plus per-category trade facts). The React app fetches signed objects, parses them client-side, and rolls up velocity windows aligned to BDO's Thursday-anchored week — read-heavy analytics with zero database maintenance.
Preorder queue depth is not exposed by the game, so you enter your estimate. Each listing is modeled as a lottery with win rate 1/(queue+1). Sale opportunities come from a volatility-aware weekly estimate (weekday seasonality plus recent 7-day spread), with a dynamic queue bump on fast movers so hot outfits don't look artificially easy. Cumulative fill likelihood, dry-spell risk, and pace roll up over your chosen window.
Outcome
The main table ranks by trades-per-day this week and surfaces modeled fill likelihood — outputs are probabilistic guides, not guarantees. A comparison view lets you stress-test two to ten candidates with per-item queue estimates and shareable URLs, so the one preorder slot goes to the best opportunity, not the loudest name.
Technical details
Win rate per listing: 1 / (preorders + 1), including your own slot.
Dynamic sniping buffer: +3 to +10 extra queue on high-velocity items for conservative variance.
Home table uses 10% of estimated daily sales as effective opportunities; the comparison page exposes full sensitivity presets (conservative / balanced / aggressive).
Retired upstream categories (apparel_pieces) are filtered at load so bad ingest rows never surface in the UI.
See the live dashboard or report this write-up describes.
Open marketplace dashboard