Overview
Oncoschool Team Portal is a full-stack team management system with dual entry points: a web interface and a Telegram bot. It combines task management, meeting planning, analytics, and integrations with external services (GetCourse, Zoom, Telegram) into a single platform for a team of ~20 people.
Architecture
┌─────────────────────────────────────────────────────┐
│ Frontend (Vercel) │
│ Next.js 14 · TypeScript · Tailwind CSS · shadcn/ui │
│ Recharts · Lucide React │
└──────────────────────┬──────────────────────────────┘
│ REST API + JWT Auth + SSE
┌──────────────────────▼──────────────────────────────┐
│ Backend (Railway) │
│ FastAPI · Python 3.12 · SQLAlchemy 2.0 · Alembic │
│ aiogram 3.x · APScheduler │
├──────────┬───────────┬───────────┬──────────────────┤
│PostgreSQL│ Zoom API │ Telegram │ AI Providers │
│ (Supabase│ S2S OAuth │ Bot API + │ OpenAI / Anthropic│
│ asyncpg)│ │ Pyrofork │ / Gemini │
│ │ │ │ │
│ │ GetCourse │ Whisper │ │
│ │ API │ STT │ │
└──────────┴───────────┴───────────┴──────────────────┘
Key Features
- Task Management — Kanban board with filtering, prioritization, timeline updates, and role-dependent field editing (RBAC)
- Voice Task Creation — Voice messages in Telegram → Whisper STT → AI parsing → preview → confirmation → task
- Meeting & Zoom Integration — Schedule meetings with auto-created Zoom rooms, sync transcriptions, AI-generated action items from meeting summaries
- Telegram Bot — FSM-based multi-step flows with inline buttons, pagination, and filtering (
/tasks,/new,/done,/status,/assign,/summary) - Analytics Dashboard — KPI tracking, task flow dynamics, GetCourse integration for daily metrics
- Team Management — Org tree with departments, roles, avatar uploads, department-scoped visibility
- Content Monitoring — Encrypted Telegram userbot for channel monitoring with AI analysis
- Broadcasts — Mass notifications via Telegram bot with media support
Technical Highlights
| Challenge | Solution |
|---|---|
| Dual entry point (Web + Telegram) | Shared service layer between FastAPI and aiogram — business logic written once |
| Multi-provider AI | Strategy pattern with per-feature config table; switch models without restart |
| Voice command processing | Whisper STT → AI structured parsing → interactive preview before commit |
| Zoom transcript analysis | VTT parsing with timestamps, LLM summarization, automatic task extraction |
| Department-scoped RBAC | Three roles (admin/moderator/member) with field-level control via PermissionService |
| Real-time updates | SSE with JWT via query parameter, heartbeat handling for reverse proxies |
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, TypeScript, Tailwind CSS, shadcn/ui |
| Charts | Recharts |
| Backend | FastAPI, Python 3.12, aiogram 3.x |
| ORM | SQLAlchemy 2.0 (async), Alembic |
| Database | PostgreSQL (Supabase, asyncpg) |
| Auth | JWT + bcrypt, role-based access |
| AI | OpenAI, Anthropic, Google Gemini (multi-provider) |
| STT | OpenAI Whisper |
| Integrations | Zoom (S2S OAuth), Telegram (Bot + Pyrofork), GetCourse |
| Scheduling | APScheduler (AsyncIO) |
| Deploy | Vercel (frontend), Railway (backend), Docker |