Skip to main content

Proposal: EXP System

Updated 2026-06-19 — EXP no longer pays cash

The reward model moved on. Cash now comes from quests, not from EXP/levels (see Reward Economy, the accepted direction). EXP is still the progression currency, but it advances a Season tier track that unlocks cosmetics and status, not money. The EXP math below stands (1 validated min = 1 EXP, plus quest bonuses, plus a party multiplier); wherever this page says EXP levels grant cash, read that as superseded — levels are now Season tiers with cosmetic unlocks.

Status — draft for review, not shipped

Owner: Tom · 2026-06-18. The user-facing progression currency. Pairs with the Home View Directions mockups, where the EXP bar is the centre of the home view. Nothing here is shipped.

Formalizes EXP as the single progression currency for Playroll, so that casual play and quests feed one bar. This sits inside the existing rules in playroll-ui (CLAUDE.md): hours = system truth, Levels + XP = the user-facing layer, the XP bar is the single source of truth for progress, and rewards are status, not destinations. EXP is that XP layer, now given an explicit unit.


1. The base unit

1 validated minute of recording = 1 EXP. (So 1 hour = 60 EXP.)

  • "Validated" — EXP accrues from minutes that pass the validation pipeline, not raw recorded time. This keeps the bar honest (idle/fake/menu time doesn't pay) and aligns with the "validated hours = truth" direction. Consequence: EXP lands with a short delay after a session, not live during recording.
  • "Generic recording" — base EXP is earned by any eligible recording, quest or not. Just playing an eligible game earns EXP. This is the casual-play floor of the system.
  • Source of truth: validated session duration (recording_sessions validated state → quest_participations.validated_seconds for quest sessions; the same validated-minutes figure for non-quest sessions).

Softening the validation delay (UX)

Because base EXP is validated-only, a freshly recorded session shows as "pending EXP" until validation completes, then converts to earned EXP. This preserves honesty while giving immediate feedback (mirrors the existing recorded · uploaded · validated breakdown in DailyRecordingStatus).


2. Quests add EXP on top

Quests are the lever that lets us reward toward the same bar without changing the base math:

  • A quest grants a flat EXP bonus on completion (quest_rewards.kind = 'xp', amount = EXP), and optionally per-qualified-session EXP.
  • tier_progress rewards fold in as EXP too (they're just EXP grants by another name).
  • Quest bonus EXP is additive to base EXP — a quest can accelerate leveling well beyond the raw minutes recorded. That's the point: quests are how we "push hardest" on a mission without inventing a parallel currency.

So: Total EXP = (validated minutes × 1) + Σ(quest bonus EXP). The XP bar and the level are computed from Total EXP.

This is a deliberate, small evolution of the current rule. Today the level base is uploaded/validated hours. Under EXP, the base is the same validated minutes (×1), plus quest bonuses. Validated hours remain the business/data truth metric; EXP is the user-facing progression currency built on top of it.


3. Levels → Season tiers

Superseded — cash removed

The table below was the old hours→cash ladder. Cash no longer attaches to these thresholds (see Reward Economy). The thresholds survive as Season tier breakpoints whose rewards are cosmetic/status and re-tunable each Season. The Cash column is retained only to show what was replaced.

The tier track is expressed in EXP so the bar, the thresholds, and quest bonus EXP all speak one unit. Mapping the original MACRO_LEVELS hours to EXP (×60):

TierHours-equivEXP thresholdCash (retired)Season reward (new)
T11/6 h10 EXP€10cosmetic/status (TBD)
T21 h60 EXP€20cosmetic/status (TBD)
T35 h300 EXP€40cosmetic/status (TBD)
T412 h720 EXP€80cosmetic/status (TBD)
T525 h1500 EXP€350cosmetic/status (TBD)
  • Crossing a tier auto-grants its (cosmetic) reward — rewards remain status, not targets. Cash is earned separately, by completing quests.
  • A quest's EXP bonus (and party multiplier) can carry a player across a tier, advancing the Season track faster — no cash is triggered by tier crossings.
  • Tiers and their EXP breakpoints are per-Season and re-tunable; the curve above is the Season 0 (pilot) starting point. The microPulseCadenceSeconds flashes derive from the table as today.

4. What the bar shows (copy + behavior)

  • The XP bar is the EXP bar — single source of truth, always visible at the home view bottom (do not clip; do not touch its core fill/segment logic).
  • Footer top row: TIER {N} on the left, NEXT TIER at {Y} EXP on the right (Y is the next Season-tier threshold in EXP). The right slot is the next cosmetic/status unlock — not a cash figure. Cash is surfaced on quests, not on the EXP bar (see Reward Economy).
  • +EXP feedback: base EXP converts from "pending" as sessions validate; quest completions show a +{N} EXP floater into the bar. One micro-pulse cadence per level as today.
  • Microcopy to teach the model once (not repeated per screen): 1 min played = 1 EXP · quests give bonus EXP.
  • Keep the rules: no predictive/pace copy ("at your pace", "est. sessions"), no ghost-fill — only earned (validated) + granted (quest) EXP render.

5. Why this shape

  • One progression currency, two sources. Casual play (validated minutes) is the floor; quests + party multiplier accelerate. Both move the same Season bar, so the home view can say a single clear thing: play to earn EXP; do quests to earn cash (and bonus EXP).
  • Honest by construction. Validated-only base resists idle/AFK farming; quest bonuses require real, validated quest completion.
  • Cash is decoupled from EXP. Money is earned by completing quests, not by crossing EXP tiers — so generous progression (party multipliers, referral EXP) never inflates cash outlay. See Reward Economy.
  • Respects the existing rules. EXP is the XP layer the docs already mandate; validated hours stay the data truth; rewards stay status.

6. Open calls

  • Pending-EXP visibility: show pending (uploaded-not-yet-validated) EXP as a dimmed segment, or hide until validated? (Recommend: show dimmed, label "pending" — better feedback without faking progress.)
  • Per-session quest EXP vs completion-only: do early quests pay per qualified session (steady drip) or only on completion (bigger pop)? Tunable per quest via grant_policy.
  • EXP ↔ hours divergence: once quest bonuses + party multipliers land, a player's tier can outrun their raw recorded hours. That's the intended "quests/parties accelerate you" effect; data-side reporting keeps using validated hours, not EXP.
  • Seasons: now in scope — EXP advances a time-boxed Season tier track that can go dormant between Seasons. Whether EXP banks toward the next Season or pauses is an open call in Reward Economy.