Игрок vs DM — два режима
Приложение обслуживает двух принципиально разных пользователей поверх одних данных. Объясняет, почему UX расходится настолько и как это держится без дублирования.
Один набор данных — две линзы. Игрок читает; DM управляет. Принцип «данные-первичны, UI — линза» позволяет не копировать хранение, но строить радикально разные интерфейсы поверх него.
Игрок: читалка
Игроку нужна книга-помощник. Читалка, не дашборд.
- Мой персонаж — лист со статами, инвентарём, спеллами. Живой, обновляется после каждой сессии.
- Моя история — что происходило с персонажем петля за петлёй.
- Лента бухгалтерии — сколько у меня денег, что вошло/вышло.
- Mobile-first. Скролл, текст, минимум кнопок. Информация потребляется, не конфигурируется.
Игрок не должен понимать архитектуру приложения. Открыл телефон — увидел своего персонажа.
В проде сейчас: Telegram Mini App (app/tg/) — работающий мобильный
клиент для игрока. Кошелёк, лента бухгалтерии, общак, заявки на одобрение,
карточка PC с портретом — всё в одном. Realtime broadcast обновляет
карточку без перезагрузки. Спеки 044 и 046 — уже в проде.
DM: рабочий стол
DM нужен операционный центр. Граф, каталог, трекер, подготовка.
- Все сущности кампании — NPC, локации, предметы, монстры, петли, сессии в едином графе с поиском, фильтрацией, связями.
- Трекер энкаунтера — инициатива, HP, условия, эффекты, участники
в
/c/[slug]/encounters. - Подготовка сессии — кто где, что запланировано, стартовый набор
(
/c/[slug]/accounting). - Каталог предметов — 800+ позиций dnd.su, фильтрация по редкости /
категории, выдача из каталога (
/c/[slug]/catalog). - Desktop-primary. Рабочий стол с таблицами, сайдбаром, плотным UI — не для маленького экрана.
Как это держится в коде
Приоритеты фазы, прибитые в AGENTS.md:
data → desktop UX → mobile
Пока приложение используется одним DM на десктоп-браузере, любая работа идёт в этом порядке. Мобильная адаптация DM-интерфейса — сознательно отложена до стабилизации desktop.
Маршруты явно разделены:
app/c/[slug]/— DM-интерфейс, desktop-primary. Сайдбар, таблицы, формы. Server components + server actions.app/tg/— мобильный клиент игрока, Telegram Mini App shell.
Данные — общие. PC-нода с node_type='character' читается и там, и там;
транзакции те же. Разные запросы, разные компоненты, один Supabase.
Проблема «достаточно удобно на телефоне»
Граница между режимами не абсолютна. DM может потребоваться быстро
посмотреть что-то с телефона на сессии. Игрок на компьютере может зайти
через web, а не Telegram. Правило из AGENTS.md:
Единственное исключение для мобильной правки в DM-интерфейсе — «элемент буквально нельзя нажать на телефоне». Тогда фиксируй на месте, минимально.
Полноценный responsive pass DM-интерфейса — отдельная спека, не ad-hoc.
→
roles-and-clients.md— ролиowner/dm/playerи как они ограничивают доступ. →pillars.md§ VI «Читалка, не дашборд» — принцип, из которого вытекает разделение режимов.