# Detailed User Stories and Acceptance Criteria ## 1. Conventions Each story is written in the format: > As a [user], I want [capability], so that [benefit]. Acceptance criteria are intentionally testable and product-specific. These stories can be imported into an implementation backlog and split further by engineering if needed. Priority labels: - **P0:** Required for MVP launch. - **P1:** Strong launch enhancer. - **P2:** Future or expansion. ## 2. Epic: Onboarding and Identity ### UP-01 — Start a Passport **Priority:** P0 **Story:** As a new fan, I want to start a Fan Passport quickly, so that I can begin collecting and playing without a long setup. Acceptance criteria: - Given I am a first-time visitor, when I open the product, then I see a welcome screen explaining the passport concept. - Given I choose to continue as guest, when I confirm, then a guest passport is created. - Given I choose to create an account, when account creation succeeds, then a persistent passport is created. - Given I abandon onboarding after passport creation, when I return, then I can continue from the last completed step. - Given passport creation fails, then I see a recoverable error and no duplicate passport is created. ### UP-02 — Upgrade Guest Passport **Priority:** P0 **Story:** As a guest user, I want to upgrade to an account, so that I do not lose tournament progress. Acceptance criteria: - Given I have guest progress, when I create or sign into an account, then my guest progress is attached to that account. - Given merge succeeds, then my XP, Passport Points, predictions, badges, collections, quiz history, stamps, and settings are preserved. - Given merge fails, then my guest passport remains usable and I receive a clear retry message. - Given I already have account progress, then the product prevents accidental destructive overwrite and explains the merge outcome. ### UP-03 — Choose Favorite Team **Priority:** P0 **Story:** As a fan, I want to choose my favorite team, so that my journey is personalized. Acceptance criteria: - Given teams are available, when I search or browse, then I can select one favorite team. - Given I select a team, then Home, team challenges, and relevant reminders use that team. - Given I skip selection, then I can choose later from Profile or Journey. - Given I change favorite team later, then historical progress remains tied to actions already completed. - Given my team is eliminated, then my team history remains visible and I am offered continuation options. ### UP-04 — Set Country or Region **Priority:** P0 **Story:** As a fan, I want to choose a country or region, so that I can join relevant leaderboards if I want. Acceptance criteria: - Given I am in onboarding, when I reach country/region selection, then I can choose a region or “prefer not to say.” - Given I choose a region, then I can decide whether it appears publicly. - Given I choose not to provide a region, then I can still use the core product. - Given I change region visibility, then public leaderboard/profile surfaces update accordingly. ### UP-05 — Set Privacy Preferences **Priority:** P0 **Story:** As a user, I want privacy controls, so that I can decide what is public. Acceptance criteria: - Given I open privacy setup, then I can choose public, friends-only, or private visibility. - Given I select private, then I do not appear on public leaderboards. - Given I select friends-only, then only approved friends or invite-group members can see my leaderboard row where supported. - Given I generate a share card, then I can preview what information is included. - Given I hide country or favorite team, then those fields are not shown on public profile or share cards. ### UP-06 — Edit Profile **Priority:** P0 **Story:** As a user, I want to edit my display name and avatar, so that my passport feels personal. Acceptance criteria: - Given I open Profile settings, when I update display name or avatar, then the change is saved. - Given my display name violates moderation rules, then it is rejected with clear guidance. - Given I update avatar, then leaderboard and profile surfaces reflect the change. - Given I am private, then profile updates remain hidden from public surfaces. ### UP-07 — Delete or Export Data **Priority:** P1 **Story:** As a user, I want account data controls, so that I can manage my personal data. Acceptance criteria: - Given I open account settings, then I can request data export where legally required or product-supported. - Given I request deletion, then I see consequences before confirming. - Given deletion completes, then personal profile data is removed or anonymized according to policy. - Given leaderboard archive needs aggregate integrity, then deleted users are anonymized where legally permitted. ## 3. Epic: Daily Home and Tournament Journey ### DJ-01 — View Today’s Actions **Priority:** P0 **Story:** As a returning fan, I want a Today screen, so that I know what to do next. Acceptance criteria: - Given I open Home, then I see daily stamp, daily trivia, active predictions, challenges, and relevant collection rewards. - Given predictions are closing soon, then they appear above lower urgency modules. - Given there are no matches today, then Home still shows trivia, collection, recap, or upcoming actions. - Given I complete an action, then the module updates to completed or next-step state. - Given Home data is delayed, then I see last updated time or loading state. ### DJ-02 — Claim Daily Passport Stamp **Priority:** P0 **Story:** As a fan, I want to stamp my passport each day, so that I build a tournament memory. Acceptance criteria: - Given I have not stamped today, when I tap the daily stamp CTA, then the stamp is added to my timeline. - Given the stamp is awarded, then I receive the configured XP and Passport Points once. - Given I tap stamp again the same day, then I see already-stamped state and no duplicate reward. - Given I miss a day and have a streak freeze, then the product offers to apply it according to streak rules. - Given the tournament is over, then daily live stamps are no longer awarded but archive content remains available. ### DJ-03 — See Daily Summary **Priority:** P0 **Story:** As a user, I want a summary of rewards earned, so that progress feels clear. Acceptance criteria: - Given I complete one or more actions, then I can see XP, Passport Points, badge progress, and collection changes. - Given multiple rewards are earned, then the summary groups them without losing detail. - Given a badge unlock occurs, then the summary links to the badge detail. - Given a collection item is earned, then the summary links to the album page. - Given no competitive points were earned, then the summary still shows XP or progress honestly. ### DJ-04 — Browse Tournament Overview **Priority:** P0 **Story:** As a fan, I want to browse the tournament structure, so that I can follow groups, matches, and knockout progress. Acceptance criteria: - Given the tournament is in group stage, then overview shows groups and standings if available. - Given knockout bracket is known, then overview shows bracket structure. - Given I tap a group, match, team, or stadium, then I navigate to the correct detail screen. - Given data is not yet available, then the screen explains when it will be available. - Given a match result is updated, then overview reflects it after data refresh. ### DJ-05 — Continue After Favorite Team Elimination **Priority:** P1 **Story:** As a national team supporter, I want the product to remain meaningful after my team is eliminated, so that I keep playing. Acceptance criteria: - Given my favorite team is eliminated, then Home acknowledges the journey respectfully. - Given I completed favorite-team criteria, then relevant badges unlock. - Given my team is eliminated, then I am offered adopt-a-team, knockout predictions, collections, and trivia challenges. - Given I adopt a team, then new prompts use that team without erasing original favorite-team history. ### DJ-06 — View Rest-Day Content **Priority:** P0 **Story:** As a fan, I want meaningful rest-day activities, so that I return even without matches. Acceptance criteria: - Given there are no live or upcoming matches today, then Home shows daily stamp, trivia, collection, recap, and upcoming prediction actions. - Given a rest-day challenge is active, then it appears on Home. - Given bracket predictions are open, then rest-day Home promotes them. - Given all rest-day actions are complete, then Home shows progress and tomorrow teaser. ## 4. Epic: Teams, Matches, Stadiums, and Stamps ### TS-01 — Browse Teams **Priority:** P0 **Story:** As a fan, I want to browse teams, so that I can discover fixtures and collection progress. Acceptance criteria: - Given I open Teams, then I see all qualified teams. - Given I filter by group or search name, then results update. - Given I tap a team, then I see team detail with fixtures, group, status, and related badges. - Given visual rights are not available, then neutral team presentation is used. ### TS-02 — View Team Journey **Priority:** P0 **Story:** As a supporter, I want to see my team’s journey, so that I can track loyalty progress. Acceptance criteria: - Given I open favorite team detail, then I see completed and upcoming team-related actions. - Given I stamp or predict a team match, then team journey progress updates. - Given the team advances, then knockout fixtures are added. - Given the team is eliminated, then the final status and earned memories remain visible. ### TS-03 — Browse Matches **Priority:** P0 **Story:** As a fan, I want to browse fixtures, so that I can decide which matches to follow or predict. Acceptance criteria: - Given I open Match List, then I can filter by date, team, group, phase, stadium, and prediction status. - Given a match is upcoming, then I see kickoff time in my local timezone. - Given a match is final, then I see result. - Given a match is postponed, then status and revised timing are clear. - Given I have not predicted an open match, then the list can indicate prediction needed. ### TS-04 — View Match Detail **Priority:** P0 **Story:** As a fan, I want a match detail page, so that I can predict, stamp, and review results. Acceptance criteria: - Given a match is upcoming and open, then I can navigate to prediction entry. - Given a match prediction is locked, then I see my locked pick but cannot edit. - Given a match is live or final, then I can claim a match stamp if rules allow. - Given result settlement is pending, then the page says points are being verified. - Given result settlement is complete, then I see points earned and scoring breakdown. ### TS-05 — Collect Match Stamp **Priority:** P0 **Story:** As a fan, I want to stamp matches I follow, so that my passport records tournament memories. Acceptance criteria: - Given a match is eligible for stamping, when I tap stamp, then a match stamp is added to my timeline. - Given I already stamped the match, then no duplicate stamp or reward is awarded. - Given the match is postponed or void, then stamp availability follows admin-configured match status. - Given a stamp contributes to a badge or challenge, then progress updates. ### TS-06 — Browse Stadiums **Priority:** P0 **Story:** As a collector, I want to browse stadiums, so that I can collect all venues. Acceptance criteria: - Given I open Stadiums, then I see all tournament venues. - Given I tap a stadium, then I see host city, matches hosted, collection status, and facts where available. - Given a stadium collectible is owned, then owned state and acquisition date are shown. - Given all stadiums are collected, then Stadium Collector badge unlocks according to criteria. ### TS-07 — Complete a Group **Priority:** P1 **Story:** As a completionist, I want to complete every group, so that I can unlock group achievements. Acceptance criteria: - Given I open a group detail page, then I see required teams/items/actions for group completion. - Given I collect all required group items and complete required match actions, then the group is marked complete. - Given a group is complete, then the corresponding group badge and rewards are awarded once. - Given all groups are complete, then Every Group Complete achievement unlocks. ## 5. Epic: Predictions ### PR-01 — Submit Match Prediction **Priority:** P0 **Story:** As a fan, I want to predict a match result, so that I can compete and test my football instincts. Acceptance criteria: - Given a match prediction market is open, when I select outcome and score, then I can save my prediction. - Given I save, then I receive confirmation with timestamp and lock time. - Given the prediction is saved, then it appears in Match Detail and Prediction Hub. - Given I submit invalid score input, then I see validation and cannot save until corrected. - Given submission fails, then I see retry and no false confirmation. ### PR-02 — Edit Prediction Before Lock **Priority:** P0 **Story:** As a fan, I want to edit predictions before kickoff, so that I can react to new information. Acceptance criteria: - Given my prediction is saved and lock time has not passed, when I edit it, then the new prediction replaces the prior prediction. - Given I edit, then updated timestamp is recorded. - Given I return to the match, then the latest saved prediction is shown. - Given lock passes while I am editing, then saving is rejected and locked state is displayed. ### PR-03 — Prevent Edits After Lock **Priority:** P0 **Story:** As a competitor, I want predictions locked fairly, so that leaderboards are trusted. Acceptance criteria: - Given server lock time has passed, then prediction inputs are disabled. - Given a user attempts submission after lock, then it is rejected even if UI still looked open. - Given a match kickoff time changes before lock, then lock time updates. - Given a match is already live, then no new prediction can be submitted. - Given prediction is locked, then user can view but not alter it. ### PR-04 — Settle Prediction Points **Priority:** P0 **Story:** As a predictor, I want my predictions scored after results, so that I know how I performed. Acceptance criteria: - Given a match result is final and verified, when settlement runs, then each locked prediction receives points based on scoring rules. - Given I predicted the correct outcome, then I receive outcome points. - Given I predicted exact scoreline, then I receive exact scoreline bonus. - Given I predicted correct margin but not exact score, then I receive margin bonus if rules allow. - Given prediction is incorrect, then I receive no prediction PP for result but keep submission XP. - Given settlement completes, then Prediction History shows breakdown. ### PR-05 — Handle Voided or Corrected Matches **Priority:** P0 **Story:** As a user, I want unusual match outcomes handled transparently, so that scoring feels fair. Acceptance criteria: - Given a match is voided, then predictions are marked void and no result points are awarded. - Given a match is corrected after settlement, then scoring rerun creates an adjustment event. - Given my points change after correction, then I see previous points, new points, and reason. - Given a match is postponed before lock, then prediction availability follows updated kickoff. - Given a match is abandoned after lock, then admin-configured settlement policy is visible. ### PR-06 — Declare Giant Killing **Priority:** P1 **Story:** As a fan, I want to predict a giant killing, so that bold calls feel special. Acceptance criteria: - Given a match is eligible, then the prediction screen shows a giant killing option and why it is eligible. - Given I declare a giant killing before lock, then the declaration is saved with my prediction. - Given I remove the declaration before lock, then it no longer counts. - Given the lower-ranked eligible team wins or advances according to rule, then giant killing points and badge progress are awarded. - Given the declaration is wrong, then no giant killing PP is awarded. - Given a match is ineligible, then I cannot declare it. ### PR-07 — Submit Champion Prediction **Priority:** P1 **Story:** As a fan, I want to predict the tournament champion, so that I have a long-term stake in the journey. Acceptance criteria: - Given champion prediction is open, then I can select one team. - Given I save champion prediction, then confirmation and lock deadline are shown. - Given lock deadline passes, then I cannot edit champion prediction. - Given selected team wins tournament, then champion prediction reward and badge are awarded. - Given I join after champion prediction lock, then I see that the challenge is closed and can participate in later phase challenges. ### PR-08 — Submit Knockout Bracket **Priority:** P1 **Story:** As a prediction competitor, I want to fill a knockout bracket, so that I can compete during the knockout stage. Acceptance criteria: - Given knockout bracket is known and bracket predictions are open, then I can select advancing teams through the bracket. - Given I save a complete bracket, then it appears in Prediction Hub. - Given bracket lock passes, then bracket selections cannot be changed. - Given actual winners are known, then bracket points are awarded by round. - Given I did not submit a bracket, then I can still make individual match predictions. ### PR-09 — View Prediction Leaderboard **Priority:** P0 **Story:** As a competitor, I want to see prediction rankings, so that I know how I compare. Acceptance criteria: - Given predictions have settled, then Prediction Pro leaderboard ranks users by prediction score. - Given users are tied, then documented tie-breakers apply. - Given I am private, then my row is hidden from public ranking but visible to me if allowed. - Given a score correction occurs, then leaderboard updates and shows last updated time. ## 6. Epic: Daily Trivia ### QZ-01 — Complete Daily Quiz **Priority:** P0 **Story:** As a trivia fan, I want a daily World Cup quiz, so that I have a reason to return every day. Acceptance criteria: - Given today’s quiz is available, when I start it, then I receive the configured number of questions. - Given I answer all questions, then the quiz completes and results are calculated. - Given I exit mid-quiz, then product either preserves in-progress attempt or clearly restarts without awarding duplicate points. - Given quiz content is unavailable, then Home shows a recoverable error and alternative action. ### QZ-02 — Enforce One Scored Attempt **Priority:** P0 **Story:** As a leaderboard participant, I want quiz attempts limited, so that trivia competition is fair. Acceptance criteria: - Given I complete today’s scored quiz, then I cannot earn additional PP from the same daily quiz. - Given I reopen quiz, then I can review results and explanations. - Given practice mode exists, then it is clearly marked as non-scored. - Given I try to submit another scored attempt through refresh or another device, then it is rejected. ### QZ-03 — Show Quiz Results and Explanations **Priority:** P0 **Story:** As a fan, I want explanations after trivia, so that I learn from the quiz. Acceptance criteria: - Given I complete quiz, then I see correct count, points, XP, and streak impact. - Given I review answers, then each question shows correct answer and explanation. - Given I earned perfect score, then I see perfect quiz reward and share option. - Given a question is invalidated later, then affected users see correction notice. ### QZ-04 — Maintain Quiz Streak **Priority:** P1 **Story:** As a daily user, I want a quiz streak, so that returning feels rewarding. Acceptance criteria: - Given I complete daily quiz on consecutive product days, then streak increments. - Given I miss one day and have a streak freeze, then freeze can be consumed to preserve streak. - Given I have no freeze and miss a day, then streak resets with compassionate copy. - Given streak milestone is reached, then badge or reward unlocks. ### QZ-05 — Support Difficulty Mix **Priority:** P1 **Story:** As a casual and expert fan, I want varied trivia difficulty, so that quizzes feel fair and interesting. Acceptance criteria: - Given a daily quiz is scheduled, then it includes an approved difficulty mix. - Given a question is hard, then explanation teaches the answer. - Given a locale changes, then questions are reviewed for local clarity. - Given a question is ambiguous, then admins can retire or invalidate it. ## 7. Epic: Collections ### CL-01 — View Album Progress **Priority:** P0 **Story:** As a collector, I want to view my album, so that I know what I have collected. Acceptance criteria: - Given I open Album, then I see overall and category progress. - Given I open a category, then owned and missing items are visually distinct. - Given I tap an owned item, then I see item details and acquisition date. - Given I tap a missing item, then I see ways to earn or craft it. - Given official art rights are unavailable, then neutral artwork is used. ### CL-02 — Earn Collection Pack **Priority:** P0 **Story:** As a fan, I want to earn packs through play, so that collections reward engagement. Acceptance criteria: - Given I complete a pack-awarding action, then a pack is added to my available packs. - Given I have an unopened pack, then Home and Album show it. - Given a reward action is retried, then it does not create duplicate packs. - Given pack source has expired after being earned, then earned pack remains openable unless product rules state otherwise. ### CL-03 — Open Pack **Priority:** P0 **Story:** As a collector, I want to open packs, so that I can add items to my album. Acceptance criteria: - Given I open a pack, then items are awarded before or atomically with reveal. - Given an item is new, then it fills the album slot. - Given an item is duplicate, then duplicate count and Craft Tokens update. - Given network error occurs after award, then retry does not double-award and user can view awarded items. - Given pack opening animation is skipped, then items are still visible in summary. ### CL-04 — Craft Missing Item **Priority:** P1 **Story:** As a collector, I want to use duplicates to craft missing items, so that completion feels achievable. Acceptance criteria: - Given I have enough Craft Tokens, then I can craft eligible missing items. - Given I craft an item, then tokens are deducted and item is added. - Given I do not have enough tokens, then crafting is disabled with cost explanation. - Given an item is achievement-only or non-craftable, then it cannot be crafted and reason is shown. - Given crafting completes a set, then set completion rewards are awarded. ### CL-05 — Complete Collection Set **Priority:** P0 **Story:** As a completionist, I want set completion rewards, so that collecting has milestones. Acceptance criteria: - Given all required items/actions for a set are complete, then the set changes to complete state. - Given a set completes, then configured badge, XP, PP, and share moment are awarded once. - Given I revisit completed set, then completion date and reward history are visible. - Given a correction removes an item due to fraud/error, then set completion can be reviewed according to moderation policy. ### CL-06 — Collect All Stadiums **Priority:** P0 **Story:** As a stadium collector, I want to collect all stadiums, so that I can complete a major tournament challenge. Acceptance criteria: - Given stadium items exist, then Album shows stadium collection progress. - Given I acquire each stadium item, then progress reaches 100%. - Given all stadiums are collected, then Stadium Collector badge unlocks. - Given stadium data changes, then admin can update stadium list without corrupting owned items. ### CL-07 — Complete Every Group **Priority:** P1 **Story:** As a collector, I want to complete every group, so that I can chase a legendary tournament goal. Acceptance criteria: - Given each group has defined completion criteria, then users can view progress per group. - Given all groups are complete, then Every Group Complete badge unlocks. - Given group composition changes before tournament start, then completion criteria update before users are unfairly locked out. - Given a group challenge expires, then completed group history remains visible. ### CL-08 — Share Collection Progress **Priority:** P1 **Story:** As a collector, I want to share completed sets, so that I can show progress to friends. Acceptance criteria: - Given I complete a set, then share card option appears. - Given I preview card, then it shows set name, completion status, and privacy-safe profile fields. - Given I hide display name, then card uses anonymous or generic label. - Given I share link, then recipient sees public landing page without private album access. ## 8. Epic: Badges, Challenges, XP, and Levels ### BA-01 — View Badge Cabinet **Priority:** P0 **Story:** As a user, I want a badge cabinet, so that I can see achievements and goals. Acceptance criteria: - Given I open Badge Cabinet, then I see unlocked and locked badges. - Given a badge has visible progress, then progress is displayed. - Given a badge is secret, then it is hidden or shown as secret according to rules. - Given I filter by category or tier, then list updates. - Given I tap a badge, then detail page opens. ### BA-02 — Unlock Badge **Priority:** P0 **Story:** As a fan, I want badges to unlock when I meet criteria, so that achievements feel responsive. Acceptance criteria: - Given I complete badge criteria, then badge unlocks once. - Given badge unlocks, then XP and PP rewards are awarded according to badge tier. - Given badge has share moment, then share preview is available. - Given criteria are met through corrected data, then unlock occurs after recalculation. - Given criteria are not met, then badge remains locked with progress preserved. ### BA-03 — Track Challenge Progress **Priority:** P0 **Story:** As a user, I want challenge progress, so that I know what to do next. Acceptance criteria: - Given an active challenge exists, then it appears in Challenge Hub. - Given I complete a related action, then challenge progress updates. - Given challenge expires, then it moves to archived state. - Given challenge completes, then rewards are claimable or automatically awarded once. - Given a challenge links to an action, then CTA navigates correctly. ### BA-04 — Level Up **Priority:** P0 **Story:** As a user, I want XP levels, so that I feel long-term progress. Acceptance criteria: - Given I earn XP and cross level threshold, then my level increases. - Given I level up, then I see a level-up moment. - Given level grants cosmetic or pack reward, then reward is awarded once. - Given XP events are corrected, then level recalculation follows product policy and is explained if downgraded. ### BA-05 — Complete Daily Mission **Priority:** P0 **Story:** As a daily user, I want a mission each day, so that the product gives me direction. Acceptance criteria: - Given a daily mission is active, then Home shows it. - Given I complete its criteria before daily reset, then mission completes. - Given mission reward is awarded, then it cannot be claimed again. - Given mission expires incomplete, then it no longer appears as active. - Given there is no matchday, then a rest-day mission is available. ### BA-06 — View Rule Explanation **Priority:** P0 **Story:** As a competitor, I want to understand scoring and badges, so that progress feels fair. Acceptance criteria: - Given I view a score breakdown, then I can access explanation of scoring rules. - Given I view a badge, then criteria and reward are visible unless secret. - Given rules change, then help content reflects current version. - Given a correction affects me, then explanation includes reason and affected source. ## 9. Epic: Leaderboards ### LB-01 — View Overall Leaderboard **Priority:** P0 **Story:** As a competitive fan, I want to view the overall leaderboard, so that I can compare my passport score. Acceptance criteria: - Given leaderboard data exists, then Overall leaderboard shows rank, display name, avatar, score, and user row. - Given I am outside the top list, then my own row is still accessible to me. - Given leaderboard is delayed, then last updated time is displayed. - Given I opted out of public visibility, then I do not appear publicly. ### LB-02 — View Filtered Leaderboards **Priority:** P0 **Story:** As a user, I want leaderboards by prediction, trivia, collection, friends, region, and favorite team, so that competition matches my interests. Acceptance criteria: - Given I open Leaderboard Hub, then I can switch leaderboard type. - Given I choose Prediction Pro, then ranking uses prediction score rules. - Given I choose Trivia Masters, then ranking uses trivia score rules. - Given I choose Collectors, then ranking uses collection score rules. - Given I choose Friends, then only eligible friends/invite members appear. ### LB-03 — Apply Tie-Breakers **Priority:** P0 **Story:** As a ranked user, I want ties resolved consistently, so that ranking is trusted. Acceptance criteria: - Given users have equal Passport Points, then documented tie-breakers are applied. - Given all meaningful tie-breakers are equal, then deterministic stable ordering is used. - Given I open leaderboard rules, then tie-breaker order is visible. - Given a score changes, then rank recalculates using the same rules. ### LB-04 — Respect Privacy **Priority:** P0 **Story:** As a private user, I want leaderboard privacy respected, so that I can play safely. Acceptance criteria: - Given I set profile to private, then I am hidden from public leaderboards. - Given I set friends-only, then only friend leaderboard surfaces can include me. - Given I generate a public share card, then it does not override leaderboard privacy. - Given I change privacy setting, then leaderboard visibility updates promptly. ### LB-05 — Moderate Suspicious Scores **Priority:** P1 **Story:** As an operator, I want to hide suspicious leaderboard entries, so that competition remains fair. Acceptance criteria: - Given an account is flagged, then admin can hide it from public leaderboards pending review. - Given hidden, then the user’s personal progress remains accessible unless account is banned. - Given review clears account, then leaderboard visibility can be restored. - Given score events are invalid, then recalculation removes them and logs reason. - Given moderation action occurs, then audit log records actor, time, and reason. ### LB-06 — Archive Final Leaderboard **Priority:** P0 **Story:** As a fan, I want final standings preserved, so that the tournament has a lasting record. Acceptance criteria: - Given the final match is settled, then leaderboard enters provisional final state. - Given correction window ends, then leaderboard is marked archived. - Given archived, then ranks remain visible but no new tournament points change them except exceptional admin correction. - Given I view archive, then I can share final rank if privacy allows. ## 10. Epic: Sharing and Social Moments ### SH-01 — Generate Share Card **Priority:** P0 **Story:** As a user, I want to generate share cards, so that I can celebrate my passport moments. Acceptance criteria: - Given I unlock a shareable moment, then share card CTA appears. - Given I open share preview, then I see exact visual and included data. - Given I confirm share, then I can copy link, save image, or use native share where available. - Given share generation fails, then I can retry without losing the moment. ### SH-02 — Protect Share Privacy **Priority:** P0 **Story:** As a user, I want to control what share cards reveal, so that sharing is safe. Acceptance criteria: - Given I preview a card, then display name, region, and favorite team visibility follow settings. - Given I toggle hide name, then preview updates. - Given my profile is private, then product warns that the card/link may be public before sharing. - Given a recipient opens card, then they cannot access private profile details. ### SH-03 — Join From Shared Link **Priority:** P1 **Story:** As a recipient, I want to start my own passport from a shared card, so that I can join the experience. Acceptance criteria: - Given I open a shared link, then I see the public moment landing page. - Given I choose to start, then onboarding begins. - Given the share includes friend invite context, then I can join the friend leaderboard after creating a passport. - Given the source user is private, then only allowed moment information is shown. ### SH-04 — Invite Friends **Priority:** P1 **Story:** As a fan, I want to invite friends, so that we can compete privately. Acceptance criteria: - Given I create invite link/code, then I can send it to friends. - Given a friend joins through code, then they appear in friend leaderboard according to privacy settings. - Given an invalid or expired code is entered, then clear error appears. - Given I remove a friend, then they no longer appear in my friend leaderboard view. ## 11. Epic: Notifications and Return Loops ### NT-01 — Prediction Deadline Reminder **Priority:** P1 **Story:** As a fan, I want prediction reminders, so that I do not miss kickoff locks. Acceptance criteria: - Given I opt into prediction reminders, then I can receive reminders for favorite team or selected matches. - Given a match locks soon and I have not predicted, then reminder can be sent. - Given I already predicted, then reminder is not sent unless configured as edit reminder. - Given quiet hours apply, then notification is delayed or suppressed according to settings. - Given I opt out, then no further prediction reminders are sent. ### NT-02 — Daily Trivia Reminder **Priority:** P1 **Story:** As a trivia user, I want daily quiz reminders, so that I maintain my streak. Acceptance criteria: - Given I opt into trivia reminders, then reminder can be sent if quiz incomplete. - Given I complete quiz, then reminder for that day is suppressed. - Given I am at risk of streak break, then reminder copy can mention streak. - Given I opt out, then reminders stop. ### NT-03 — Result Settlement Notification **Priority:** P1 **Story:** As a predictor, I want to know when my points are ready, so that I return after matches. Acceptance criteria: - Given a match I predicted is settled, then I can receive notification. - Given I earned a notable result such as exact score or giant killing, then notification uses celebratory copy. - Given I earned zero points, then notification uses neutral copy or can be suppressed based on settings. - Given a correction occurs, then notification can explain adjusted score if material. ### NT-04 — Notification Preferences **Priority:** P1 **Story:** As a user, I want notification controls, so that I am not overwhelmed. Acceptance criteria: - Given I open notification settings, then I can toggle categories individually. - Given I disable all, then non-essential notifications stop. - Given OS/browser permission is denied, then product explains how to enable without blocking. - Given quiet hours are set, then notifications respect them where technically possible. ## 12. Epic: Admin and Live Operations ### AD-01 — Manage Fixtures **Priority:** P0 **Story:** As an operator, I want to manage fixtures, so that match content is accurate. Acceptance criteria: - Given I create or update a fixture, then fan-facing match screens reflect the change. - Given kickoff time changes before prediction lock, then lock time recalculates. - Given a match is postponed, then status is visible and predictions follow policy. - Given admin edits fixture, then audit log records actor, timestamp, and fields changed. ### AD-02 — Enter and Verify Results **Priority:** P0 **Story:** As an operator, I want to enter verified results, so that predictions can settle. Acceptance criteria: - Given a match is final, then admin can enter score and winner/advancement data. - Given result is saved as verified, then settlement can run. - Given result is incomplete for knockout match, then settlement cannot complete until advancement winner is set. - Given result changes after settlement, then correction workflow is required. ### AD-03 — Run Settlement **Priority:** P0 **Story:** As an operator, I want to settle predictions reliably, so that points are awarded accurately. Acceptance criteria: - Given verified result exists, when settlement runs, then all eligible predictions are scored. - Given settlement is retried, then duplicate points are not awarded. - Given settlement fails midway, then retry resumes safely. - Given settlement completes, then match status shows settled and users can view breakdown. - Given settlement uses scoring rules, then rule version is recorded. ### AD-04 — Manage Trivia **Priority:** P0 **Story:** As a content editor, I want to create and schedule trivia, so that daily quizzes are ready. Acceptance criteria: - Given I create a question, then it can be saved as draft. - Given a question is reviewed, then it can be scheduled. - Given a daily quiz is scheduled, then it contains the required number and difficulty mix. - Given a question error is found, then it can be retired or invalidated. - Given a question is invalidated after play, then correction workflow can recalculate affected attempts. ### AD-05 — Manage Badges and Challenges **Priority:** P0 **Story:** As an operator, I want to configure badges and challenges, so that live gameplay can adapt to the tournament. Acceptance criteria: - Given I create a challenge, then I define criteria, window, and rewards. - Given a challenge is active, then users can see and progress it. - Given challenge expires, then it stops accepting progress. - Given badge criteria are changed, then a new rule version is created. - Given a badge is archived, then unlocked users keep it. ### AD-06 — Manage Collection Items and Packs **Priority:** P0 **Story:** As an operator, I want to configure collectibles, so that the album works throughout the tournament. Acceptance criteria: - Given I create a collectible, then category, rarity, art rights status, and album page are set. - Given I configure a pack, then source, item pool, and duplicate behavior are defined. - Given item rights are restricted, then fan-facing product uses neutral or hidden asset state. - Given pack rules change, then new pack openings use new version without changing past awards. ### AD-07 — Moderate Leaderboards **Priority:** P1 **Story:** As an operator, I want to review leaderboard anomalies, so that rankings remain credible. Acceptance criteria: - Given an account is flagged, then admin can review score events. - Given invalid events are found, then admin can remove or reverse them with reason. - Given account is cleared, then public visibility can be restored. - Given action is taken, then audit log records it. - Given user score changes materially, then user-facing correction can be shown. ### AD-08 — Send Live-Ops Notifications **Priority:** P1 **Story:** As an operator, I want to schedule notifications, so that users return for key moments. Acceptance criteria: - Given I create notification campaign, then I choose audience, copy, send time, and category. - Given users opted out of category, then they are excluded. - Given quiet hours apply, then send behavior follows policy. - Given a campaign is sent, then delivery and engagement metrics are tracked. ### AD-09 — View Analytics **Priority:** P1 **Story:** As a product operator, I want analytics dashboards, so that I can monitor health and engagement. Acceptance criteria: - Given I open analytics dashboard, then I see DAU, retention, predictions, quiz completion, collection activity, leaderboard views, and shares. - Given data has a delay, then dashboard shows last updated time. - Given a matchday spike occurs, then dashboard can segment by matchday/rest day. - Given a funnel drops, then product team can identify affected step. ## 13. Epic: Post-Tournament and Expansion ### EX-01 — View Final Passport Recap **Priority:** P0 **Story:** As a fan, I want a final recap, so that I can remember my World Cup journey. Acceptance criteria: - Given the tournament is complete and final data is available, then recap is generated. - Given I open recap, then I see stamps, predictions, quiz stats, collections, badges, favorite-team journey, and final ranks. - Given leaderboard is provisional, then recap labels ranking as provisional. - Given final archive is ready, then recap can be shared. ### EX-02 — Archive World Cup Passport **Priority:** P0 **Story:** As a user, I want my World Cup passport preserved, so that progress is not lost after the event. Acceptance criteria: - Given live tournament ends, then passport becomes available in archive mode. - Given archived, then historical badges, stamps, collections, and predictions remain viewable. - Given new World Cup actions are closed, then product clearly marks them unavailable. - Given corrections are finalized, then archived leaderboard is stable. ### EX-03 — Start a New Passport **Priority:** P1 **Story:** As a returning fan, I want to start a Premier League or Champions League passport, so that my football journey continues. Acceptance criteria: - Given a new passport is available, then existing account can activate it. - Given I start new passport, then my global identity persists while competition-specific progress starts fresh. - Given I view Passport Hub, then I can switch between archived World Cup and active passport. - Given new competition has different format, then challenges and badges reflect that format. ### EX-04 — Preserve Cross-Passport Identity **Priority:** P1 **Story:** As a long-term fan, I want my overall football identity to grow across competitions, so that loyalty carries forward. Acceptance criteria: - Given I complete World Cup passport, then legacy badges can appear in global profile. - Given I start another passport, then competition-specific leaderboards start at zero. - Given I earn cross-passport XP or cosmetics, then they do not create unfair competitive advantage in new passport. - Given I view global profile, then I can choose which passport highlights are public. ## 14. Cross-Cutting Acceptance Criteria ### 14.1 Scoring Integrity - Every XP, Passport Point, Craft Token, badge, collection, or streak change must be traceable to a source action. - Reward events must be idempotent. - Corrections must preserve audit history. - User-facing totals must equal the sum of valid scoring events. ### 14.2 Time Integrity - User-facing match times display in local timezone. - Prediction lock decisions use trusted server time. - Daily reset is consistent and documented. - Expired actions cannot be completed through stale clients. ### 14.3 Accessibility - All interactive controls are keyboard and screen-reader accessible. - Color is not the only indicator of status. - Motion-heavy reward animations have reduced-motion fallback. - Quiz and prediction forms provide clear labels and errors. ### 14.4 Privacy - Public surfaces use display name, not legal name or email. - Users can hide country/region and favorite team. - Private users do not appear on public leaderboards. - Share previews show exactly what will be exposed. ### 14.5 Rights and Content Safety - Assets have rights status before publication. - Restricted official assets are not shown without license. - Trivia questions are reviewed before publication. - User-facing copy avoids insulting teams, nations, or fans. ## 15. MVP Backlog Cut Recommendation If implementation time is constrained, preserve this order: 1. Identity and onboarding. 2. Home Today. 3. Fixtures and match detail. 4. Prediction submission, lock, settlement. 5. Daily trivia. 6. Passport stamp. 7. Basic badges/challenges. 8. Collection album and packs. 9. Overall and prediction leaderboards. 10. Share cards. 11. Admin fixture/result/trivia/challenge tooling. 12. Privacy and help/rules. 13. Friend/region/favorite-team leaderboard filters. 14. Giant killing and bracket prediction. 15. Crafting and advanced collection balancing. 16. Final recap and Passport Hub. The first twelve are the minimum credible MVP. The remaining items materially improve retention and expansion but can be phased if necessary.