Розробка мобільного додатка для електронного журналу (школа)
Батько дізнався про двійку дитини за контрольну в п'ятницю вечором — через месенджер іншого батька. Електронний журнал відправив сповіщення в пошту, яку ніхто не читає. Мобільний додаток з push — єдиний канал, який працює в реальному часі.
Три ролі та три різні додатки в одному
Електронний журнал обслуговує принципово різних користувачів: вчитель (вводить оцінки, ведає відвідуваністю), батько (слідкує за успішністю, отримує сповіщення), учень (видить розклад, домашні завдання). Один додаток з різними інтерфейсами за ролями — правильна архітектура.
RBAC (Role-Based Access Control) на рівні API: запит з токеном учителя не може отримати дані іншого класу, токен батька — тільки дані своїх дітей. Реалізується через Spatie Permissions (Laravel) або middleware на Node.js.
Push-сповіщення за ролями
Батько отримує:
- «Нова оцінка: Математика, 5 (чудово)» — немедленно при виставленні вчителем
- «Пропуск: Іванов Д. відсутній на 3 уроках сьогодні»
- «Нове домашнє завдання по фізиці на завтра»
- «Батьківські збори 25 квітня о 18:00» — нагадування за день
Учень отримує:
- «Домашнє завдання по біології додано»
- «Розклад на завтра змінений: фізкультура скасована»
- «Контрольна робота по алгебрі послізавтра»
Вчитель отримує:
- «Батько запитує зустріч»
- «Заміна: ви ведете 5Б в четвер замість хворого Петрова»
Кожен тип сповіщення — окремий FCM notification channel на Android (користувач налаштовує кожен незалежно) та окрема UNNotificationCategory на iOS.
Виставлення оцінок: real-time та offline
Вчитель на уроці виставляє оцінки — зв'язок може бути слабкою. Optimistic UI: оцінка одразу відображається, синхронізується у фоні. При помилці мережі — локальна черга (Hive/Isar), синхронізація при восстановленні.
Push батьку відправляється тільки після успішної синхронізації з сервером — не при локальному збереженні. Важливо: ситуація «сповіщення прийшло, оцінка не зберегла» не повинна бути.
Балльна система налаштовується: стандартна 5-балльна, 12-балльна (Україна), 100-балльна, буквена (A/B/C). Тип системи — налаштування школи, не hardcoded.
Розклад та його зміни
Розклад — джерело більшості сповіщень. Заміни вчителів, перенос уроків, актировані дні — все це must-have для сповіщень.
Розклад зберігається як базовий (на навчальний рік) + патчі (окремі зміни). При застосуванні патча сервер розраховує diff та розсилає сповіщення тільки зачеплені класи/учнів.
На клієнті розклад відображається через TableCalendar з кастомним рендеком ячеєк (кожний урок — окремий віджет з предметом, вчителем, кабінетом).
Домашні завдання з вкладеннями
Вчитель прикріплює файли (PDF, фото з дошки, посилання на відео). Перегляд у додатку через вбудований viewer або url_launcher для зовнішніх посилань.
Учень може позначити домашнє завдання як виконане — це допомагає батькам контролювати без назойливих питань «ти зробив уроки?». Статус завдання видний в батьківському інтерфейсі.
Дані дітей та 152-ФЗ
Додаток працює з персональними даними неповнолітніх — це посилені вимоги за 152-ФЗ. Дані зберігаються на серверах у РФ, персональні дані зашифровані, доступ тільки авторизованим користувачам. Згода на обробку збирається при реєстрації батька.
Інтеграція з державними системами
В Російських школах працюють з ЕПОС.Школа, «Мережевим містом» або регіональними системами. Інтеграція через REST/SOAP API цих систем або імпорт/експорт — залежить від вимог конкретного замовника.
Терміни
| Масштаб | Термін |
|---|---|
| MVP: оцінки, розклад, push | 10–12 тижнів |
| + Домашні завдання, відвідуваність, чат | 16–20 тижнів |
| + Інтеграція з ЕПОС.Школа / «Мережевим містом» | +6–8 тижнів |







