Дизайн-пилларз
Выжимка
constitution.md: миссия, три слоя пользователей, ключевые принципы продукта. Здесь — «почему мы делаем именно так». Конкретные технические реализации — в других статьях раздела.
Mother of Learning — бесплатный open-source фреймворк для кооперативных настольных RPG с фокусом на progression fantasy. Помогает группе друзей рассказывать историю, где персонажи растут через циклы. Строится на D&D 5e / 5.5e; адаптируем под любую систему. По духу — движок для RPG-рогалика: петля прогрессии как ядро, а не тактические карты.
Три слоя пользователей
Аудитория разворачивается от частного к общему:
- Наши друзья — удобно прямо сейчас, на ближайшей сессии. Первый приоритет при любом решении.
- Любая D&D-группа — фреймворк без трения для progression fantasy с петлями, сложным лором, множеством NPC.
- RPG-движок — фундамент для будущих систем и контент-паков.
Правило принятия решений: сверху вниз. Если фича нужна друзьям, но не масштабируется — делаем. Если масштабируется, но друзьям не нужна прямо сейчас — в бэклог.
Принципы продукта
I. Петля прогрессии — ядро
Петля — не фича, а центральная метафора. Персонаж существует во времени: Петля → День → Момент. Каждый цикл — рост, новые знания, новые способности. Система ДОЛЖНА различать персистентное (уровни, память, абилки) и вайпаемое (состояние мира) на уровне модели данных. «Что изменилось между петлёй 2 и петлёй 3» — один экран, а не ручная сверка.
→ loop-as-core.md, persistence-scope.md
II. Атомарность данных
Каждая сущность — нода с типом, полями и уникальным ID. Связи между нодами — рёбра с типом. Нода самодостаточна: можно открыть и понять без контекста. Поля типизированы, но расширяемы через JSONB. Одна нода участвует в разных контекстах через рёбра, не через дублирование.
III. Перекрёстные ссылки и плоская навигация
Данные плоские. Структура — через фильтры и группировку в момент просмотра,
а не через жёсткую иерархию в данных. «Академия → 3 курс → Группа 1» —
три ноды с рёбрами contains, а не дерево. Группировка — конфигурация
представления, не свойство данных. Один компонент (плоский список +
конфигурируемая группировка) используется везде: каталог, сайдбар, ростер.
IV. Данные-первичны, UI — линза
Вся функциональность сначала работает как запрос к данным. UI — опциональный слой визуализации. Два режима (игрок / DM) — это два представления поверх одних данных, не два разных продукта.
V. Event sourcing — история как данные
Каждое изменение в системе — событие. Текущее состояние = результат всех
событий до «сейчас». Снапшоты — кэш для производительности, не источник
правды. В проде event sourcing применён к транзакциям (transactions —
append-only, баланс через SUM()). Цель — расширить до универсального events
лога всех изменений мира.
VI. Читалка, не дашборд
Приложение — книга-помощник, не панель управления. Для игрока: mobile-first, скролл вместо кликов, текстоцентричный дизайн. Даже DM на сессии больше листает и ищет, чем редактирует. Минимум элементов управления — каждая кнопка оправдана.
VII–X. Ещё четыре принципа процесса
VII. Каждый релиз играбелен. Каждый шаг — что-то, чем уже можно пользоваться на сессии. Scope creep — главный враг; фича дольше двух недель = разбить.
VIII. Простота стека. Next.js + Supabase + Tailwind. Новый инструмент только если текущие доказано не справляются.
IX. Универсальность и open source. Ничего специфичного для конкретной кампании не захардкожено в ядре. Новый DM поднимает пустую кампанию без чтения исходников.
X. Конституция кампании = правила мира. У каждой кампании есть человекочитаемый документ с правилами мира, тоном, homebrew-механиками. Конституция + граф сущностей + текущий момент = полный контекст для AI-помощника DM'а.
Полная версия конституции —
.specify/memory/constitution.md. Архитектурное видение —north-star.md.