Решили: локальные стенды сведены в один сайт-приложение docs/lab — TypeScript, hash-роутер,
ноль фреймворков; раздел объявляется данными и подгружается по маршруту через import(). ГДД сайт
не копирует: получает генерируемый указатель, текст остаётся в vault.
Почему: стенд джуса держал 79 canvas, и все тикали каждый кадр при двух видимых — роутер
оставляет в отрисовке открытый раздел, IntersectionObserver внутри него только видимое. Разбивка
на html-страницы, начатая до этого, чинила ту же беду грубее и ломала 22 ссылки из append-only
журнала, ведущие на gamefeel-demos/.
Отвергли Next + React + Tailwind — стек личных сайтов Макса. Там он заслужен (SEO, i18n, PDF
через Playwright), здесь девяносто процентов содержимого — canvas, рисуемый императивно: React
вокруг него обёртка ради обёртки, а роутер занимает сорок строк. Взяли из того стека ровно то,
что окупается: content/-паттерн (данные отдельно от представления) и TypeScript.
Отвергли голый JS без сборки, которым сайт был начат. Обоснованием служило «открывается с диска двойным кликом», но Макс выбрал запуск локальным сервером — и запрет на ES-модули, главная причина писать на голом JS, отпал вместе с этим.
Грабли:
visibleу сцены инициализируетсяtrue, а неfalse. Наблюдатель гасит ушедшее за экран, но никогда не отвечает за первый показ: в окне нулевого размера он честно говорит «не видно всем», и при обратной логике сайт выглядит мёртвым. Отказ обязан деградировать в «нарисовали лишнее».- Ссылки в append-only журнале переписать нельзя — поэтому у роутера есть таблица плоских
якорей старого вида (
#shield→ разделbarrier), аdocs/gamefeel-demos/остаётся живым путём. - Панель предпросмотра с нулевым размером не крутит
requestAnimationFrameи не даёт скриншот: рисовалки проверяются прямым вызовомdraw(ctx, w, h)на временном canvas, движение — за Максом.
Сказано: «А мы не можем разве юзать паттерн как я кидал из своих сайтов? Сайт работает как приложение, один раз собравшись. Все на одной страницей с роутером или чет такое.» и «Поэтому сайт становится официальным пунктом, где я могу все нужное посмотреть и тп. ГДД, всякие вещи что требуют анимок (VFX) и все такое.», позже — «Ты тайп скрипт юзаешь? Ты вообще глянула стек моих сайтов? А то там куча полезного, точно не стоит сразу подцепить и сделать “как надо”?» (2026-08-01, сессия 9d634076).
Владелец правды: docs/lab/src/types.ts (модель раздела), docs/lab/src/stage.ts (что
рисуется), docs/lab/src/main.ts (маршрут и таблица старых якорей), scripts/lab_server.py
(указатель по вики строится на лету, а не лежит копией).