Gamification
At a glance
A complete gamification layer wraps the platform with achievement badges, milestones, XP and levels, fantasy petanque, prediction games, pick'em brackets, leaderboards, streaks, daily and seasonal challenges, club-vs-club battles and a polished celebration UX motor with reduced-motion safety — turning every match, every visit and every result into a moment worth coming back for.
How it works
The gamification engine is registry-driven. Every awardable event — first competition, 100th match, top-10 ranking, weekly streak, fantasy points scored — is declared in a central registry with thresholds, payloads and replay rules. The API emits events from the domain layer and a gamification worker evaluates rules, awards badges, increments XP and updates leaderboards atomically. XP grows from activity (playing, attending, predicting, posting) not just wins, so casual fans level up alongside competitors.
Fantasy petanque lets users build a dream squad from licensed players within a budget cap, then earns points based on real-world performance across selected competitions. Prediction games and pick'em brackets cover entire tournaments — fill in your bracket before round one, score points as the field plays out, climb the leaderboard. Live fan predictions let spectators predict the next end's score for cheap points and instant feedback during a televised final.
Challenges layer onto the same engine. Daily and weekly community challenges ("play 3 matches", "visit a new club") reward XP and badges. Club-vs-club mini-competitions aggregate member activity into team scores. Seasonal quests run for months ("play 30 matches, visit 5 venues, enter 3 tournaments"). Direct player challenges send a one-tap match invitation. Streaks track consecutive wins, weeks active, daily check-ins and prediction accuracy. Personal bests record best ELO, best tournament finish, longest streak and best fantasy week.
The celebration UX motor renders proportional confetti, banners and badge primitives — major moments get full celebration once per session (rate-limited), minor moments get subtle flourishes. It respects web `prefers-reduced-motion` and native `AppState` so animations never fire when minimised or when the user wants quiet. A personal-best comparison primitive uses staggered animations to reveal the new record next to the old one. An audit gate logs every awarded badge for support and dispute resolution.
Key capabilities
- Registry-driven achievements, milestones, XP and level system rewarding activity not just wins
- Fantasy petanque with budget caps and real-world scoring
- Prediction games, pick'em brackets and live fan predictions
- Daily, weekly, seasonal and direct challenges plus club-vs-club battles
- Streak and personal-best tracking across many dimensions
- Celebration UX motor with proportional confetti, banner and badge primitives
- Reduced-motion and background-safe playback plus audit gate on every award
In practice
A fan opens the app on tournament morning and sees their daily challenge: predict the winner of two quarter-finals. They tap, pick, lock in. Mid-afternoon a push lands — both predictions correct, +50 XP, level-up celebration plays once with a tasteful confetti burst.
They check their fantasy team and see their captain just scored a hat-trick of wins. The leaderboard tile updates live, climbing from #84 to #41. That evening they accept a club-challenge invitation from a rival, win their match, and watch the personal-best primitive stagger-reveal a new longest win streak.
A weekly summary card lists badges earned, XP gained, streaks alive — a quiet, satisfying loop that brings them back tomorrow.
Features in this subsystem
17| ID | Status | Features |
|---|---|---|
| F15.04.01 | Shipped | Achievement badges (first competition, 100 matches, etc.) — PL-F1504a ✅ PL-F1504a |
| F15.04.02 | Shipped | Milestone tracking and celebrations — PL-F1504a ✅ PL-F1504a |
| F15.04.03 | Shipped | Prediction game (predict competition outcomes) — PL-F1504a ✅ PL-F1504a |
| F15.04.04 | Shipped | Fantasy petanque (build dream team, earn points) — PL-F1504a ✅ PL-F1504a |
| F15.04.05 | Shipped | Leaderboards (most active player, most competitions, etc.) — PL-F1504a ✅ PL-F1504a |
| F15.04.06 | Shipped | Challenge system (challenge another player to a match) — PL-F1504b ✅ PL-F1504b |
| F15.04.07 | Shipped | Streak tracking (consecutive wins, active weeks) — PL-F1504b ✅ PL-F1504b |
| F15.04.08 | Shipped | Daily/weekly challenges (community-wide skill challenges) — PL-F1504b ✅ PL-F1504b |
| F15.04.09 | Shipped | Club challenges (club vs club in weekly mini-competitions) — PL-F1504b ✅ PL-F1504b |
| F15.04.10 | Shipped | Seasonal quests (play X matches, visit Y venues, enter Z tournaments) — PL-F1504b ✅ PL-F1504b |
| F15.04.11 | Shipped | XP and level system (based on activity, not just wins) ✅ PL-F1504c |
| F15.04.12 | Shipped | Personal bests tracking (best ELO, best tournament result, longest streak) ✅ PL-F1504c |
| F15.04.13 | Shipped | Fan predictions for live matches (predict score, earn points) ✅ PL-F1504c |
| F15.04.14 | Shipped | Pick'em brackets (predict entire tournament outcomes) ✅ PL-F1504c |
| F15.04.15 | Shipped | Celebration UX motor — proportional confetti / banner / badge primitives, registry-governed events, max-1-major-per-session rate limit, audit gate ✅ PL-T163 |
| F15.04.16 | Shipped | Reduced-motion + background-safe celebration playback (web prefers-reduced-motion + native AppState) ✅ PL-T163 |
| F15.04.17 | Shipped | Personal-best comparison primitive with stagger animation ✅ PL-T163 |
Stakeholders who need this subsystem
Surfaces in 3 stakeholder analyses