Перевёл 16 курсов Anthropic Academy на русский и собрал платформу за выходные. ai.. ai. anthropic.. ai. anthropic. Claude.. ai. anthropic. Claude. gemini.. ai. anthropic. Claude. gemini. PHP.. ai. anthropic. Claude. gemini. PHP. react.. ai. anthropic. Claude. gemini. PHP. react. онлайн-курсы.. ai. anthropic. Claude. gemini. PHP. react. онлайн-курсы. перевод.. ai. anthropic. Claude. gemini. PHP. react. онлайн-курсы. перевод. промпт-инжиниринг.

Anthropic выпустили бесплатные курсы по работе с Claude на Skilljar. Claude 101, Claude Code, API, MCP, субагенты, AI Fluency. 440 уроков, 325 видео. Проблема: всё на английском, сервис в России заблокирован.

Я прошёл все курсы, перевёл и выложил на university.stadika.ru/anthropic-academy. Здесь расскажу, как устроено внутри.

Что переводили и чем

16 курсов, 448 уроков в JSON, 325 видео (5.6 ГБ), 2170 файлов субтитров.

Текстовый контент переводил через Gemini 2.5 Flash. Не Claude, хотя курсы про Claude. Причина прагматичная: Gemini дешевле для массового перевода, длинный контекст, достаточное качество для учебных текстов.

Пайплайн

  1. Парсинг оригинального контента из JSON

  2. Перевод через Gemini API (translate-content.py)

  3. Генерация субтитров из аудиодорожек видео (transcribe-gemini.py)

  4. Конвертация SRT в VTT для браузерного плеера

  5. Склейка фрагментированных уроков (rewrite-fragments.py). Оригинал Skilljar дробит один урок на 5-10 фрагментов по 2-3 абзаца. Удобно для их LMS, неудобно для чтения. Gemini собирал фрагменты в цельный текст

  6. Генерация итоговых тестов по каждому курсу (generate-quizzes.py)

Валидация перевода

Промпт простой: “переведи на русский, сохрани форматирование, не переводи термины API/SDK/MCP/prompt”. Главное было не сломать HTML-разметку внутри JSON. Gemini справлялся, но примерно в 5% случаев ломал теги. Добавил валидацию на выходе: скрипт проверяет парность тегов, сравнивает количество <code>, <pre>, <a> до и после перевода.

Стек

Фронтенд: React 19 + Vite, SPA с BrowserRouter. Без UI-фреймворков, без SSR. Бандл ~110 КБ gzip. Каталог курсов и программы уроков зашиты в JSON, контент уроков подгружается по требованию.

Бэкенд: PHP, без фреймворков. 10 файлов в папке /api/. Без базы данных.

Хостинг: Beget, shared, 150 руб/мес. .htaccess делает маршрутизацию: lesson-gate для премиум-защиты контента, SPA fallback для всего остального.

Telegram-бот (авторизация): отдельный VPS, Hetzner, Docker, aiogram.

Авторизация через Telegram

Стандартный Telegram Login Widget не подходил: требует HTTPS callback и верификацию на бэкенде. На shared-хостинге неудобно. Сделал проще:

  1. Пользователь нажимает “Войти через Telegram” на сайте

  2. Открывается бот @StadikaCoursesBot с deep link, содержащим одноразовый токен

  3. Бот получает /start с токеном, сохраняет связку token-user

  4. Фронтенд поллит API каждые 2 секунды: “пришёл ли пользователь с таким токеном?”

  5. Когда бот подтверждает, фронтенд сохраняет данные в localStorage + cookie

Без OAuth, без JWT. Для учебной платформы это избыточно. Cookie aa_uid нужен для серверной проверки оплаты, localStorage для фронтенда. Пользователь тратит 5 секунд.

Зачем авторизация, если контент бесплатный? Контакт пользователя для коммуникации и привязка оплаты к аккаунту.

Paywall и оплата

70% уроков каждого курса бесплатные. Оставшиеся 30% + итоговый тест закрыты. Разблокировка: 900 руб., разовая оплата, навсегда.

Оплата через Robokassa. Интеграция минимальная: pay-init.php формирует URL с подписью SHA-512, pay-result.php принимает callback и создаёт файл-маркер /paid/{user_id}_{course}. Файловая “база данных”. При 100 платящих пользователях это 1600 файлов по 0 байт. Упрётся в лимиты inodes только при десятках тысяч.

Фискализация по 54-ФЗ: чек передаётся в параметре Receipt URL Робокассы.

Серверный гейт

Фронтовый paywall сам по себе бесполезен. JSON-файлы лежали на диске и были доступны напрямую. Любой мог открыть /content/claude-101/lessons/14.json и прочитать premium-урок.

Поэтому добавил серверный гейт: .htaccess перехватывает все запросы к lesson JSON и проксирует через PHP, который проверяет позицию урока и наличие оплаты. Бесплатные уроки отдаются сразу, premium без оплаты возвращают 403.

RewriteRule ^content/([a-z0-9-]+)/lessons/([0-9]+).json$
  api/lesson-gate.php?course=$1&lesson=$2 [QSA,L]

Что можно улучшить

Файловая система вместо БД. Пока работает, но при росте нагрузки стоит перейти на SQLite. Один файл, zero config, PHP имеет встроенную поддержку.

Субтитры. Сгенерированы через Gemini из аудио. Качество 85-90%, есть ошибки в терминологии. Можно прогнать второй раз с терминологическим словарём.

Тесты. Пока простые: 8 вопросов, множественный выбор, ответ скрыт под тегом details/summary. Полноценный quiz-движок с подсчётом баллов и сертификатом ещё не сделан.

Видео. Хостятся на том же Beget. 5.6 ГБ. Shared-хостинг это выдерживает, но при нагрузке стоит вынести на CDN или S3-совместимое хранилище.

Ссылка

university.stadika.ru/anthropic-academy

16 курсов, 448 уроков, от Claude 101 до продвинутого MCP. 70% бесплатно. Видео на английском с русскими субтитрами, текст полностью на русском.


Пишу о разработке, AI-инструментах и автоматизации в своём Telegram-канале @popovvii. Если нужна разработка под ваш проект, пишите.

Автор: StudyQA

Источник