network-user
back to all projects
Platform 9 Jun 2026 in production

.learn

DotLearn

Accelerated interview prep: you pick the topic, AI builds the lesson around it.

the essence

You put the lesson topic into words yourself, a free-form request, even for one specific interview question. Once you ask, the agent gets to work: lesson-forge checks the topic for conflicts with the existing catalog and generates a package, MDX theory and YAML exercises that are automatically validated in the browser runtime. Everything gets committed to the repo, not written to a database, which means any topic can be forked, extended, or fixed with a normal pull request. Alongside the topics sits a ready-made bank of 368 interview questions across 10 tracks, also with a "how to answer" breakdown, exercises, and its own flashcard mode.

Code runs in a Web Worker where 15 network APIs are neutralized at startup: fetch, WebSocket, RTCPeerConnection, BroadcastChannel, and others. What you write cannot send data out or open a hidden channel: that's architecture, not policy. Progress, notes, bookmarks, and FSRS flashcards live in IndexedDB; the backend is optional and the platform installs as a PWA for full offline use. Configurable settings include content language (RU/EN on the fly), exercise difficulty, daily goal, font, text size, and Monaco editor preferences.

Under the hood

Seven steps as one story: from cloning the repo to exporting your progress. Step through with ←/→ and watch how it works inside.

  • 34 topics
  • 7 exercise types
  • visualizations & interactive animations
  • local-first · no backend
01 Clone and ask

Run it locally, ask in plain words

Clone the repo, bring up the player with one command, and ask the AI agent right in your editor. No forms, no code, just plain language.

in your editor (Cursor / Claude Code):
lesson-forge add a beginner topic on Python OOP basics
01 / 07

scale

size and timeframe: what stands behind the product.

~3 недели from first commit to production hardening
57 k+ lines of code: apps and packages
140 k+ lines of content: 34 topics in MDX and YAML
368 interview questions across 10 categories
7 exercise types · sql.js + Pyodide in WASM
50 commits to a production release
380 automated tests (vitest)

architecture

authoring generates glob glob Web Worker progress opt lesson-forge topics/ interview/ Zod contracts web · local-first lesson-engine sql.js + Pyodide IndexedDB NestJS API · opt

Offline AI skill authors topics and opens PRs (Cursor/Claude)

  • topics/ generates

File-based topics: manifest, MDX theory and YAML tasks

  • web · local-first glob

A separate interview-question bank: articles and exercises

  • web · local-first glob

Vite+React SPA, local-first; reads topics via glob

  • lesson-engine
  • IndexedDB progress
  • NestJS API · opt opt

Shared Zod schemas: validate topics and submission DTOs

  • web · local-first
  • NestJS API · opt

Progress, notes and FSRS reviews in the browser (Dexie)

Optional: topic submissions, hardened admin, search

Topic loader, exercise runners and a CLI validator

  • sql.js + Pyodide Web Worker

Code execution in Web Workers: SQL, Python, JS

Tap a module to see its role in the system.

stack

stack by layer · 21
  • Language 2
  • Framework 5
  • Data 4
  • Infrastructure 4
  • Client 4
  • AI / ML 2

Language

  • TypeScript 5 (strict)
  • Python (Pyodide)

Framework

  • React 18
  • Vite 5
  • NestJS 10 (DDD)
  • TanStack Router
  • Tailwind

Data

  • IndexedDB / Dexie
  • Zod contracts
  • MDX + Shiki
  • Elasticsearch

Infrastructure

  • pnpm workspaces
  • Turborepo
  • Docker Compose
  • GitHub Actions CI

Client

  • sql.js (WASM)
  • Pyodide (WASM)
  • Monaco editor
  • Web Workers

AI / ML

  • lesson-forge skill
  • ts-fsrs (SRS)

what it does

the product's key capabilities right now.

Topics as code

Each topic is stored as files in the repo: theory in MDX, exercises in YAML. It's not a database row, so a fix can land as a normal pull request.

A Zod schema checks the topic manifest against 70+ rules, from uniqueness to RU/EN parity. If even one check fails, the change doesn't merge.

The lesson-forge AI agent

The AI writes a whole course itself (theory and exercises), validates it, and solves its own exercises in the sandbox before opening a PR.

If the AI's own reference solution fails in the exact sandbox a learner sees, the PR never opens. CI separately checks theory compilation and variant parity.

Code in the browser

sql.js and Pyodide in Web Workers plus a Monaco editor: Python and SQL genuinely execute in the browser, no server involved.

The worker starts with fetch, WebSocket, and a dozen other network APIs disabled, so what's written physically can't leak out. The editor also offers SQL-schema autocompletion and two custom themes.

Seven exercise types

From a quiz to a Python function: every type grades itself automatically, and the most unexpected one, git-challenge, simulates real Git right in the browser.

A homemade ~600-line engine genuinely runs commit, branch, merge, rebase, and stash, with zero risk to any real repository.

Interview question bank

368 questions across 10 categories, from data structures to system design, each with a "how to answer" breakdown, plus flashcard and exam modes.

Grew from an open Python question set, fully rewritten: its own article structure, 988 original exercises and diagrams.

Flashcards that remind you on their own

The FSRS algorithm decides when a card is due: answer confidently and you see it less, start forgetting and it comes back sooner.

Same principle as language-learning apps. Separately, a 14-week activity heatmap, like GitHub's.

Local-first

Opens on localhost with no backend, no accounts, and no internet, and installs as a PWA for full offline use.

The backend is only needed for submission intake and admin. Everything else (exercises, progress, flashcards) lives in the browser on IndexedDB.

Community and your own server

Topic proposals via PR or form, moderation in a TOTP two-factor admin, self-hosting in Docker.

The form is capped at 5 submissions per minute per address. Login needs a password plus a one-time code, and 5 wrong attempts in a row locks the account for 5 minutes.

timeline

how the product grew from its first version.

  1. 9 Jun 2026

    Local-first player

    6 exercise types, sql.js and Pyodide in Web Workers, Monaco, FSRS reviews, TOTP admin, and RU/EN i18n.

  2. 11 Jun 2026

    Content explosion

    lesson-forge proves its speed: the catalog grows from 1 to 21 topics in two days, 15 of them in a single commit, plus the first seeds of what becomes the interview-question bank.

  3. 16 Jun 2026

    Content and flashcards

    28 bilingual RU/EN topics, a 7th exercise type git-challenge (a deterministic in-browser git engine), flashcard decks, lesson-forge with Zod contract, vitest tests, and a NestJS backend for submissions.

  4. 24 Jun 2026

    Production hardening

    Pyodide sandbox fixes, CSP, pre-launch security hardening, and CI gates for i18n, bundle, coverage, and a11y.

links