openfrontio / openfrontio/OpenFrontIO
[Feature] Store bundles — grouped cosmetic packs
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 1.4k
- Avg merge
- 17h 43m
- Merged PRs (30d)
- 310
Description
## Summary
Add a **Bundles** tab to the in-game store allowing players to purchase grouped cosmetic packs at a discounted price compared to buying items individually.
## Motivation
Bundles are a proven AOV (average order value) driver in games like Clash of Clans and Fortnite. A player who might not buy three individual items at full price will frequently convert on a bundle at 20–30% off. They also surface items players may not have discovered and reduce decision fatigue.
## UI requirements
- New **Bundles** tab in the store alongside Packs / Skins / Flags
- Each bundle card displays: item icons, bundle name, description, strikethrough individual price, bundle price, and a green savings badge ("Save 30%")
- Epic/Legendary tier bundles have a distinct border colour
- Masters Bundle is gated — visible only to confirmed tournament participants
## Backend requirements
- Bundle entity in DB: array of item SKUs + bundle price + discount %
- Atomic purchase — all items granted on single Stripe transaction success
- Idempotency via Stripe session ID (consistent with existing purchase pattern)
- Bundles refund as a unit — no partial item refunds
## Bundle management (backend API)
Bundles must be fully configurable via the backend API without requiring code changes. The creation flow should work as follows:
- Create a new bundle (name, price, discount %, active/inactive status)
- Once created, attach items to the bundle using typed input fields per category:
- **Currency pack** — input: Currency Pack ID
- **Cosmetic** — input: Cosmetic ID
- Multiple items of each type can be added to a single bundle
- As new cosmetic categories are introduced (e.g. emotes, crowns, name styles), new typed input fields should be addable to the bundle builder without schema changes — the item type list should be extensible
- Removing or reordering items within a bundle should also be supported via the API
Contributor guide
Assessment
This issue has not been assessed yet.