0018 — Главный экран и единый каркас приложения¶
- Дата: 2026-08-23.
- Статус: Принято пользователем; конкретная визуальная геометрия AppShell уточнена решением 0029.
- Ответственный: владелец проекта.
Контекст¶
Frontend-прототип сформировался вокруг экрана «Сегодня», а личный и административный кабинеты получили собственные оболочки и навигацию. Это помогло проверить отдельные сценарии, но смешало три разных понятия: главный экран после входа, продуктовый модуль и общий каркас защищённой части приложения.
Пользователь подтвердил необходимость разделить эти понятия, закрепить постоянные визуальные области рабочего экрана и предусмотреть связанные страницы профиля и организации в одном внутреннем интерфейсе.
Решение¶
1. Главный экран — возможность платформы¶
- Главный экран живёт в
platform/homeи открывается по маршруту/home. - Он не является продуктовым модулем, не лицензируется отдельно и не подменяет экран «Сегодня».
- После стандартного успешного входа пользователь попадает на
/home. - Корень
/является умной точкой входа и выбирает маршрут по состоянию доступа: - нет сессии —
/login; - email не подтверждён —
/check-email; - email подтверждён, но организация ещё не создана —
/onboarding/organization; - учётная запись готова к работе —
/home. - Если вход начался с допустимой защищённой deep-link через параметр
next, после проверки сессии и прав разрешён возврат на этот маршрут.
Содержимое главного экрана определяется эффективными capabilities и текущим контекстом, а не только названием роли:
| Контекст пользователя | Основные данные главного экрана |
|---|---|
owner |
состояние организации, краткая сводка «Сегодня», команда, подключённые модули и быстрые действия |
admin |
доступные операции организации и команды в границах выданных прав |
member |
личные задачи, доступные действия и подключённые ему модули |
viewer |
доступная только для чтения сводка |
platform_admin |
состояние платформы, организации, пользователи, инциденты и административные задачи |
super_admin |
возможности platform_admin и отдельно защищённые операции super_admin |
Если у учётной записи одновременно есть платформенная роль и membership организации, AppShell предоставляет явный переключатель контекста «Платформа / Организация». Платформенный экран не показывает tenant-данные без выбранного и проверенного контекста организации.
Первая реализация может быть уже целевой: текущая организация и роль, подключённые модули, компактная сводка «Сегодня», шаги настройки владельца и отдельный административный блок по capabilities. Расширенные метрики добавляются только после появления достоверных backend-данных.
home.view является базовой capability активной подтверждённой учётной записи с готовым рабочим контекстом. Она не даёт доступ к содержимому модулей или данным организации: каждый виджет и переход дополнительно проверяет собственные permissions.
2. Единый каркас защищённой части¶
Общий каркас размещается в platform/shell; apps/web остаётся точкой композиции и маршрутизации, а packages/ui хранит только переиспользуемые UI-примитивы.
Все защищённые внутренние страницы используют один AppShell. Для ссылок на визуальные области закреплены идентификаторы:
| Зона | Назначение |
|---|---|
S1 |
основная навигация по доступным разделам и модулям |
S2 |
текущая организация, пользовательский или платформенный контекст и его переключение |
S3 |
сервисная навигация: помощь, документация, аккаунт и выход |
P1 |
заголовок, описание и breadcrumbs страницы |
P2 |
основные и вторичные действия страницы |
P3 |
сводка, статусы и ключевые показатели |
P4 |
поиск, фильтры, сортировка и переключатели представления |
P5 |
основная рабочая область страницы |
P6 |
счётчики, порядок, пагинация и служебные метаданные |
O1 |
контекстная боковая панель |
O2 |
модальное окно для отдельного действия |
O3 |
уведомления, подтверждения и ошибки |
На desktop S1–S3 располагаются в постоянной боковой панели шириной 252 px, а P1–P6 — в рабочей области. На mobile используются компактная верхняя панель, нижняя навигация, последовательное вертикальное размещение P1–P6; зона O1 открывается на весь экран. При реализации зоны получают устойчивые data-ui-zone атрибуты для обсуждения, тестов и документации.
Auth-страницы используют отдельный AuthShell. Публичный лендинг и документация являются отдельными приложениями и не обязаны повторять внутренний AppShell.
3. «Сегодня» остаётся продуктовым модулем¶
todayостаётся вmodules/todayи открывается по/today.- Модуль владеет своей бизнес-логикой, данными, permissions и содержимым зон
P1–P6, но не глобальной навигацией, профилем или оболочкой приложения. /homeможет показывать компактный виджет «Сегодня» и переход в модуль, но не копирует весь рабочий экран модуля.- Текущий
TodayPage, который содержит собственную глобальную навигацию, при реализации этого решения разделяется на модульное содержимое и общийAppShell.
Решение 0003 продолжает определять визуальный эталон «Сегодня», но больше не трактуется как определение общего главного экрана. Термин dashboard в решении 0012 означает интерфейс продуктового модуля, а не стартовую страницу всей системы.
4. Личный кабинет¶
Каждый подтверждённый активный пользователь получает страницы собственного аккаунта:
/settings -> redirect /settings/profile
/settings/profile
/settings/security
/settings/notifications -> отложено до появления уведомлений
- Профиль: имя, аватар, email и его статус, язык и часовой пояс.
- Безопасность: смена пароля, активные сессии и отзыв сессий.
- На первом шаге допустим более узкий фактический состав — email и пароль — с явным обозначением ещё не реализованных полей.
- Подключённые продуктовые модули и права сотрудников не относятся к личному профилю и переносятся в настройки организации.
Доступ к собственному аккаунту следует из активной подтверждённой учётной записи. Целевые permissions для мутаций: account.profile.update и account.security.manage.
5. Настройки организации¶
Настройки организации являются общей platform capability и доступны только в выбранном организационном контексте:
/organization/settings -> redirect /organization/settings/general
/organization/settings/general
/organization/settings/members
/organization/settings/modules
/organization/settings/permissions
/organization/settings/billing -> отложено до решения по billing
Разделы включают общие данные организации, участников, подключённые модули, распределение прав и позднее тариф. Аудит действий добавляется после реализации общей audit capability.
Базовый доступ проверяется через organization.settings.view и organization.settings.manage. Для чувствительных операций используются более узкие capabilities: organization.members.manage, organization.modules.view, organization.modules.manage, organization.permissions.manage. owner первоначально получает полный организационный доступ; точная матрица для admin, member и viewer остаётся отдельным решением.
6. Маршрутизация и перелинковка¶
Целевая карта внутреннего приложения:
/
/home
/onboarding/organization
/today
/settings/profile
/settings/security
/organization/settings/general
/organization/settings/members
/organization/settings/modules
/organization/settings/permissions
/admin
/admin/users
/admin/administrators
/admin/organizations
Переходы выполняются внутренним router без полной перезагрузки приложения. Навигация формируется из эффективных прав и всегда сохраняет единый визуальный каркас. Недоступный маршрут не скрывается только визуально: backend остаётся источником истины и возвращает отказ доступа.
«Карта проекта» из решения 0011 остаётся административным разделом /admin, но не является универсальным главным экраном super_admin после авторизации.
Не входит в решение¶
Этим ADR не утверждаются:
- новая схема доменов и репозиториев;
- состав ветки
STAGE, pipeline deploy и тестовая матрица STAGE; - роли и последовательность AI-агентов разработки;
- точная матрица организационных ролей за пределами зафиксированных capabilities;
- реализация кода, backend-схемы и реальные данные.
Эти вопросы рассматриваются отдельными блоками и требуют самостоятельного подтверждения.
Последствия¶
- Целевая структура дополняется
platform/shell,platform/home, а существующиеplatform/accountиplatform/organizationsразвиваются и подключаются через общий каркас. - Существующие
TodayPage,AdminShellи компактная оболочка/settingsтребуют последующей миграции; данный документ сам по себе не означает, что миграция выполнена. - Новые внутренние страницы не создают собственную глобальную навигацию.
- Появляется единый словарь визуальных зон для постановки UI-задач и acceptance-тестов.
- Главный экран может развиваться по ролям без превращения каждого варианта в отдельный продуктовый модуль.
Откат или замена¶
Изменение статуса /home как общей platform capability, возврат today в роль главного экрана или отказ от общего AppShell требует нового ADR и плана миграции.
Последующее визуальное решение¶
Решение 0029 заменило только конкретные visual values: desktop rail 252 px на
188 px, обязательную mobile bottom navigation на modal drawer и прежние tokens на
light/dark Control Surface. Зоны S1–S3, P1–P6, O1–O3, platform /home,
module /today, маршруты и permission boundaries этого решения сохраняются.