Один трекер для любого числа школ, и ни одна не видит чужого
Три трекера для разных курсов выросли в продукт: школа получает своего бота, свою программу и своё оформление за вечер, а не за неделю разработки.

Задача
Трекер потока, который я сделала для одной школы, понадобился второй, а потом третьей. Каждый раз это была копия кода: исправить ошибку — значит исправить её трижды, добавить функцию — трижды её перенести.
Нужен был один продукт для всех школ, где новая школа подключается настройкой, а не разработкой. И главное условие: данные одной школы никогда не должны попасть к другой — даже по ошибке в коде.
Что внутри
- Отдельная база на каждую школу. Не одна общая таблица с пометкой «чья запись», а отдельный файл. Чужие данные нельзя достать даже забытым условием в запросе.
- Свой бот у каждой школы. Участницы пишут боту своей школы, токены ботов хранятся зашифрованными.
- Вход только через Telegram. Без email и паролей: приложение проверяет подпись Telegram, подменить участницу нельзя.
- Программа — это данные, а не код. Владелица сама добавляет модули и уроки, выбирает, когда урок откроется: сразу, через N дней или в дату.
- Панель владелицы в телефоне. Сводка потока, где участницы останавливаются, отклики, доступы, тексты бота и оформление. Куратор видит всё, но ничего не меняет.



Как сделано
Я начала с того, что сломать нельзя, — с изоляции школ. Её охраняют автотесты: они нарочно пытаются прочитать данные соседней школы и падают, если это удалось. Таких проверок в проекте 24, все проходят.
Резервные копии делаются по каждой школе отдельно и проверяются восстановлением. Старые трекеры можно перенести в платформу импортом, не теряя прогресса участниц. Сейчас продукт готов к первой школе; на скриншотах — демо-школа «Тихая практика» с выдуманными участницами.