Платформа для онлайн-школ

Кабинет школы и ученика в одном небесном интерфейсе

Course-IT — B2B2C для школ подготовки к ЕГЭ. Владелец ведёт программу и преподавателей, Анна проверяет работы, Иван входит по коду из почты и видит только свой курс. Без пароля ученика, без чужих тенантов, без конструктора «зарегистрируйся сам».

Саморегистрации школы нет: школу заводим мы, вы получаете поддомен и приглашения.

Вход
OTP
Шесть цифр на email, без пароля ученика
Изоляция
404
Чужой тенант выглядит как несуществующая страница
Кабинеты
3
Платформа, школа, ученик — одна палитра Небо
Фаза 1
ЕГЭ
Курсы, ДЗ, эфиры, тарифы и онбординг школы
Для кого продукт

Онлайн-школа как отдельный продукт, а не вкладка в общей админке

Пифагор открывается на своём поддомене, со своим логотипом и цветом primary. Геометрика не видит чужие уроки даже по прямой ссылке. Иван не придумывает пароль: вводит почту, получает код, попадает в кабинет. Анна работает в Livewire-кабинете школы, не в Filament. Filament — только нам, на хосте платформы.

Боль школы

Таблица в Notion, эфир в одном сервисе, ДЗ в другом

Пока школа растёт, ученик теряется между ссылками. Преподаватель не видит, кто сдал работу. Владелец не понимает, упёрлись ли в лимит тарифа. Course-IT собирает это в одну оболочку: светлый сайдбар, шапка 88px, карточки Неба.

В фазе 1 нет эквайринга и конструктора лендингов школы — зато есть честный контур: вход, роли, программа, зачисление, домашка, эфир, ручное подтверждение оплаты.

Сквозной пример

Пифагор · профильная математика

Владелец заводит курс «Профильная математика ЕГЭ». Анна ведёт уроки и проверяет сдачи. Иван видит только опубликованное и только свои зачисления.

  • Поддомен школы сразу после создания
  • Инвайт сотрудника и ученика на 7 дней
  • Чужой host — страница «адрес не подключён»

Как устроено

Три шага, которые не ломают изоляцию

01

Мы заводим школу

В кабинете платформы создаётся компания, slug, поддомен и инвайт владельцу. С улицы школу зарегистрировать нельзя: так не появляется «мусорный» тенант и не путаются оплаты.

02

Команда входит по почте

Владелец приглашает Анну ссылкой. Она открывает домен Пифагора, запрашивает код, принимает инвайт. Роль и права живут в команде Spatie с team_id школы — права Геометрики сюда не протекут.

03

Иван учится в своём кабинете

Четыре пункта меню: главная, курсы, задания, профиль. Дашборд плотный: ближайший урок, домашка, прогресс. Чужой курс — 404, не 403. Пароля нет и не будет в фазе 1.

Эфир

Урок как встреча, не как вебинарная каша

Расписание, плеер, запись. Ключ ingest не светится ученику. Доступ только если Иван зачислен и урок открыт. Это следующий контур после зачисления — уже в бэклоге, не «заодно» с лендингом.

Блоки продукта

Подробно: что школа получает в интерфейсе Неба

Вход без пароля

На домене школы форма честная: «вас нет в Пифагоре» — Иван понимает, что нужно приглашение. На app-хосте ответ нейтральный, чтобы не перечислять аккаунты. Код на 10 минут, три письма за четверть часа, после пяти ошибок — пауза. Код не пишется в тему письма и не попадает в логи.

Экран

Вход в Пифагор

Почта → шесть цифр → кабинет. Пилюля-кнопка, карточка 16px радиуса, фон страницы #F0F7FC.

Программа и курс как у школы, не как у маркетплейса

Предметы, курс с обложкой, секции, уроки, материалы. Черновик скрыт от Ивана, сотрудник его видит. HTML урока проходит через HTML Purify. Преподавателей назначают на курс, а не «всем подряд в школе».

Кабинет школы

Профильная математика ЕГЭ

Таблица в карточке, empty-тексты из канона, статусы бейджем и словами — не одним цветом.

Домашние задания с проверкой

Текст, файл, ссылка. Черновик, отправка, лимит попыток, дедлайн. Анна видит очередь на проверку только по своим курсам. Чужой курс — снова 404. Ивану после ревью приходит письмо и колокольчик.

Ученик

Сдать работу

Строки по 72px, чип статуса справа, модалка подтверждения перед отправкой.

Тариф считает лимиты до инвайта, не после

Ученики, сотрудники, курсы, домены, эфиры. 101-й инвайт на стартовом плане — 422, а не «потом разберёмся». Оплату школы подтверждаем вручную. Иван платформе не платит.

Биллинг

Лимит учеников

Прогресс-бар primary, баннер past_due в шапке школы, режим просмотра если grace кончился.

Три роли одной истории

Владелец, Анна и Иван не делят один экран

Владелец Пифагора

Онбординг, бренд, роли, тариф, приглашения. Системные роли нельзя удалить, последнего owner нельзя снять. Кабинет — Livewire и x-ds, не Filament.

Анна, преподаватель

Программа, урок, проверка ДЗ. Нет биллинга, если роли так настроены. Права складываются объединением, редактор ролей — отдельный контур школы.

Иван, ученик

Плотный дашборд, не пустые заглушки. Locked-урок говорит дату открытия. Выйти можно из профиля. Тот же светлый сайдбар, что у школы.

Изоляция

Чужой тенант — 404. Колонка называется company_id

Одна база, глобальный scope, fail-empty без контекста. Не database-per-tenant и не tenant_id. Cookie host-only: сессия app-хоста не утекает на свой домен школы. Платформенный /platform на ege.pifagor.ru не открывается. Это не «красивый баннер», это инвариант продукта.

Дальше

Готовы войти — если вас уже пригласили

Если вы владелец или сотрудник школы, откройте ссылку из письма или войдите почтой на домене школы. Если вы Иван — код придёт на ту почту, которую указал преподаватель. Новую школу с этой страницы завести нельзя.