До цього «веб» був одним екраном: логін, мапа й панель алертів. Усе,
що вміло API, доводилось викликати curl-ом.
Каркас:
- бічна навігація з мобільною шухлядою, індикатор зв'язку в шапці,
живий лічильник алертів
- пункт, на який немає права, не показується взагалі; пряме посилання
лишається робочим і дає пояснення з назвою потрібного права
- стартова сторінка залежить від ролі: глядача без прав на мапи вітати
відмовою — поганий перший екран
Сторінки: мапа, пристрої з пошуком і картками алертів, алерти з
фільтрами, правила зі створенням через форму, канали з кнопкою
перевірки, зонди, команда з керуванням ролями, профіль зі зміною
пароля.
DataTable на телефоні перестає бути таблицею: горизонтальний скрол на
375 px робить дані формально присутніми й фактично нечитабельними.
Знайдено роботою з живим UI:
- WebSocket жив усередині мапи, тому на решті сторінок живих оновлень
не було взагалі — лічильник алертів замерзав, щойно людина йшла з
мапи. З'єднання винесено в модуль-одинак, яким володіє оболонка
- сторінка пристроїв перечитувала все на кожну подію алерту; зі
злиттям сплеску й спільними алертами той самий сплеск коштує
2 запити замість дванадцяти
- канал із секретом показувався як «секрету немає»: прапорець ставився
лише в гілці розшифровки, а перелік для UI викликається без ключа
Перевірено в браузері проти повного стека: усі вісім сторінок із
живими даними, створення правила й користувача через форми, перевірка
каналу, обмеження глядача, мобільний вигляд на 375 px.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>