Local-first монорепо для обучения программированию, где урок - не статический текст, а интерактивный модуль. Каждая тема - типобезопасный пакет (теория в MDX, упражнения в YAML, всё под Zod): теорию сопровождают встроенные визуализации, а задачи проверяются прямо в браузере через sql.js и Pyodide в Web Workers. Контент генерируется офлайн скиллом lesson-forge; рантайм работает на чистой логике, без AI, apps/api опционален.
- Интерактивная теория, не стена текста. Более 50 визуализаций и схем встроены в уроки: JOIN-ы и GROUP BY, B-tree и планы запросов, хеш-таблицы и консистентное кольцо, attention и токенизация, градиентный спуск и перцептрон, IoU и NMS. Плюс графики, иллюстрации, сноски, чекпойнты и глоссарий по ходу чтения (MDX + Shiki).
- 62 темы, 408 концептов, каталог по разделам. От полки «Основы: начни отсюда» (Python и JavaScript с нуля, регулярные выражения) и фронтенда (HTML/CSS) до продвинутого Python (ООП, дескрипторы, GIL, конкурентность), алгоритмы и структуры данных, базы данных (SQL, индексы, масштабирование), Web и API (включая HTTP с нуля), архитектура, ML и AI, инструменты (git, командная строка Linux). Плюс 6 курируемых треков, фасетные фильтры и полнотекстовый поиск.
- Банк собеседований. ~1449 вопросов с ответами (ru+en), хаб
/interview, markdown-зеркала и JSON-LD QAPage на пререндере. - Проверочные вопросы почти в каждой теме. theory-quiz с мгновенной проверкой и разбором - закрепить теорию, не уходя со страницы.
- Задачи с живым рантаймом и результатом в реальном времени. 7 типов упражнений (theory-quiz, sql-query, python-function, javascript-function, fill-in-blanks, predict-output, git-challenge) исполняются прямо в браузере на Monaco-редакторе, sql.js и Pyodide в Web Workers. Результат виден сразу: визуализатор SQL-запросов, пошаговый разбор Python (PyStepper), интерактивные git-задачи с проверкой состояния репозитория.
- Проверка не только знаний, но и уверенности. Перед ответом отмечаешь «уверен / не уверен / наугад», статистика калибровки считается по Брайеру, лестница повторных экзаменов на 1-35 дней и блок свободного припоминания после каждой теории.
- Свободная песочница. Отдельная страница
/sandbox- интерактивные SQL- и Python-окружения для экспериментов вне уроков: Monaco-редактор, готовые шаблоны, мгновенный запуск в браузере (sql.js / Pyodide в Web Workers), без установки и без сервера. - Анимации и обратная связь. Переходы между страницами, анимированные счётчики и микро-взаимодействия (framer-motion), конфетти при решении задач и достижении целей.
- Интервальное повторение. Флэшкарды с FSRS-планировщиком (ts-fsrs) по всем 62 темам.
- Прогресс как привычка, с бэкапом. Серия (streak), GitHub-style heatmap активности, карта обучения, «что дальше», возобновление чтения с места - всё в IndexedDB (Dexie), без аккаунта. Экспорт и импорт всего прогресса для бэкапа и переноса между устройствами (заметки и закладки выгружаются отдельно).
- Быстрая работа. Командная палитра Ctrl+K, прогрессивные подсказки, горячие клавиши, онбординг, установка как PWA, нижняя таб-панель на мобиле.
- Живой онлайн, анонимно. Счётчик «кто сейчас здесь» с мини-графиками за сутки и по дням, без cookies и IP. На развёрнутой версии включается расширенная аналитика (уникальные за всё время через HyperLogLog, за 7 и 30 дней, разбивка «сейчас читают» по темам) и отдельная интерактивная страница
/analytics. - Открытость для поисковиков и ИИ-агентов. Сборка пререндерит ~3000 статических HTML-страниц (темы ru+en, главные, глоссарий, хабы flashcards/tracks/map/sandbox с crawlable body, банк interview ru+en) с JSON-LD (Course + free Offer, BreadcrumbList, WebSite, DefinedTermSet, QAPage, CollectionPage), canonical, hreflang и lastmod в sitemap; генерирует robots.txt (private UI disallow, AI-боты allow), llms.txt / llms-full.txt, markdown-зеркала (
/topics/<slug>.md, interview, glossary) и OG-карточки (ru + en). Краулеры без JS видят полный контент, SPA поверх статики оживает без гидрации. Webmaster-кабинеты не требуются. - Два языка. Русский (основной) и английский: 46 из 62 тем с en-изданием на
/en/topics/<slug>и hreflang-парами; остальные - ru-only с редиректом en→ru. UI и interview bank - двуязычные.
pnpm install
pnpm dev:webhttp://localhost:5173 - в репозитории 62 темы (python-basics, sql-fundamentals, javascript-basics, db-indexes и др.).
Новая тема - попроси Cursor или Claude Code в этом репо:
Используй lesson-forge, добавь тему по SQL JOINs
Скилл: .cursor/skills/lesson-forge/, зеркало .claude/skills/lesson-forge/. Прочие агенты - AGENTS.md.
docker compose up --build -dweb на :8080, api на :3000 (Swagger /docs), elasticsearch на :9200. api читает секреты из .env (admin-логин, JWT, TOTP); fuzzy-поиск заявок in-memory по умолчанию, ES_ENABLED=true включает Elasticsearch.
Bare-metal без Docker (основной путь деплоя): sudo bash scripts/deploy.sh - идемпотентный скрипт сам ставит Node 22/pnpm/Caddy, генерит секреты, выставляет VITE_SITE_URL/VITE_API_BASE и поднимает web + api под systemd. Полный гайд по self-hosting (оба пути, ротация секретов, бэкап) - в docs/SELF_HOSTING.md.
| Команда | Назначение |
|---|---|
pnpm dev:web |
Vite SPA, offline-first плеер |
pnpm dev:api |
NestJS API (submissions, admin, поиск) |
pnpm dev |
web + api параллельно (Turborepo) |
pnpm build |
production-сборка (web: + пререндер, sitemap/llms/OG) |
pnpm typecheck |
TypeScript по монорепо |
pnpm test |
unit-тесты пакетов (vitest) |
pnpm validate |
Zod-контракт тем + прогон gold-решений |
pnpm lint |
ESLint по репозиторию |
pnpm check:i18n |
паритет ключей локалей ru/en |
pnpm check:bundle |
бюджет eager-JS после build |
pnpm check:headers |
CSP/security headers в синхроне (vite/nginx/Caddy) |
pnpm sync:skills |
.cursor/skills/ → .claude/skills/ |
pnpm check:skills |
CI: зеркала скиллов идентичны |
pnpm typecheck
pnpm validate
pnpm testModular monolith в pnpm workspaces. Frontend и backend разделены пакетами, без cross-imports. apps/web читает topics/ через Vite import.meta.glob, гоняет sandbox в Web Workers и работает офлайн без AI в рантайме. apps/api опционален: submissions, admin, presence, sync и fuzzy-поиск заявок (in-memory по умолчанию, Elasticsearch по флагу). Сборка web несёт build-time SEO-слой (apps/web/scripts/): пререндер (~3000 HTML, включая interview), sitemap/robots/llms, markdown-зеркала, OG-карточки; рантайм от этого не тяжелеет.
.learn/
├── apps/
│ ├── web/ # Vite + React SPA, local-first
│ └── api/ # NestJS (DDD): submissions, admin, search, presence, sync
├── packages/
│ ├── contracts/ # Zod-схемы, общие типы
│ ├── lesson-engine/ # загрузчик тем, раннеры, CLI-валидатор
│ └── sandbox/ # sql.js + Pyodide в Web Workers
├── topics/ # 62 темы (manifest + MDX + YAML)
├── interview/ # банк вопросов (~1449) + exercises
├── deploy/ # Caddyfile + systemd (bare-metal)
├── scripts/ # deploy.sh, sync/checks, контент-тулинг
├── .cursor/skills/ # lesson-forge, generate-readme, sync-project-rules
├── .claude/skills/ # зеркало (pnpm sync:skills)
├── docker-compose.yml
└── AGENTS.md
- Local-first:
apps/webработает безapps/api - Pure-logic: рантайм без AI; LLM только офлайн для генерации контента
- contracts: единственный общий слой web ↔ api
- topics: не импортируют из
apps/* - lesson-forge: владеет контрактом темы; CI
pnpm check:skillsловит drift зеркал - SEO build-time: пререндер и артефакты генерятся при сборке, в SW-прекэш и eager-бандл не попадают
© 2026 DotCore. PolyForm Noncommercial 1.0.0.
Разрешены форки, изменения и распространение в некоммерческих целях. Учебный контент тем (topics/) лицензирован по CC BY-NC 4.0. Коммерческое использование в любом виде требует предварительного письменного разрешения автора. См. LICENSE.