Обзор
Oncoschool Team Portal — полнофункциональная система управления командой с двумя точками входа: веб-интерфейс и Telegram-бот. Платформа объединяет управление задачами, планирование встреч, аналитику и интеграции с внешними сервисами (GetCourse, Zoom, Telegram) для команды из ~20 человек.
Архитектура
┌─────────────────────────────────────────────────────┐
│ Фронтенд (Vercel) │
│ Next.js 14 · TypeScript · Tailwind CSS · shadcn/ui │
│ Recharts · Lucide React │
└──────────────────────┬──────────────────────────────┘
│ REST API + JWT Auth + SSE
┌──────────────────────▼──────────────────────────────┐
│ Бэкенд (Railway) │
│ FastAPI · Python 3.12 · SQLAlchemy 2.0 · Alembic │
│ aiogram 3.x · APScheduler │
├──────────┬───────────┬───────────┬──────────────────┤
│PostgreSQL│ Zoom API │ Telegram │ AI-провайдеры │
│ (Supabase│ S2S OAuth │ Bot API + │ OpenAI / Anthropic│
│ asyncpg)│ │ Pyrofork │ / Gemini │
│ │ │ │ │
│ │ GetCourse │ Whisper │ │
│ │ API │ STT │ │
└──────────┴───────────┴───────────┴──────────────────┘
Ключевые возможности
- Управление задачами — Канбан-доска с фильтрацией, приоритизацией, таймлайном обновлений и ролевым редактированием полей (RBAC)
- Голосовое создание задач — Голосовое сообщение в Telegram → Whisper STT → AI-парсинг → превью → подтверждение → задача
- Встречи и Zoom — Планирование встреч с автоматическим созданием Zoom-комнат, синхронизация транскрипций, AI-извлечение задач из итогов встреч
- Telegram-бот — FSM-потоки с инлайн-кнопками, пагинацией и фильтрацией (
/tasks,/new,/done,/status,/assign,/summary) - Аналитический дашборд — KPI-метрики, динамика потока задач, интеграция GetCourse для ежедневных показателей
- Управление командой — Оргструктура с подразделениями, ролями, загрузкой аватаров, видимостью по отделам
- Мониторинг контента — Зашифрованный Telegram-юзербот для мониторинга каналов с AI-анализом
- Рассылки — Массовые уведомления через Telegram-бот с поддержкой медиа
Технические решения
| Задача | Решение |
|---|---|
| Двойная точка входа (Web + Telegram) | Общий слой сервисов между FastAPI и aiogram — бизнес-логика написана один раз |
| Мульти-провайдерный AI | Strategy pattern с конфигурацией per-feature; переключение моделей без рестарта |
| Обработка голосовых команд | Whisper STT → AI структурный парсинг → интерактивное превью перед сохранением |
| Анализ Zoom-транскрипций | Парсинг VTT с таймстемпами, LLM-суммаризация, автоматическое извлечение задач |
| RBAC с привязкой к отделам | Три роли (admin/moderator/member) с контролем на уровне полей через PermissionService |
| Real-time обновления | SSE с JWT через query-параметр, heartbeat для обхода буферизации reverse proxy |
Технологический стек
| Слой | Технология |
|---|---|
| Фронтенд | Next.js 14, TypeScript, Tailwind CSS, shadcn/ui |
| Графики | Recharts |
| Бэкенд | FastAPI, Python 3.12, aiogram 3.x |
| ORM | SQLAlchemy 2.0 (async), Alembic |
| База данных | PostgreSQL (Supabase, asyncpg) |
| Авторизация | JWT + bcrypt, ролевая модель доступа |
| AI | OpenAI, Anthropic, Google Gemini (мульти-провайдер) |
| STT | OpenAI Whisper |
| Интеграции | Zoom (S2S OAuth), Telegram (Bot + Pyrofork), GetCourse |
| Планировщик | APScheduler (AsyncIO) |
| Деплой | Vercel (фронтенд), Railway (бэкенд), Docker |