Журнал ведут на ходу, а не за ноутбуком
Преподаватель отмечает посещаемость в конце занятия, стоя между партами: восемь-двадцать человек, и надо никого не пропустить. Ноутбук в этот момент закрыт — открыть его, сесть и найти нужную группу дольше, чем провести пальцем по списку в телефоне.
Приложение существует ради одного экрана. Остальные два кабинета появились потому, что человек с приложением уже в руке. Родителю нужен взгляд на посещаемость и результаты, а не сеанс работы. Ученику — по дороге домой узнать, зачлась ли задача, и иногда поправить одну строку. Писать решение целиком с телефона неудобно, и приложение этого не притворяется: заготовка подставляется из задачи.
Что внутри
Четыре состояния, а не два
Опоздание — не то же самое, что пропуск, и уважительная причина тоже. Отметки различаются формой, а не только цветом: галочка, крест, часы, щит. Красное и зелёное неразличимы примерно у каждого двенадцатого мужчины.
Язык iOS, а не перекрашенный Material
Разница не в цвете: крупный заголовок схлопывается при прокрутке, свайп от левого края возвращает назад, списки уходят за край с отскоком, выбор поднимается листом снизу. У каждой вкладки свой стек навигации.
Свой набор вкладок под роль
Преподавателю первым открывается журнал, родителю — дети, ученику — занятия. Не право доступа, а порядок: у каждого своя причина открыть приложение, и она стоит первой.
Кабинет родителя без кода ребёнка
Взрослый видит посещаемость, решённые задачи, последние занятия и сданные работы. Кода не видит намеренно: API его не отдаёт, а приложение не спрашивает. Разбор решения — дело преподавателя.
Три языка, ключ — сама строка
Подписи статусов, ролей и сложности приходят с сервера уже переведёнными: приложение шлёт Accept-Language и не держит второй копии этих слов. Свои строки лежат в одной карте, непереведённое остаётся читаемым текстом.
Проверка в очереди, опрос результата
Одна сборка на площадке занимает секунды, на Go около двадцати. Приложение отправляет работу, получает идентификатор и опрашивает, пока результат не готов, — вместо запроса, висящего минуту.