Tech Path Finder
Образовательная платформа для IT-специалистов с квизами, мок-интервью, code review и персональными рекомендациями на основе алгоритма деградации знаний
Оглавление
О проекте
Tech Path Finder — платформа для подготовки IT-специалистов к карьерному росту. Структурированные курсы по Agile, Python, Django, FastAPI, Kubernetes, System Design и десяткам других тем сочетаются с квизами, экзаменами, мок-интервью с AI-оценкой и практическим code review.
Платформа решает конкретную проблему: разработчики не знают, что именно учить для перехода на следующий уровень, и тратят время на хаотичное потребление материала без обратной связи о реальных пробелах.
Ключевая идея — персонализация через данные: система не просто тестирует, а строит профиль компетентности пользователя с учётом времени. Знания, которые не применяются, постепенно «деградируют» — и платформа напоминает об этом раньше, чем это станет проблемой на собеседовании.
Ключевые возможности
Обучение и оценка знаний
65+ курсов по категориям: Agile/Scrum, Python, Django, FastAPI, Kubernetes, Docker, AWS, System Design, LLM/RAG, паттерны проектирования и другие. Каждый курс содержит:
- Теорию — Markdown-статьи с диаграммами, глоссарий терминов
- Квизы — вопросы трёх уровней сложности (junior / middle / senior) с детальными объяснениями
- Экзамены — 20 детерминированных вопросов по варианту, история сдач
- Прогресс — отслеживание завершения тем и точности ответов
Алгоритм деградации знаний
Ключевой механизм платформы: proficiency-score каждой темы снижается с течением времени, если пользователь не возвращается к материалу:
proficiency = accuracy × recency_factor × 100
recency_factor = max(0.3, 1 - days_since_last_answer / 30)Темы автоматически классифицируются как «критичные» (< 40%), «слабые» (40–65%) или «не начатые» — и система строит персональную очередь для повторения.
Мок-интервью с AI-оценкой
Структурированные сессии мок-интервью по языкам и уровням (junior/middle/senior):
- Загрузка вопросов по вариантам (express или полный формат)
- Ответы пользователя оцениваются AI-моделью через OpenRouter
- Итоговый скор и обратная связь по каждому ответу
- Стоимость: 10 кредитов за сессию
Code Review
Практические задания с реальным кодом:
- Репозиторий упражнений по языкам (Python, Go, Java, Ruby и другие)
- Пользователь находит баги и нарушения — система сравнивает с эталоном
- Три уровня оценки: 0 / 0.5 / 1.0 балла
- Ежедневный челлендж со случайным заданием
- Отслеживание слабых типов ошибок по языкам
Геймификация
- XP-система: события-триггеры (завершение темы +50 XP, экзамен +100 XP, стрики +25/100 XP)
- Достижения: разблокируются по милестонам (темы, точность, стрики)
- Стрики: ежедневная активность поощряется бонусными XP
- Дашборд прогресса: тепловая карта активности, динамика по сложностям, история экзаменов
Архитектурные решения
Backend: Domain-Driven Design
13 независимых доменов, каждый со своими api.py, service.py, models.py, schemas.py:
| Домен | Ответственность |
|---|---|
| auth | JWT, OAuth (Google/Yandex/GitHub), восстановление пароля |
| users | Профили, достижения, XP, настройки |
| content | Квизы, экзамены, прогресс, рекомендации |
| interview | Мок-интервью, AI-оценка, расход кредитов |
| code_review | Упражнения с кодом, ежедневные челленджи |
| billing | Кредитная система, промокоды, рефанды |
| admin | Аналитика, управление пользователями, модерация |
Frontend: Feature-Sliced Design
Next.js 16 (App Router) + React 19 с тремя route group'ами:
(main)— аутентифицированные страницы с навигацией(auth)— публичные страницы (вход, регистрация, восстановление)(admin)— панель администратора
Все API-вызовы — Server Actions с 'use server'. Токены читаются из httpOnly cookies исключительно на сервере — ни один токен не достигает клиентского кода.
Контент как код
65+ курсов версионируются в Git как JSON/Markdown-файлы в /data/:
data/
agile/
meta.json # Метаданные категории
ceremonies.json # Вопросы подтемы с объяснениями
ceremonies.md # Теоретическая статья
glossary.json # Глоссарий терминов
exam.json # 20 детерминированных вопросовОбновление контента = коммит в Git + редеплой. Никакой CMS, никакой БД для контента.
Инфраструктура
nginx → next.js (:3000) + fastapi (:8000)
├── postgres # Основная БД
├── redis # Сессии, rate limiting, кэш
├── kafka # Event streaming, аудит-лог
├── celery # Фоновые задачи, email
├── jaeger # Distributed tracing
└── plausible # Privacy-first аналитикаТехнические вызовы и решения
Тасование ответов без утечки правильного индекса
Проблема: Если тасовать варианты ответов только на фронтенде, пользователь может запомнить позицию правильного варианта в исходном массиве.
Решение: Тасование Fisher-Yates выполняется на сервере при каждом запросе. Клиент отправляет индекс в пространстве перетасованных вариантов, сервер переводит обратно в оригинальное пространство для валидации. Пользователь видит только перемешанные варианты.
Rate limiting через Lua + Redis
Проблема: Защита чувствительных endpoint'ов от брутфорса и злоупотреблений без внешних зависимостей.
Решение: Атомарный sliding window через Lua-скрипт в Redis — INCR + EXPIRE в одной транзакции. Разные лимиты на каждый endpoint:
POST /auth/login → 5 / 15 минут / IP
POST /auth/register → 3 / час / IP
POST /auth/forgot-pw → 3 / час / IPКредитный биллинг без гонок
Проблема: Атомарное списание кредитов при параллельных запросах без двойного расхода.
Решение: Ledger-паттерн — append-only таблица CreditTransaction + денормализованный кэш User.credits_balance. Атомарное обновление через SELECT FOR UPDATE. Идемпотентность сессий мок-интервью через ключи идемпотентности.
Refresh-токены без race condition
Проблема: При одновременных запросах с истёкшим токеном оба могут попытаться обновить — один получит инвалидированный токен.
Решение: Атомарный GETDEL из Redis при обновлении — токен читается и удаляется в одной операции. Второй запрос получает None и вынужден идти на /auth/refresh снова с уже обновлённым токеном.
Observability с нуля
Полный стек наблюдаемости без vendor lock-in:
- Tracing: FastAPI + SQLAlchemy + Redis инструментированы через OpenTelemetry → Jaeger
- Metrics: Prometheus + кастомные метрики (регистрации, XP, завершения тем)
- Health checks:
/health+/health/readyс проверкой DB и Redis - Graceful shutdown: дренаж in-flight запросов с 30-секундным таймаутом
Безопасность
- Пароли: bcrypt с 12 раундами
- JWT: HS256, access (30 мин) + refresh (7 дней) в httpOnly cookies
- OAuth: state-параметр верифицируется через Redis (TTL 1 час) против CSRF
- Чувствительные поля: Fernet-шифрование при наличии
APP_ENCRYPTION_KEY - SQL: параметризованные запросы через SQLAlchemy
- Linting: Bandit + Ruff в pre-commit hooks
Результаты
Что получилось построить
- Полноценный SaaS с нуля — от архитектуры до деплоя
- Алгоритм деградации знаний, дающий реальную персонализацию без ML-оверхеда
- Контент как код — 65 курсов обновляются через Git без CMS
- Продакшн-ready стек с трейсингом, метриками и graceful shutdown
Извлечённые уроки
Контент как код работает лучше CMS для технических курсов: версионирование, code review контента, откат изменений — всё из коробки через Git.
Алгоритм деградации знаний — неочевидно простое, но мощное решение. Не нужен полноценный spaced repetition с планировщиком. Достаточно time-decay функции, чтобы рекомендации стали ощутимо лучше.
DDD-разбиение оправдало себя с первого месяца: каждый домен развивается независимо, тесты изолированы, onboarding нового разработчика занимает минуты, а не дни.
Jwt в httpOnly cookies через Server Actions — элегантное решение проблемы безопасности токенов на фронтенде. Клиентский код никогда не видит токены, XSS не может их похитить.
Похожие материалы
Проекты с похожими технологиями и задачами
Slot-Me.ru — Платформа бронирования встреч
Cal.com для русского рынка: от архитектуры до production. FastAPI + React, FSD, OAuth, календари, email, 196 тестов.
- FastAPI
- React
- PostgreSQL
- Redis
- TypeScript
- +3
Цифровой тьютор
Аналитическая платформа для дирекции университета с инструментами оценки усвоения материала студентами и рекомендациями по оптимизации учебного процесса
- Python
- Django
- PostgreSQL
- Redis
- Celery
- +2
RealAuto — диагностика и продажа проверенных автомобилей
Автомобильный маркетплейс с уникальной бизнес-моделью: независимая диагностика перед продажей. Автоматический парсинг объявлений с форумов BMW и других сообществ.
- Django
- Python
- PostgreSQL
- Celery
- Redis
- +2