Platform
Features
Everything the PackSpinner engine ships today, and what is next on the roadmap.
- 60
- features
- 51
- complete
- 9
- on the roadmap
01
For iGaming Operators
Pack opening sits at the intersection the industry has been converging on: the session mechanics of slots, the tangible-prize appeal of e-commerce, and the social proof of live drops. For an operator, PackSpinner is a new content vertical with familiar levers:
| Feature | Description | Status |
|---|---|---|
| A house edge you configure | Applied through a transparent pricing model — not a black box. | Complete |
| GGR / NGR / promo-cost reporting | On a single ledger, designed for the metrics your finance team already runs. | Complete |
| Provably fair outcomes | A stronger fairness story than certified-RNG-only content, and self-servable by the player. | Complete |
| Prizes with residual value | Winners ship the product or cash out instantly — the cash-out path recycles value back through the wallet, and every step of it is on the ledger. | Complete |
02
The player experience
The core loop, and everything that surrounds it.
| Feature | Description | Status |
|---|---|---|
| Pack opening | Players buy and open packs on an animated spinner reel (horizontal and vertical variants), landing on a product determined by the provably fair roll. Rarity tiers (Grey → Blue → Purple → Red → Gold) drive card styling, glows and border-flash effects throughout. | Complete |
| Provably fair, player-verifiable | Outcomes derive from HMAC(server seed, client seed:nonce) over a 1,000,000-ticket space. The server seed is committed by SHA-256 hash before play and revealed on rotation; players can set their own client seed and verify every historical open from their account's fairness page. | Complete |
| Demo mode | A no-auth, no-cost, client-side-only preview of the full opening experience — the acquisition funnel starts before signup. | Complete |
| Bonus spin mechanic | An optional per-pack feature: at configured odds (1-in-N), the open upgrades into a spin across gold-tier items only. | Complete |
| Free spins | Zero-cost opens of a specific pack using the normal product pool and odds — the standard promo currency. | Complete |
| Multi-pack opens | Several packs opened in one session with staged spins and a single bulk-settled transaction. | Complete |
| Live social proof | The packs page carries a Top Opens showcase and a polling Live Opens feed; the home page runs a featured-pack hero carousel and an ambient product-flow animation — all fed by real catalogue data. | Complete |
| Catalogue browsing | Pack grid with load-more pagination and filter bar: sort (newest / price up / price down), volatility tier, and CMS-managed price-range buckets; player selections persist across visits. | Complete |
| Exchange marketplace | Players swap items they've won for other catalogue products, with the value difference settling against their wallet — implemented as an atomic sell-then-buy with full ledger audit. | Complete |
| Internationalisation | Locale-prefixed routing via next-intl; English and French shipped, structure ready for more. | Complete |
| Cash out or ship | Any won item can be sold back to the house at its current value (credited to the wallet) or kept for fulfilment. Sales history, pack history and exchange history are all self-serve account pages. | Roadmap |
| Battles | Single- or multi-player games where players open packs against one another. | Roadmap |
03
Player account management
Self-serve account area (locale-prefixed, session-gated), so support load stays low and the fairness story is in the player's own hands.
| Feature | Description | Status |
|---|---|---|
| Authentication | Email & password sign-in on Better-Auth with database-backed sessions and soft-deleted session history for audit. Self-serve signup is disabled by default — accounts are provisioned by the operator, which suits operators who onboard players through their own KYC'd flow. | Complete |
| Single sign-on (SSO) | Sign in with the operator's existing identity provider, so players use one account across the operator's properties. | Roadmap |
| Wallet at a glance | Navbar balance dropdown showing the segregated Cash / SalesCredit / Bonus balances; in-app deposit modal (development) with the payment-provider path abstracted for production. | Complete |
| Profile | Username with live availability check, profile picture upload or a generated avatar. | Complete |
| Bonuses | Every offer the player has opted into, filterable by status and trigger type, with a detail view and self-serve cancellation (opt-out) that settles locked items through the normal sale path. | Complete |
| Deposits | Full deposit history with transaction id, amount, method (card, PayPal, manual, test) and status lifecycle. | Complete |
| Pack history | Every open with opening type (product / bonus spin), the product won and its value, plus the provably fair inputs per open — client seed, server seed, nonce, ticket number. | Complete |
| Sales history | Per-item record of everything sold back to the house, tagged by source (player sale, bonus cancellation, exchange). | Complete |
| Exchange history | Every marketplace swap the player has made, item by item. | Complete |
| Fairness | The player's provably fair console: view and change the client seed, see the committed server-seed hash and current nonce, and a verifier that recomputes the ticket number for any past open from its seeds and nonce. | Complete |
| 2FA | Two-factor authentication on the player account. | Roadmap |
| Session management | Players can see their sessions and terminate any of them if necessary; the session model already keeps soft-deleted history, so terminations stay auditable. | Roadmap |
| Inventory (cart) | The player's won items with provenance, ready to ship, sell back, or exchange. | Complete |
| Language | Per-player locale switching (English / French shipped). | Complete |
04
The commerce layer
| Feature | Description | Status |
|---|---|---|
| Real product catalogue | Products carry gross (tax-inclusive) pricing, images, types and vendor associations. A voucher product type renders a generated SVG with the face value — no artwork pipeline needed for cash-equivalent prizes. | Complete |
| Cart / inventory | Won items land in a per-user cart (inventory) with per-item provenance: which open, which transaction, which bonus lock state. | Complete |
| Sell-back | Per-item audit records of every sale back to the house, with the bonus/cash/sales-credit split preserved. | Complete |
| Vendors and catalogue management | Admin tooling for building packs from the product base. | Complete |
05
The economics engine
The part built for an operator's spreadsheet.
| Feature | Description | Status |
|---|---|---|
| EV-based pack pricing | openingPrice = EV × (1 + houseEdge), where EV is the probability-weighted product value, with bonus-spin-adjusted effective probabilities when the mechanic is enabled. House edge and tax rate are site-level settings. | Complete |
| Probability model | Per-product roll ranges (percent, 4dp) map deterministically to consecutive ticket ranges over the 1M-ticket space — the same numbers drive the odds shown, the provably fair math, and the pricing. | Complete |
| Volatility tiers | Each pack's payout variance is computed (probability-weighted standard deviation vs. opening price) and classified Low / Medium / High — surfaced to players as a filter and to operators as a portfolio-shaping tool. | Complete |
| Monte Carlo validated | An integration test suite opens packs at scale against the real database and asserts realised RTP/edge converges to the configured economics — the pricing maths is continuously proven, not assumed. | Complete |
06
Promotions & retention
| Feature | Description | Status |
|---|---|---|
| Bonus offers | Opt-in + trigger promotions (deposit-matched funds, fixed no-deposit amounts, free-spin bundles, promo codes) with an industry-standard amortisation lifecycle: bonus value is revocable until the wagering target is met, then converts; cancellation, forfeiture and expiry paths are all modelled and ledgered. | Complete |
| Segregated wallet balances | Cash / SalesCredit / Bonus are separate balances per currency, so tax liability, promo liability and withdrawable funds never blur. | Complete |
| Promo cost accounting | Every unit of house-funded promotional value is tracked net of recycling on the ledger, so the true cost of a campaign is one aggregate query. | Complete |
| Affiliate program & tracking | Tracked referral links with attribution of sign-ups and deposits to the referring affiliate, plus commission reporting. | Roadmap |
| Retention offers | Bonuses for existing players, customised to each player's spend profile. | Roadmap |
07
Money, ledger & reporting
| Feature | Description | Status |
|---|---|---|
| Deposits | Via payment-provider or admin-manual paths, with status lifecycle; a confirmed deposit both credits the wallet and triggers any opted-in bonus offer atomically. | Complete |
| Transaction ledger | Every balance movement is a Transaction with allocations across the three balances; bulk flows (multi-pack opens, exchanges, cart settlements) write once at the end of the flow for scalability. | Complete |
| Casino-grade reporting fields | stakeAmount, payoutAmount, grossWin, promoCost and taxAmount live on the ledger itself — GGR, NGR, promo cost and tax-adjusted views are single-aggregate queries, no joins or special cases. | Complete |
| VAT handling | Gross pricing convention throughout, with remitted tax tracked separately on paid opens. | Complete |
08
Operator tooling
| Feature | Description | Status |
|---|---|---|
| Admin suite | Role-gated: packs and pack-product composition with roll-range editing and automatic ticket-range/pricing recalculation, product and vendor management, user management with per-user dashboards, manual deposits, wallet spins, bonus offer authoring, sessions, and site settings. | Complete |
| Setup wizard | First-run configuration (site name, currency, house edge, tax). | Complete |
| Headless CMS | Payload 3 for editorial content — legal pages, FAQs, and merchandising data like the price-range filter buckets — with a role bridge to the platform's auth, drafts/versioning, localisation, and cache invalidation on publish. | Complete |
| Site settings | Default currency, house edge, tax type/rate, maintenance mode — cached and invalidated on save. | Complete |
09
Platform & engineering
| Feature | Description | Status |
|---|---|---|
| Stack | Next.js (App Router) + tRPC + Prisma on CockroachDB (horizontally scalable, Postgres-compatible), Better-Auth, Turborepo monorepo, deployed on Vercel; S3-compatible or Vercel Blob media storage. | Complete |
| Performance discipline | Compositor-only animation throughout the front end (profiled at a locked 60fps), bulk SQL writes at the end of money flows, and read-through runtime caching with explicit invalidation for hot reads. | Complete |
| Async event bus | Decouples side-effects from request handling. | Complete |
| Test depth | Unit + integration suites (real database), Playwright e2e, and the Monte Carlo economics suite. | Complete |
| Provable fairness as code | The verification algorithm is documented and reproducible by a third party. | Complete |
10
Commercial fit
| Feature | Description | Status |
|---|---|---|
| White-label surface | Branding (site name, currency, locale content, CMS pages, hero/marketing sections) is configuration and content, not code forks. | Complete |
| Operator-shaped controls | House edge, tax, pack economics, volatility mix, and promotional budgets are all operator-tunable levers with guardrails. | Complete |
| Payment-provider integration | The deposit path is abstracted; production deployments integrate the operator's PSP of choice. | Roadmap |
| Multi-currency wallets | Wallets are single-currency per site today; the schema is multi-currency-ready (one balance row per currency). | Roadmap |
