Личный кабинет клиента
Личный кабинет (ЛК) — веб-портал самообслуживания клиента по адресу
/lk/. Здесь клиент видит баланс и тариф, пополняет счёт, меняет
тариф, подключает услуги и ТВ, общается с поддержкой и AI-ассистентом, управляет
профилем и безопасностью входа. Доступен с компьютера и телефона (адаптивная
вёрстка) и продублирован мобильными приложениями Android / iOS.
Содержание раздела
- Обзор
- Вход и способы авторизации
- Дашборд
- Финансы
- Тарифы
- Услуги и ТВ
- Что попадает в каталог
- Два способа заказа: сразу и по заявке
- Отключение клиентом
- Поддержка и заявки
- AI-ассистент
- Профиль и безопасность
- Дополнительные возможности
- Тест скорости
- Тёмная тема и мобильный вид
- Карта раздела
- Настройка ЛК в админке
- Область действия настроек и организации
- Обзор: у кого что включено
- Обзор: что показывает
- Брендинг
- Функции
- Способы входа
- AI-чат
- Безопасность
- Мобильное
- Поиск, сохранение и проверки
- Фон страницы входа
- Мобильные приложения и Public API
- Force-update
- Push-уведомления (Firebase)
Содержание
- Обзор
- Вход и способы авторизации
- Дашборд
- Финансы (баланс, пополнение, история)
- Тарифы
- Услуги и ТВ
- — Что попадает в каталог
- — Заказ: сразу и по заявке
- — Отключение клиентом
- Поддержка и заявки
- AI-ассистент
- Профиль и безопасность
- Доп. возможности (сессии, тест скорости, ОП, рефералы)
- — Тест скорости и VPN
- Тёмная тема и мобильный вид
- Карта раздела
- Настройка ЛК в админке
- — Область действия и организации
- — Обзор: у кого что включено
- — Поиск, сохранение и проверки
- — Фон страницы входа
- Мобильные приложения и Public API
Тот же механизм, но нарисованный: узлы можно подсвечивать, связи — разбирать по шагам. Открывается в новой вкладке.
Все схемы системыОбзор
Кабинет глазами клиента: вход, баланс и расчётный период, пополнение, «за что списали», смена тарифа, заказ услуг и ТВ, AI-ассистент, мобильное приложение.
ЛК закрывает весь цикл самообслуживания, разгружая поддержку:
- Финансы — баланс, онлайн-пополнение (ЮKassa / Wallet One), история платежей и операций, обещанный платёж.
- Тариф и услуги — смена тарифа, подключение/отключение услуг, интерактивное ТВ (IPTV).
- Связь — заявки в поддержку, сообщения, AI-ассистент 24/7.
- Профиль — контакты, смена пароля, привязка соцсетей, безопасность входа.
- Сервис — активные подключения (сессии), тест скорости, реферальная программа, добровольная блокировка.
Брендинг, набор включённых функций и тексты настраиваются администратором в разделе «ЛК и мобильные»; при мультиоператорной конфигурации — отдельно для каждой организации.
Вход и способы авторизации
Страница входа /lk/login/. Основной вход — по логину
и паролю (договор / логин клиента). Дополнительно доступны способы входа,
которые включает оператор:
- VK, Google, Apple, Яндекс — вход через OAuth-аккаунт.
- Telegram — вход через Telegram-виджет.
- Passkey (FIDO2 / WebAuthn) — вход по биометрии/ключу без пароля.
Восстановление пароля (/lk/forgot-password/) —
по SMS или Email (выбирается оператором). Фон страницы входа и страницы заполнения
контактов настраивается в брендинге.
Дашборд
Главная страница /lk/ — сводка по клиенту:
- Баланс крупной цифрой + кнопка «Пополнить».
- Договор и статус подключения (Активен / Заблокирован / Приостановлен).
- Текущий тариф + быстрая кнопка «Сменить тариф».
- Поддержка — индикатор активных заявок и быстрая ссылка «Написать».
- Последний платёж.
- Расчётный период — списано с начала месяца, сравнение с тем же окном прошлого месяца («на N ₽ больше/меньше»), прогресс дня месяца и «Следующее списание 1 числа — ≈сумма абонплаты».
- Состав тарифа — чеклист услуг тарифа (интернет со скоростью, ТВ и т.д.) прямо в карточке тарифа.
- Баннер уведомлений — текст от оператора (техработы, акции) сверху.
Слева — навигация по разделам, сгруппированная: Финансы, Услуги, Поддержка. Справа в шапке — баланс, договор, переключатель темы и меню профиля. AI-чат доступен плавающей кнопкой в правом нижнем углу.
Финансы
- Пополнить баланс (
/lk/payments/pay/) — ввод суммы и оплата картой через ЮKassa или Wallet One. После успешной оплаты баланс зачисляется автоматически по webhook. - История платежей (
/lk/payments/) — список пополнений с датой/суммой/способом, экспорт в CSV. - История операций (
/lk/audit/) — все списания и начисления (абонплата, услуги, корректировки), бесконечная прокрутка. - Обещанный платёж (
/lk/promise-pay/) — временный кредит доверия, если включён оператором.
Тарифы
Страница /lk/tariff/: вверху — карточка текущего тарифа (скорость,
цена, линейка услуг), ниже — доступные для перехода тарифы с ценой и скоростью и
кнопкой «Перейти на этот тариф». Смена применяется сразу или со следующего
расчётного периода в зависимости от настроек тарифа.
Услуги и ТВ
- Дополнительные услуги (
/lk/services/) — подключённые услуги клиента и каталог того, что он может заказать сам. - Интерактивное ТВ (
/lk/iptv/) — подключение IPTV-пакетов (TVIP / LFStream «Смотрёшка»). ТВ заказывается только здесь: вместе с услугой создаётся подписка у оператора ТВ, чего обычное подключение услуги не делает.
Что попадает в каталог
Услуга видна клиенту, если у неё стоит галка «Показывать в ЛК» (вкладка «ЛК клиента» в карточке услуги) и она проходит правила каталога:
- принадлежит организации клиента либо не привязана ни к одной (общая);
- не удалена, не в архиве, не помечена служебной;
- не относится к типам, которые клиент не заказывает: абонплата тарифа (Трафик), гостевой Wi-Fi, обещанный платёж, бонусы, системные;
- не относится к типу с собственным разделом — ТВ заказывается в «Интерактивном ТВ».
Те же правила действуют в мобильном приложении — каталог общий
(billing/services/lk_service_catalog.py).
Два способа заказа: сразу и по заявке
| Что за услуга | Кнопка у клиента | Что происходит |
|---|---|---|
| Периодическая (абонплата) дешевле порога | «Подключить» | Услуга подключается сразу. Списание идёт обычным биллингом, а не в момент нажатия. Если у услуги включена проверка баланса — при нехватке средств кнопка недоступна. |
| Разовая работа или услуга дороже порога | «Оставить заявку» | Услуга не подключается. В Поддержке создаётся обращение с ценой по прайсу и контактами клиента; оператор согласует сроки и подключает сам. |
Порог задаётся в Настройки → Личный кабинет → Функции → «Заказ услуги без заявки до» (по умолчанию 3000 ₽; 0 — любая услуга только заявкой). Отдельная услуга может обойти правило галкой «Подключать сразу, без заявки» в своей карточке — для работ с выездом и договором её не ставят.
Отключение клиентом
Клиент отключает услугу сам, только если в карточке услуги стоит «Разрешить отключение в ЛК». Поле «Разрешить отключение через N месяцев» задаёт минимальный срок: до этой даты кнопка заменяется датой, с которой отключение станет доступно. Правило одинаково работает в ЛК и в мобильном приложении.
Поддержка и заявки
Раздел /lk/support/ — заявки в техподдержку (нативная Поддержка СмИТ
Биллинг): список обращений со статусами, создание новой заявки, переписка с
оператором и вложения. Отдельно — Сообщения (/lk/messages/):
уведомления и рассылки от оператора.
AI-ассистент
AI-ассистент (/lk/chat/ + плавающий виджет) отвечает на вопросы 24/7
на базе AI-агента биллинга, использует базу знаний
поддержки и видит контекст клиента (баланс, тариф). При сложном вопросе
автоматически создаёт заявку и передаёт диалог живому оператору. Клиент может
оценить ответы 👍/👎. Срок хранения истории чата настраивается оператором.
Профиль и безопасность
Страница /lk/profile/: контактные данные (email/телефон с
подтверждением), смена пароля (/lk/password/),
привязка соцсетей (VK / Telegram / Google / Apple / Яндекс) и
passkey, переключатель темы. При первом входе, если оператор требует контакты,
клиент проходит экран /lk/profile/contacts-required/.
Дополнительные возможности
- Подключения (
/lk/sessions/) — активные и недавние сессии клиента (IP, время, трафик). - Тест скорости (
/lk/speedtest/) — два способа замера, с VPN не запускается — подробнее. - История операций (
/lk/audit/) — см. ниже. - Реферальная программа (
/lk/referral/) — приглашение друзей и бонусы. - Добровольная блокировка (
/lk/block/) — «отпуск»: приостановка услуг на время отъезда.
Тест скорости
Страница /lk/speedtest/ меряет скачивание, отдачу, задержку и jitter
и сравнивает скачивание с тарифом: от 80% — «соответствует», 50–80% — «ниже
ожидаемой», меньше 50% — «значительно ниже» и кнопка «Создать обращение» с готовым
текстом (скорости, пинг, дата и способ замера). Способ выбирается переключателем над
шкалой и запоминается в браузере; в истории тестов у каждого замера подписан способ.
| Способ | Куда меряет | Зачем |
|---|---|---|
| Наш сервер | До сервера биллинга: один поток, 10 МБ скачивания и 5 МБ отдачи, 5 замеров задержки | Видно, выдаёт ли оператор скорость тарифа на всём пути до клиента |
| Серверы Яндекса | До ближайших серверов Яндекса — тех же, что использует yandex.ru/internet. Узел с наименьшей задержкой, 10 секунд скачивания в 4 потока и 8 секунд отдачи в 3 потока; первые 2 секунды в результат не идут | Сравнить скорость «до нас» и «до внешних сайтов»: если до нас быстро, а до Яндекса медленно, проблема за пределами сети оператора |
Список узлов Яндекса запрашивает биллинг (/lk/speedtest/probes/, кэш
2 минуты; если Яндекс не ответил — запасной список узлов), сам замер идёт из браузера
клиента напрямую к узлам.
С включённым VPN замер не проводится. Сеть проверяется при открытии
страницы и перед каждым замером (/lk/speedtest/check/), пока проверка
идёт — кнопка неактивна:
- адрес запроса должен относиться к сети оператора: активная RADIUS-сессия, IP учётной записи, IP-пулы или «Доп. подсети оператора» из настроек ЛК. Иначе — «Соединение идёт не через нашу сеть»;
- браузер узнаёт свой внешний адрес через WebRTC (STUN), и биллинг сверяет его с теми же сетями. Запрос из сети, а браузер выходит в интернет с чужого адреса — «Обнаружен VPN или прокси».
В обоих случаях кнопка «Отключите VPN» неактивна; после отключения клиент нажимает «Проверить снова» — страницу перезагружать не нужно. Сервер биллинга, кроме того, сам отказывает в замере «до нашего сервера» (403), если запрос пришёл не из сети. Не удалось проверить (сбой запроса или нет данных о сети) — тест доступен.
В «Доп. подсети оператора» (настройки ЛК → безопасность) указывают не только внутренние адреса, с которых клиенты приходят на биллинг, но и внешние сети оператора, через которые клиенты выходят в интернет: иначе адрес браузера не узнаётся как свой, и проверка принимает клиента за VPN.
flowchart TB
A["Нажал «Начать тест»"] --> B{"Адрес запроса из сети оператора?"}
B -->|нет| X["Соединение не через нашу сеть"]
B -->|да| C{"Адрес браузера из сети оператора?"}
C -->|нет| Y["Обнаружен VPN или прокси"]
C -->|да или неизвестен| D["Замер выбранным способом"]
X --> R["Отключить VPN и Проверить снова"]
Y --> R
Тёмная тема и мобильный вид
ЛК поддерживает тёмную тему (переключатель в шапке; выбор сохраняется в браузере) и полностью адаптивен — на телефоне навигация сворачивается, карточки перестраиваются в одну колонку.
Карта раздела
flowchart TB
LOGIN["Вход /lk/login/
пароль · VK · TG · Google
Apple · Яндекс · passkey"] --> DASH["Дашборд /lk/
баланс · тариф · статус"]
DASH --> FIN["Финансы"]
DASH --> SRV["Услуги"]
DASH --> SUP["Поддержка"]
DASH --> PROF["Профиль"]
FIN --> PAY["Пополнить
ЮKassa · W1"]
FIN --> HIST["История платежей
/операций · ОП"]
SRV --> TAR["Тарифы"]
SRV --> SVC["Услуги · IPTV"]
SUP --> TICK["Заявки · Сообщения"]
SUP --> AI["AI-ассистент
24/7"]
PROF --> SEC["Пароль · соцсети
passkey · контакты"]
AI -.->|"сложный вопрос"| TICK
style LOGIN fill:#1e3a5f,stroke:#5BA89D,color:#fff
style DASH fill:#134e4a,stroke:#43b77a,color:#fff
style PAY fill:#43b77a,stroke:#2d9a5f,color:#fff
style AI fill:#1e3a5f,stroke:#5BA89D,color:#fff
style TICK fill:#78350f,stroke:#d97706,color:#fff
Настройка ЛК в админке
Раздел Настройки → ЛК и мобильные (/admin/settings/lk/) —
7 вкладок. вкладки загружаются по одной: открытая приходит с сервера,
остальные — при переходе.
- Обзор — сводка: подключения приложений, привязки соцсетей, текущая конфигурация, статистика AI-ассистента.
- Брендинг (
#lk-admin-branding) — баннер уведомлений (с живым примером), цвет ЛК, визуальные эффекты (тёмная тема / анимация / стекло), фоны страниц логина и онбординга (с превью в модалке). - Функции (
#lk-admin-features) — флаги видимости разделов (Услуги, Аудит, HelpDesk, смена MAC и др.) и поведения. - Способы входа — VK, Telegram, Apple, Google, Яндекс, passkey: креды и переключатели. Вынесены из «Функций»: у них своя область действия (переопределяются организацией) и правят их другие люди.
- AI-чат — каналы (веб-ЛК / мобильное), сбор оценок, автоэскалация, срок хранения истории.
- Безопасность (
#lk-admin-security) — вход по IP, автологин по IP, запрет смены пароля. - Мобильное (
#lk-admin-mobile) — версии Android/iOS, ссылки в сторы (с превью приложения), тексты force-update, push, особенности.
Из чего состоит раздел и куда уходят настройки:
flowchart LR
subgraph ADM["Настройки → ЛК и мобильные"]
OV["Обзор"]
BR["Брендинг"]
FE["Функции"]
AU["Способы входа"]
AI["AI-чат"]
SE["Безопасность"]
MO["Мобильное"]
end
ADM --> STORE["Настройки биллинга
общие + переопределения
по организациям"]
STORE --> WEB["Личный кабинет
в браузере"]
STORE --> APP["Приложения
Android и iOS"]
STORE --> API["Мобильный API"]
OV -. "читает" .- STORE
Обзор: что показывает
Первый экран отвечает на вопрос «как этим пользуются и что сейчас включено» — без открывания остальных вкладок.
- Показатели сверху — сколько клиентов получили push-токен, сколько установок приложения (Android / iOS), активные сессии, привязки соцсетей.
- Текущая конфигурация — бренд и цвет, состояние AI-чата, способы входа, что требуется при регистрации, как восстанавливают пароль. Шестерёнка у строки открывает вкладку, где это меняется.
- Мобильные приложения — текущая и минимальная версии, канал распространения iOS.
- Последние входы и каналы за 30 дней — по чему клиенты действительно заходят: пароль, соцсеть, код из SMS, звонок.
- Возможности по организациям и журнал правок — ниже, когда текущее состояние уже понятно.
Брендинг
- Баннер уведомлений — строка вверху кабинета и в приложении: технические работы, акция, важное объявление. Редактируется с форматированием (жирный, курсив, цитата); пустое поле убирает баннер. Тип баннера задаёт цвет.
- Цвет кабинета — по умолчанию берётся из брендинга компании, но его можно переопределить именно для ЛК.
- Визуальные эффекты — выбор тёмной темы клиентом, анимация фона, эффект стекла.
- Фоны входа и онбординга — галерея картинок и роликов с привязкой к теме и устройству (подробнее).
- Установка на рабочий стол (PWA) — имя приложения, короткая подпись под иконкой, баннер с предложением установить и пауза после отказа.
Функции
Вкладка отвечает на вопрос «что клиент видит и что может сделать сам». Выключенный раздел исчезает и из кабинета, и из приложения, а запрос к нему возвращает отказ — обойти его ссылкой не получится.
- Разделы кабинета — услуги, история операций, поддержка, тариф, оплата.
- Действия клиента — обещанный платёж, смена тарифа, добровольная блокировка, смена MAC-адреса.
- Пороги — до какой суммы услуга подключается сразу, а дороже уходит заявкой оператору; минимальный долг для обещанного платежа.
Часть настроек здесь — ответственные: обещанный платёж это выдача услуги в долг, а смена тарифа клиентом меняет начисления. Перед сохранением такой правки панель покажет, что именно изменится, и запишет это в аудит.
Способы входа
Здесь собрано всё, чем клиент подтверждает, что он это он: логин и пароль, вход по договору или телефону, соцсети (VK, Telegram, Apple, Google, Яндекс), код из SMS, звонок с кодом, passkey. У каждого способа — свой переключатель и ключи приложения.
flowchart TD
C["Клиент открывает кабинет"] --> WAY{"Чем входит?"}
WAY -->|"логин и пароль"| PW["Проверка пары
логин / договор + пароль"]
WAY -->|"соцсеть"| SOC["VK · Telegram · Apple
Google · Яндекс"]
WAY -->|"код"| CODE["SMS или звонок
с кодом"]
PW --> CHK{"Условия входа
(вкладка «Безопасность»)"}
SOC --> LINK["Привязка к клиенту
по телефону или e-mail"]
LINK --> CHK
CODE --> CHK
CHK -->|"ок"| IN["Кабинет открыт"]
CHK -->|"нет контактов
или не подтверждены"| FILL["Онбординг:
заполнить и подтвердить"]
FILL --> IN
Способы входа вынесены из «Функций» отдельной вкладкой: у них своя область действия (организация может переопределить их под себя) и правят их обычно другие люди.
AI-чат
- Каналы — отдельно веб-кабинет и мобильное приложение: выключенный канал прячет кнопку чата, а запрос возвращает отказ.
- Оценки ответов — клиент ставит «помогло / не помогло»; из этих отметок собирается материал для обучения.
- Автоэскалация — когда ассистент не справился, разговор уходит человеку в Поддержку.
- Срок хранения истории — старые переписки удаляются; ноль означает «хранить бессрочно».
В разделе не называются поставщики и модели нейросетей — везде просто «AI»: оператору настроек кабинета это не нужно, а имена моделей меняются. Сам ассистент настраивается в разделе AI-ассистент.
Безопасность
- Вход только со своего IP — клиент, сменивший сеть после входа, теряет сессию.
- Автовход по IP — кабинет открывается без логина и пароля по совпадению адреса. На публичных адресах в кабинет попадёт любой, кому этот адрес достанется, поэтому включать стоит только в закрытых сетях.
- Управление паролем — запрет смены пароля из кабинета, отправка пароля в SMS, требования к новому паролю.
- Обязательные контакты — без e-mail или телефона в профиле клиент не войдёт, пока не заполнит и не подтвердит их.
Все настройки этой вкладки ответственные: любая из них может закрыть вход клиентам. Панель сохранения показывает последствия и пишет правку в аудит.
Мобильное
- Версии — текущая и минимальная для Android и iOS, ссылки в Google Play и App Store, канал распространения iOS (TestFlight или магазин).
- Тексты диалогов обновления — что клиент прочитает при обязательном и при мягком обновлении.
- Порог мягкого обновления — через сколько дней после выхода новой версии предлагать обновиться.
- Превью — можно проверить, что увидит клиент с конкретной версией, не устанавливая её.
flowchart LR
A["Приложение при запуске
сообщает свою версию"] --> B{"Меньше
минимальной?"}
B -->|"да"| F["Обязательное обновление:
работать нельзя,
только перейти в магазин"]
B -->|"нет"| C{"Старше текущей
дольше порога?"}
C -->|"да"| S["Мягкое предложение:
«доступна новая версия»,
можно отложить"]
C -->|"нет"| OK["Работает как есть"]
Область действия настроек и организации
На одной инсталляции живут несколько организаций, у каждой свой домен личного кабинета. Настройка может быть общей — действует на все организации, или своей — принадлежит одной.
- Общая для всех организаций — значение хранится в общих настройках. Правка меняет ЛК всех брендов сразу; при выбранной организации сохранение потребует подтверждения.
- Своя у «Организация» — организация переопределила
значение. Переопределения хранятся в таблице
LK_SETTING_ORG. - Пока общая, скоро станет своей — механизм готов, группа настроек ещё не подключена.
Ключевое правило: отсутствие своего значения = наследование общего. Поэтому «сбросить к общему» физически удаляет строку переопределения, а сохранение формы без изменений не создаёт своих значений — иначе первая же правка заморозила бы у организации всю форму и общие изменения перестали бы до неё доходить.
Когда в шапке админки выбрана организация, поля показывают, откуда взято значение: унаследовано — приходит из общих настроек, своя — принадлежит организации, рядом кнопка «к общему». Сверху — счётчик своих настроек и «сбросить все к общим».
Какие настройки переопределяются
| Группа | Что входит | Механизм |
|---|---|---|
| Брендинг | фон входа, баннер, цвет, PWA, ссылка на сайт | LK_SETTING_ORG + резолвер |
| Мобильное | тексты обновления, push, особенности | |
| Функции | видимость разделов, обещанный платёж | |
| Безопасность | пароли, блокировки, привязка по IP | |
| Способы входа | VK / Telegram / Apple / Google / Яндекс / passkey | LKAuthOrg |
| AI-чат | каналы, автоэскалация, оценки | LKAiChatOrg |
Состав групп задаётся настройкой LK_ORG_OVERRIDABLE_GROUPS, весь
механизм выключается одним LK_ORG_OVERRIDES_ENABLED. Резолвер работает
«fail-open»: если переопределения недоступны, ЛК берёт общее значение — настройки
не повод не пустить клиента в кабинет.
Обзор: у кого что включено
Вкладка «Обзор» отвечает на первый вопрос мультибрендовой установки — где что включено. В таблице «Возможности по организациям» пометка своя означает переопределение, без пометки — наследование общего. Ниже — история изменений настроек из аудита: кто, когда, что и в какой области (общие или организация).
Оттуда же работает копирование настроек между организациями: выбор источника и приёмника, группа настроек, предпросмотр различий и применение. Полезно при запуске нового бренда — не повторять десятки полей руками.
Поиск, сохранение и проверки
- Поиск (Ctrl+K) — по всем 139 настройкам раздела, включая вкладки, которые ещё не загружены: выбор результата открывает нужную вкладку и подсвечивает поле. Строка стоит в линии с полосой вкладок; на телефоне — над ней, во всю ширину. Это общий компонент, тот же, что в «Настройках системы» и остальных разделах (как он устроен).
- Единая панель несохранённого внизу экрана — показывает, в каких разделах есть правки, и сохраняет их одним нажатием. Правку ответственной настройки (деньги, доступ клиентов, массовые рассылки) она показывает отдельным подтверждением и пишет в аудит.
- Журнал правок читается словами: «Смена тарифа из ЛК: вкл → выкл», а не «LK_FEATURE_TARIFF_CHANGE=0».
- Проверки на месте: тестовый push на устройство клиента, письмо восстановления пароля, вопрос AI-ассистенту — без входа в ЛК под тестовой учётной записью.
В разделе не называются поставщики и модели нейросетей — везде просто «AI»: оператору настроек кабинета это не нужно, а имена моделей меняются.
Фон страницы входа
Фон настраивается в Брендинг → Фон страницы логина.
- Галерея — картинки и зацикленные полноэкранные ролики. У каждого элемента своя тема (светлая / тёмная / любая), устройство (десктоп / мобильные / все) и выравнивание. До 5 вариантов на связку тема×устройство; если подходящих несколько — показывается случайный.
- Видео грузится лениво и только когда уместно: не при
prefers-reduced-motion, не в режиме экономии трафика, не на 2G и по умолчанию не на мобильных — там показывается постер. На скрытой вкладке ролик встаёт на паузу. - Сжатие при загрузке: ролик перекодируется в 1080p, H.264 CRF 23, без звука, с быстрым стартом, из первого кадра снимается постер. Требуется ffmpeg в контейнере.
- Анимированные фоны (порты с 21st.dev): «Линии», «Точки», «Сетка»,
«Лучи по сетке», «Волны сияния», «Звёздная сетка», «Сияние (CSS)». Рисуются акцентным
цветом организации, следят за темой, замирают при
prefers-reduced-motionи на скрытой вкладке. - Связка ролика и анимации: тумблер «Показывать анимацию, когда ролик не играет» превращает анимированный фон в дублёра — он работает на мобильных без видео, при экономии трафика и пока грузится первый кадр. Выключен — анимация полностью заменяет галерею.
Сводка «что увидит клиент» над галереей пересчитывается на лету и показывает раздельно для десктопа и мобильных, что именно получит посетитель при текущих настройках.
Мобильные приложения и Public API
ЛК продублирован приложениями Android (Google Play) и
iOS (App Store / TestFlight) на Flutter. Приложения используют
Public Mobile API (/mobile-api/v1/, JWT-авторизация):
баланс/тариф/блокировки, платежи, тарифы, услуги, заявки поддержки, AI-чат,
регистрация push-токена.
Force-update
В админке (вкладка «Мобильное») задаются текущая и минимальная версии Android/iOS. Если у клиента версия старее минимальной — приложение показывает диалог обязательного обновления со ссылкой в стор; для версий между минимальной и текущей — мягкое предложение обновиться.
Push-уведомления (Firebase)
Push работают при загруженном файле сервисного аккаунта firebase-key.json
и включаются на странице Сообщения → Push. Низкий баланс, истечение
обещанного платежа и рассылки оператора уходят пушами в приложение. Расписание
отправки — глобальное (Настройки системы → Сообщения).
Скриншоты и обложка: gs://uspeshnyy-projects/smit/billing/lk_v1206/.
Production: /lk/.