Skip to content
Full transparency

How scoring works

Every number on ZeroTheory comes from the rules on this page. The tables are generated from the same code that computes your scores, so this page can't drift from what we actually run.

  • XP policy xp-1.0
  • ZScore zs-1.0
  • Rubrics web v1, python v1

Two numbers, two jobs

XP rewards discipline. ZScore proves skill.

XP: effort

Keep showing up

XP rewards shipping on time and learning every day, and costs you for late, weak or missed work. It sets your level. It never feeds your ZScore.

ZScore: verified skill

Prove you can build

ZScore runs from 0 to 1,000 and comes from verified projects, quizzes and discipline. It's the number colleges and recruiters look at.

XP policy xp-1.0

XP: what earns it and what costs it

XP is an append-only ledger. Every entry records its reason and the exact change it made, so corrections and appeal reversals are exact.
Earn XP
EventXPRule
Lesson completed+10Once per lesson. Only the first 8 lessons each day (IST) earn XP.
Quiz passed+50Your first pass of each quiz.
Project submitted on time+50Once per brief.
Project passed (score 70+)+100Once per brief, for your best submission.
Project excellent (score 90+)+50A bonus on top of the pass.
Daily activity+5Once per day (IST) with any learning action.
Live or offline class attended+20Per session, marked by QR code or your mentor.
7-day learning streak+50Once per unbroken streak.
30-day learning streak+150Once per unbroken streak.
100-day learning streak+500Once per unbroken streak.
Lose XP
EventXPRule
Weak project (score below 50)−25Once per brief.
Late submission−10 / dayPer day late, capped at −60. A partial day counts as a full day.
Missed project−40Nothing submitted by the hard cut-off. It also resets your shipping streak.
Absent from a hard-lock live class−15Night Room sessions, per session.
Confirmed integrity violation−500Only after human review. The submission is voided, and you can appeal.

Why lesson XP is capped

Clicking through lessons can't buy a high score. Only the first 8 lessons each day earn XP; anything past the cap is still recorded as completed. The big XP comes from verified projects.

One project, four outcomes

Project XP is posted once, when your submission is final. Nothing is awarded per push. These rows are calculated with the same function that posts real XP.

XP for four example project outcomes
OutcomeEntriesTotal
On time, scored 92on time +50, passed +100, excellent +50+200
2 days late, scored 75late −20, passed +100+80
1 day late, scored 45late −10, weak −25−35
Not submitted by the cut-offmissed −40−40
  • Deadlines use the time our server receives your verified evaluation, not your commit dates.
  • Your XP total never goes below 0.
  • No decay: we never take XP away for time away from the app. Coming back is always welcome.
  • Every negative entry shows you its reason and evidence. Negative XP is visible only to you and, if you joined one, your college. Never to the public.

Consistency

Two streaks

Daily learning streak

Grows by one for each day in a row (IST) with at least one learning action.

Every 14 days of an unbroken streak earns a freeze, and you can bank up to 2. A freeze covers a single missed day automatically, so an exam or a sick day doesn't wipe out months of work.

7 days
+50 XP
30 days
+150 XP
100 days
+500 XP

Weekly shipping streak

Counts project deadlines met on time, in a row.

A late or missed project resets it to zero. There are no freezes: late work is still accepted until the hard cut-off (with the late penalty), but it isn't on time.

It sits next to your daily streak on your portfolio and on your college's dashboard.

Levels

Levels 1 to 50

Your level comes straight from your total XP:

level = ⌊√(XP ÷ 50)⌋ + 1, up to level 50

Each level needs more XP than the last. An on-time project scoring 92 earns +200 XP, enough to take a brand-new learner to level 3.

Total XP needed to reach each level
LevelTotal XP needed
10
250
3200
5800
104,050
159,800
2018,050
3042,050
4076,050
501,20,050

ZScore zs-1.0

ZScore: verified skill, 0 to 1,000

Four parts, one formula. Every parameter below is the live value.

ZScore = round( 10 × ( 0.65 × S + 0.15 × Q + 0.20 × D ) × I )

S · Projects (65%)

Your best score on each brief (0–100), averaged with two weights. Difficulty: level 1 ×1, level 2 ×1.15, level 3 ×1.3. Recency: a result's weight halves every 180 days.

While evidence is thin, S is pulled towards 40:

S = (n × average + 3 × 40) ÷ (n + 3)

where n is your number of verified projects. One lucky project can't top a board.

Q · Quizzes (15%)

Your best score on each quiz, recency-weighted and pulled towards 40 the same way. With no quizzes yet, Q = 40.

D · Discipline (20%)

D = 100 × (0.6 × on-time rate + 0.4 × active days in the last 30 ÷ 30)

Before any project has been due, your on-time rate counts as 0.5.

I · Integrity

1 normally, and 0.5 for 90 days after a confirmed integrity violation.

  • Unranked until your first verified project. Quizzes and activity alone never produce a ZScore.
  • Evidence expires: projects and quizzes older than 730 days (24 months) stop counting, so every score reflects recent work.
  • Recomputed after every evaluation and every night, and clamped to 0–1,000.
  • Also computed per skill (React, Python, SQL and so on), using only evidence tagged with that skill. Recruiters search per skill.
  • This is ZScore zs-1.0. Any change gets a new version number, published here.

Tiers

Six tiers

Tiers have their own names so nobody confuses them with levels.
ZScore range for each tier
TierZScore
Z6Grandmaster900–1,000
Z5Master800–899
Z4Expert720–799
Z3Skilled600–719
Z2Rising400–599
Z1Rookie0–399
UnrankedNo verified project yet

Worked example

Your first project: 527, Rising

Calculated when this page was built, with the same function that computes real scores.

Your first verified project

One project scoring 92 at difficulty 1, verified today. No quizzes yet. It was on time (on-time rate 1.0), and you were active on 1 day in the last 30.

  1. S = (1 × 92 + 3 × 40) ÷ (1 + 3) = 53
  2. Q = 40 (no quizzes yet) = 40
  3. D = 100 × (0.6 × 1 + 0.4 × 1 ÷ 30) = 61.33
  4. raw = 0.65 × 53 + 0.15 × 40 + 0.20 × 61.33 = 52.72
  5. ZScore = round(10 × 52.72 × 1) = 527 Z2Rising

Four projects later

Same learner, four on-time projects scoring 92, active on 20 of the last 30 days.

S
69.71
D
86.67
ZScore
686

Z3Skilled

More verified evidence moves S towards your real average. Keep shipping.

Rubrics

How a project gets its 0–100

Each stack has a published, versioned rubric. Weights add up to 100. Every deduction comes with a fix and the points you'd gain, sorted so the biggest wins come first.

A score of 70 or more passes; 90 or more is excellent; below 50 is weak.

Web projects (HTML, CSS, JavaScript, React, Next.js)

web v1
Web projects (HTML, CSS, JavaScript, React, Next.js): criteria, weights and how each is scored (rubric web v1)
CriterionWeightHow 0–100 is computed
Functionality40Hidden tests run against your running project (Playwright for web apps, pytest for Python). The score is the weighted share of tests that pass. If the build fails, or no test can run, functionality scores 0.
Code quality20Linting with our configuration (inline disables are ignored), function complexity (cyclomatic complexity above 10) and length (over 60 lines), and copy-paste duplication, weighted lint 50%, complexity 30% and duplication 20%. Duplication earns full marks up to 3% of lines, falling to zero at 25%.
Performance & accessibility15Lighthouse on your built app, median of three runs. Each category is banded, because Lighthouse varies from run to run: 90+ → 100, 75–89 → 85, 50–74 → 65, 25–49 → 40, below 25 → 15. The score is the average of performance, accessibility, best practices and SEO.
Engineering practice15README 40% (what it does, setup, usage, a live link or screenshot), commit history 40% (5+ commits, work on 2+ days, no single commit holding most of the code, descriptive messages) and hygiene 20% (a .gitignore, no committed dependencies or build output).
Security10Starts at 100. A committed secret costs 100. Static-analysis findings cost 25 (high) or 10 (medium) each. Vulnerable dependencies cost 30 (critical), 15 (high) or 3 (moderate) each.
  • Secret cap: a committed secret (an API key or password) caps the total at 40 until you remove it.
  • Similarity review: 80% or more similarity to another learner's submission for the same brief holds the score for human review.

Python projects

python v1
Python projects: criteria, weights and how each is scored (rubric python v1)
CriterionWeightHow 0–100 is computed
Functionality45Hidden tests run against your running project (Playwright for web apps, pytest for Python). The score is the weighted share of tests that pass. If the build fails, or no test can run, functionality scores 0.
Code quality25Linting with our configuration (inline disables are ignored), function complexity (cyclomatic complexity above 10) and length (over 60 lines), and copy-paste duplication, weighted lint 50%, complexity 30% and duplication 20%. Duplication earns full marks up to 3% of lines, falling to zero at 25%.
Engineering practice20README 40% (what it does, setup, usage, a live link or screenshot), commit history 40% (5+ commits, work on 2+ days, no single commit holding most of the code, descriptive messages) and hygiene 20% (a .gitignore, no committed dependencies or build output).
Security10Starts at 100. A committed secret costs 100. Static-analysis findings cost 25 (high) or 10 (medium) each. Vulnerable dependencies cost 30 (critical), 15 (high) or 3 (moderate) each.
  • Secret cap: a committed secret (an API key or password) caps the total at 40 until you remove it.
  • Similarity review: 80% or more similarity to another learner's submission for the same brief holds the score for human review.

Evaluation

How evaluation works

Evaluation costs you nothing and never involves an AI model. Here is the whole path from git push to score.
  1. Your repository, your GitHub

    Each brief starts from a template repository on your own GitHub account. You install the ZeroTheory GitHub App on that repository only. It can read the code and post check results, nothing more.
  2. Our pinned workflow runs it

    Every push runs our public, version-pinned evaluation workflow with GitHub Actions, inside your repository. You can't change what it does, and results from any other workflow are rejected.
  3. Your code runs in a sandbox

    Your project builds and runs in a locked-down container with no network and no secrets. Hidden tests are fetched at run time, so they never sit in a public repository.
  4. Deterministic tools, no AI

    Hidden tests, linting, complexity, duplication, Lighthouse, secret and dependency scans, commit history. No LLM and no AI guessing: the same commit, rubric version and harness version always give the same score.
  5. Signed results, published rubric

    Results travel with a GitHub OIDC token that proves our workflow produced them. Our server scores them with the rubric below, and your feedback appears in GitHub Checks and on ZeroTheory, with a fix for every deduction.
  6. Re-verified where it matters

    Scores from your repository's run are provisional. We re-run on our own machine the week's top 10%, anything behind a badge or certificate, a random 5–10% sample and everything flagged.
  • We receive signals, feedback and code fingerprints. We never receive your source code.
  • Nothing is awarded per push. Submitting locks your best evaluation received before the deadline.
  • If our infrastructure fails, that run is never scored or penalised. Push again or re-run it from GitHub.

Integrity

Fair checks, human decisions, one appeal

  • Similarity checks compare fingerprints of your code with other submissions for the same brief. A flag holds the score for review by a person. It is never an automatic zero.
  • AI-text detectors are never used. They don't work on code.
  • If a violation is confirmed, the submission is voided, you lose 500 XP, and your ZScore is multiplied by 0.5 for 90 days. You see the evidence.
  • You can appeal once, within 14 days of the decision.
  • If your appeal is upheld, everything is reversed exactly: the XP that was taken comes back to the point, the 90-day penalty is lifted and your submission is restored.

Leaderboards and privacy

Celebrate progress. Never shame.

  • Other people only ever see adults who chose to appear on leaderboards.
  • Only the top half of any board is shown publicly. Everyone still counts towards the bands.
  • Public entries show percentile bands (Top 1%, Top 5%, Top 10%, Top 25%, Top 50%), never exact ranks.
  • You always see your own exact rank, privately. Your college's staff see exact ranks on their private dashboard.
  • Learners under 18 never appear publicly: no public profile, no board entry, no recruiter discovery.
  • Our contracts with colleges forbid publishing bottom ranks.

Scores measure work, not worth

If you're feeling low or stressed, call Tele-MANAS on 14416. It's free and open 24×7.

Questions

Think a score is wrong?

Write to hello@zerotheoryai.com with the link to your evaluation. Formal complaints go to our Grievance Officer.