- BrainTools - https://www.braintools.ru -
Anthropic выпустили бесплатные курсы по работе с Claude на Skilljar. Claude 101, Claude Code, API, MCP, субагенты, AI Fluency. 440 уроков, 325 видео. Проблема: всё на английском, сервис в России заблокирован.
Я прошёл все курсы, перевёл и выложил на university.stadika.ru/anthropic-academy [1]. Здесь расскажу, как устроено внутри.
16 курсов, 448 уроков в JSON, 325 видео (5.6 ГБ), 2170 файлов субтитров.
Текстовый контент переводил через Gemini 2.5 Flash. Не Claude, хотя курсы про Claude. Причина прагматичная: Gemini дешевле для массового перевода, длинный контекст, достаточное качество для учебных текстов.
Парсинг оригинального контента из JSON
Перевод через Gemini API (translate-content.py)
Генерация субтитров из аудиодорожек видео (transcribe-gemini.py)
Конвертация SRT в VTT для браузерного плеера
Склейка фрагментированных уроков (rewrite-fragments.py). Оригинал Skilljar дробит один урок на 5-10 фрагментов по 2-3 абзаца. Удобно для их LMS, неудобно для чтения. Gemini собирал фрагменты в цельный текст
Генерация итоговых тестов по каждому курсу (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 Login Widget не подходил: требует HTTPS callback и верификацию на бэкенде. На shared-хостинге неудобно. Сделал проще:
Пользователь нажимает “Войти через Telegram” на сайте
Открывается бот @StadikaCoursesBot с deep link, содержащим одноразовый токен
Бот получает /start с токеном, сохраняет связку token-user
Фронтенд поллит API каждые 2 секунды: “пришёл ли пользователь с таким токеном?”
Когда бот подтверждает, фронтенд сохраняет данные в localStorage + cookie
Без OAuth, без JWT. Для учебной платформы это избыточно. Cookie aa_uid нужен для серверной проверки оплаты, localStorage для фронтенда. Пользователь тратит 5 секунд.
Зачем авторизация, если контент бесплатный? Контакт пользователя для коммуникации и привязка оплаты к аккаунту.
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%, есть ошибки [2] в терминологии. Можно прогнать второй раз с терминологическим словарём.
Тесты. Пока простые: 8 вопросов, множественный выбор, ответ скрыт под тегом details/summary. Полноценный quiz-движок с подсчётом баллов и сертификатом ещё не сделан.
Видео. Хостятся на том же Beget. 5.6 ГБ. Shared-хостинг это выдерживает, но при нагрузке стоит вынести на CDN или S3-совместимое хранилище.
university.stadika.ru/anthropic-academy [1]
16 курсов, 448 уроков, от Claude 101 до продвинутого MCP. 70% бесплатно. Видео на английском с русскими субтитрами, текст полностью на русском.
Пишу о разработке, AI-инструментах и автоматизации в своём Telegram-канале @popovvii [3]. Если нужна разработка под ваш проект, пишите.
Автор: StudyQA
Источник [4]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/30212
URLs in this post:
[1] university.stadika.ru/anthropic-academy: https://university.stadika.ru/anthropic-academy
[2] ошибки: http://www.braintools.ru/article/4192
[3] @popovvii: https://t.me/popovvii
[4] Источник: https://habr.com/ru/articles/1034458/?utm_campaign=1034458&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.