Canonical product contract

Progress signals that mean one thing each

Rating, XP, difficulty and weekly rank answer different questions. These are the rules the app and backend are expected to share.

01

Rating inspired by Elo

Rating starts at 1000, never falls below 100 and uses K factors 32, 24 and 16. Solved result, challenge difficulty and completion time affect each change. There is no human opponent, and rating does not drive adaptive difficulty.

02

Skill XP and levels

A solved challenge grants each inferred skill exactly one award: 60/100/140/180/220 XP for difficulty 1–5. Each of ten skills has levels 1–5; the next threshold is round(100 × level^1.5), and level 5 displays 100% complete.

03

Adaptive difficulty

Difficulty uses recent result and relevant skill progress to choose a suitable next step. It neither grants a second XP award nor reads the Elo-inspired rating.

04

Weekly ranking

The weekly board counts solutions finalized by the server from Monday UTC. Only the canonical solved_count field determines public position; client-reported progress never updates it.

05

Streaks and achievements

The first valid practice event in a local calendar day can advance the streak once. Achievements recognize reachable skill, challenge and consistency milestones; their legacy xpReward field is not a spendable or applied reward.

06

Storage and sync

Core progress is persisted and synced best-effort for signed-in users. Local state can remain available during an outage, so a pending sync is not a promise of perfect real-time replication.