Ключевые тезисы.
42.
категории контента
14.
миграций БД
4.
качества HLS (360–1080p)
Стек
Теги
CosTube — открытая образовательная видеоплатформа на собственном бэкенде. Архитектурно это «YouTube-подобный» сервис, но сфокусированный на качественном образовательном контенте: лекции по математике, физике, астрономии, информатике, инженерии, бизнесу и техническим подкастам. 42 категории в семи корневых разделах, открытая регистрация, система ролей viewer/creator/moderator/admin и пайплайн обработки видео с автосубтитрами и AI-классификацией.
Проблема и контекст
YouTube хорош для развлекательного контента, но плох как образовательный инструмент: алгоритмы рекомендации тянут на лёгкий формат, образовательные каналы теряются в шуме, отсутствует структурированная навигация по дисциплинам, нет встроенных учебных метрик (retention, completion), нет инструмента модерации образовательной ценности. Российский рынок дополнительно затронут вопросом монетизации, доступности и compliance. CosTube решает обе задачи: открытая платформа, заточенная под образовательный формат, с собственными инструментами для авторов и AI-классификацией контента, отсекающей не-образовательное.
Что построено
Четыре фазы разработки уже завершены. Первая — публичная платформа с 42 категориями, открытой регистрацией, системой авторов и публичными страницами (главная с каруселями, browse по категориям, watch, channel автора, search, library с историей и закладками). Социальные функции: лайки, закладки, подписки, рейтинги от 1 до 5 звёзд. Вторая — умный контент: Whisper-воркер автоматически генерирует субтитры (VTT) и полный транскрипт, Claude API классифицирует видео (определяет образовательность, предлагает категорию, выявляет red flags), генерирует главы из транскрипта. Pipeline: upload → transcode (HLS 360p/480p/720p/1080p через FFmpeg) → transcribe → classify → auto-moderate → publish. Третья — образовательная аналитика: heartbeat-трекинг (POST каждые 5 сек), детальные метрики (completion rate, retention curve, heatmap просмотров, drop-off points), дашборд автора с интерактивными графиками на Recharts. Четвёртая — сообщество: Q&A под видео с upvotes и привязкой к таймкодам, коллекции (публичные подборки, featured на главной), уведомления с polling каждые 30 сек.
Архитектура
Монорепозиторий с двумя пакетами. Фронтенд (корень проекта): React 19 + React Router v6, Vite 8, Tailwind CSS 4 с CSS-переменными в oklch (light/dark темы), shadcn/ui (new-york стиль), hls.js 1.6 для плеера, Recharts для графиков аналитики, React Hook Form + Zod для валидации. Бэкенд (директория `backend/`): Express 5 + TypeScript ESM, PostgreSQL 16 с 14 миграциями, Redis 7 + BullMQ для очередей, FFmpeg для трансcodeинга, Whisper API (OpenAI) и Claude API (Anthropic) для AI. Конвенции: snake_case в БД и бэкенде, camelCase на фронтенде; API-клиент `src/api/client.ts` автоматически конвертирует ключи.
Модели данных
- users — id, email, password_hash, role (viewer/creator/moderator/admin), display_name, avatar_url, bio
- creator_profiles — user_id, channel_name, channel_slug, description, subscriber_count
- videos — id, title, description, creator_id, category_id, difficulty_level, duration, hls_path, subtitle_url, transcript, like_count, avg_rating
- categories — id, parent_id, name, slug, icon (42 категории в 7 корневых)
- video_classifications — video_id, is_educational, confidence, suggested_category, key_concepts, red_flags
- Социальные: bookmarks, likes, subscriptions, watch_history, ratings
- Коллекции: collections, collection_items
- Q&A: questions, answers, question_votes
- Аналитика: view_events, view_sessions, user_category_progress
- Уведомления: notifications
Роли и автомодерация
Viewer — базовая роль, смотрит видео, комментирует, собирает коллекции, подписывается. Creator — загружает видео, управляет каналом, видит аналитику. Moderator — одобряет/отклоняет видео, управляет категориями. Admin — полный доступ, суперадмин. Изоляция данных построена на userId (creator_id, uploaded_by). Автомодерация: новые авторы проходят ручную проверку первых видео, доверенные авторы и видео с AI-confidence > 85% публикуются автоматически.
Production и инфраструктура
Сервер 72.56.238.8. Docker-компоненты: `costube-postgres` (PostgreSQL 16), `costube-redis` (Redis 7), `costube-api` (Express на порту 4000), `costube-worker` (BullMQ воркер для transcode/transcribe/classify/chapters). Пути: фронт `/opt/costube/frontend/` (статика через Nginx), бэк `/opt/costube/project/backend/` (Docker build), хранилище видео `/opt/costube/storage/`. Nginx: `no-cache` для index.html (обновление SPA), `immutable` для assets. Деплой: `docker compose build api worker && docker compose up -d`, фронт `npx vite build && scp -r dist/* costube:/opt/costube/frontend/`.
Статус
Активная разработка, последний коммит 2026-05-11 (15+ коммитов за апрель–май). Все четыре фазы реализованы. Недавние работы: фиксы безопасности (auth, path traversal, tenant isolation, XSS, validation — 14 code-review issues), миграция SSE → polling для уведомлений, конвертация snake_case → camelCase на API-клиенте, фиксы плеера и инвалидации прогресс-бара. Roadmap перенесён в GitHub Project #19.
YouTube построен под алгоритм. CosTube построен под учебный процесс.