Игрок vs DM — два режима

Приложение обслуживает двух принципиально разных пользователей поверх одних данных. Объясняет, почему UX расходится настолько и как это держится без дублирования.

Один набор данных — две линзы. Игрок читает; DM управляет. Принцип «данные-первичны, UI — линза» позволяет не копировать хранение, но строить радикально разные интерфейсы поверх него.


Игрок: читалка

Игроку нужна книга-помощник. Читалка, не дашборд.

  • Мой персонаж — лист со статами, инвентарём, спеллами. Живой, обновляется после каждой сессии.
  • Моя история — что происходило с персонажем петля за петлёй.
  • Лента бухгалтерии — сколько у меня денег, что вошло/вышло.
  • Mobile-first. Скролл, текст, минимум кнопок. Информация потребляется, не конфигурируется.

Игрок не должен понимать архитектуру приложения. Открыл телефон — увидел своего персонажа.

В проде сейчас: Telegram Mini App (app/tg/) — работающий мобильный клиент для игрока. Кошелёк, лента бухгалтерии, общак, заявки на одобрение, карточка PC с портретом — всё в одном. Realtime broadcast обновляет карточку без перезагрузки. Спеки 044 и 046 — уже в проде.

roadmap/player-mobile.md

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 «Читалка, не дашборд» — принцип, из которого вытекает разделение режимов.