Built in public
The real numbers. No testimonials.
CodeMentor AI is a solo project run from Ukraine. The page you're reading exists because the alternative is fake stats and stock-photo quotes — and the founder values your trust more than that. Below: live counters straight from the codebase, the last five public shipments, and the three CI gates that keep the marketing copy honest.
Live counters
Every number above is exported from src/lib/site-stats.ts at build time. If the curriculum changes, the page changes on the next deploy. No marketing override.
Lessons per track
Last 5 public shipments
From /changelog — every entry hand-written, dated, and tied to a real deploy.
🧾 /refund §4 (Refund Eligibility) rewritten across all 18 locales. The previous copy — a leftover from a June 24 rewrite — said eligibility 'depends on how much of the service has been used' and requests 'may be decline…
♻ Refund policy re-canonicalised to 14-day worldwide unconditional, matching the point-of-sale promise on /pricing. /refund + /terms + /help + /pricing FAQ + /llms.txt + all 18 messages/*.json now say the same thing: ful…
☀ Light mode shipped across the whole site. Toggle in the top nav, persisted to localStorage with a pre-paint inline script so light-mode users never see a dark flash on first paint. Five rollout phases covered body + sc…
/stats lesson count now sums Python + frontend (was Python-only) — 1224 lessons across 13 tracks. Matches the '1200+' claim every other surface makes. /tracks page lesson claim computed at build time from the real Python…
Live AI tutor on every lesson — Lambda, our in-house AI mentor engine, now powers the in-editor hint chat plus the global 🤖 Ask CodeMentor AI panel (bottom-left of every non-lesson page). Free for every student, ~1500 c…
Three CI gates against marketing drift
Every Vercel deploy runs these three lints in npm run prebuild. A commit that adds a stale lesson count or untranslated string fails the build.
Blog posts can't hardcode lesson counts. Any bare counter literal in a blog body must come from src/lib/site-stats.ts or carry an explicit @bare-counter-ok annotation.
messages/*.json + every non-data UI file goes through the same gate. Adding a stale '1,200 lessons' fails the build.
Cyrillic strings can't land in en.json; Latin-only ru/uk/bg values are flagged as untranslated. Catches the class of bug where a translation file falls back to English without anyone noticing.
CodeMentor AI was built solo from Lviv, Ukraine, starting January 2026. The product is still actively growing: tracks gain lessons weekly, the AI tutor improves, new locales land. The engineering, the writing, the translation review, and the design pass all run through one person plus a team of Claude agents. The day the founder takes outside money or hires a marketing team, this page will say so. Until then: real numbers above, real team page, real changelog, and a 7-day Pro trial when you're ready to commit beyond the free tier.
Found a stale number? support@learnpython.academy — the founder reads every message.