| 2026-10-09 |
Булавка на карточке проекта — по центру бейджа актуальности (0.67)
...
Кнопка стояла на top 0.75rem (центр 26px), а бейдж — по центру шапки кита
(центр 29.8px): расхождение 3.8px, а на перенёсшемся на вторую строку имени
оно доходило до 16.6px — шапка растёт, бейдж едет за её центром, абсолютная
кнопка нет.
Общая точка отсчёта — центр первой строки имени (29.8px от верха .card-wrap,
от переноса не зависит): булавка top 1rem (центр 28px-кнопки 30px), бейдж
align-self flex-start + 1px (центр 24px-бейджа 30px). В шапку булавку не
положить — кнопка внутри RouterLink невалидна, поэтому под кнопку
подстраивается бейдж.
Замеры 1440/1024/768/480/390/360 — центры совпадают до пикселя в обоих
случаях, горизонтального скролла нет.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|

Проекты: цвет, сайт, фавикон, закрепление, README из репозитория (0.63–0.67)
...
- Цвет-метка проекта (0.63): у проекта может быть цвет-кружок. Селектор
цвета — сырым блоком в стиле кита (в ките компонента нет); кружок рисует
общий компонент ProjectColorDot.
- Сайт проекта (0.63): отдельное поле site_url. Иконку сайта тянет
бэкенд-прокси с кэшем (GET /api/projects/{id}/favicon, том favicons) —
сторонние favicon-сервисы не используются, данные не покидают VPS. В 0.65
иконка встала в метку проекта (кружок + фавикон), а ссылка на сайт —
чипом в шапке страницы проекта.
- Карточка списка кликабельна целиком (0.63; кнопка «Открыть» дублировала
ссылку), тайтл крупнее (0.65), клетки прогресса — поверх полосы кита
(0.64): сегментированной полосы в ките нет.
- Закрепление проектов (0.66): поле pinned, закреплённые — секцией сверху,
сортировка списка по свежести активности, подвал карточки — отсчёт до
ближайшего дедлайна.
- Место булавки переставлено (0.67): на карточке — правый верхний угол
рядом с бейджем актуальности и видна всегда (была приглушена в подвале),
на странице проекта — кнопка-булавка рядом с именем (искали строкой
«Закреплён» в параметрах).
- Репозиторий проекта (0.67): ссылка на git-репозиторий — отдельное поле
repository_url, отдельно от заметки и сайта. README из репозитория
показывается вторым описанием — карточкой «README из репозитория» под
заметкой, со ссылкой на репозиторий и сворачиванием длинного текста;
тянет такой же бэкенд-прокси с кэшем (GET /api/projects/{id}/readme),
не нашли — «README не найден». Распознавание ссылки на репозиторий в
заметке проекта снято (у задачи README-вместо-описания остаётся),
данные в БД не мигрировались.
- Фантомный отступ перед именем у проекта без цвета и фавикона (0.67):
ProjectMark рисовал пустой спан в ряду с gap.
- ТЗ 0.63–0.67; MCP зеркалит поля проекта (color, site_url,
repository_url, pinned). Тесты: 207.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Карточка проекта — метрики вместо заметки (0.62)
...
Заметка убрана с карточки списка (целиком живёт на странице проекта): она
делала карточки разной высоты и мешала сравнивать. Вместо неё — актуальность
в шапке справа, ряд метрик (приоритет, «N в работе», «просрочено N» — только
ненулевые), полоса прогресса «Закрыто N из M» и подвал с ближайшим дедлайном
(просроченный красным) и кнопкой «Открыть»; у проекта без задач — подсказка.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Проекты карточками по две в ряд (0.61)
...
Карточка проекта несёт бейджи и заметку — в две колонки список читается
компактнее; на узких экранах одна колонка (860px). Заголовок секции
занимает всю ширину строки, скелетон повторяет ту же сетку.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Проекты без задач — отдельной секцией в конце списка (0.60)
...
Бейдж «Задач закрыто 0/0» у пустого проекта ничем не отличался от
заполненных, и такой проект терялся среди остальных. Список делится на
секции «С задачами» и «Без задач» (ph-folder-dotted, приём подписи
секции из стека); счётчики в заголовках — по всему списку, а не по
странице.
Заголовки показываются только когда пустые проекты есть — без них
список выглядит как раньше. Порядок (с задачами сверху, пустые в конце)
применяется до пагинации, иначе секция разъезжается по страницам.
- ТЗ 0.60.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Карточки стека по три в ряд; заголовок без двойного отступа (0.59)
...
- Стек входящих — сетка по три карточки (0.59): две на узких экранах,
одна на телефоне; карточки выравниваются по верху, скелетон повторяет
ту же сетку, чтобы загрузка не дёргала раскладку.
- Заголовок-ссылка карточки носит собственный card-link: класс card-title
принадлежит шапке карточки кита (header.card-title, padding 15px), и на
вложенной ссылке он давал вторые 15px — заголовок уезжал вправо от
остального содержимого карточки.
- tools/rasterize_icons.sh теперь обновляет и копию лого в public/
расширения (попап показывает лого из своего корня) — одна команда на
правку логотипа, копию больше нельзя забыть. Иконки расширения, dist и
ZIP пересобраны: всё с текущим знаком.
- ТЗ 0.59.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|

Сад отключён (0.58): страница «Достижения» вместо сада
...
Сад не готов к использованию, а сервис разрастается — убрали его из
интерфейса и сосредоточились на основном функционале. Код сада,
модель GardenItem, coin_events и rarity у xp_events сохранены: сад
вернётся для доработки.
- Выдача растений прекращается сама: GardenItem создавался лениво в
ensure_garden(), которую звал только GET /api/garden, — UI его
больше не запрашивает.
- Прогресс и ачивки переехали на новую страницу /achievements (пункт
меню на месте «Сада»); /garden редиректит туда же.
- Блок ачивок вынесен в общий components/AchievementsPanel.vue —
им пользуются и «Достижения», и сад (для возврата).
- Баланс монет отдаёт GET /api/xp (coins) — единственная правка
бэкенда; паритет с /api/garden покрыт тестом.
- Тост закрытия — «+N XP • +N монет» с похвалой, без слов про
растение; золотое конфетти за xp >= 25 и «не хочется делать».
- Тексты прогресса — в общем неймспейсе progress.*, сад-специфичные
остались под garden.*.
- ТЗ 0.58: пункт «Сад отключён» с причиной, детальное описание сада
оставлено историческим блоком.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Лого и иконки — знак на 10% меньше в холсте (0.57)
...
scale(.9) вокруг центра знака (32, 32.5): строки занимают ~56% холста
(36×35, поля ~14) вместо 62.5% — у холста появился воздух, как у creds.
PNG перегенерированы tools/rasterize_icons.sh, ZIP перепакован, фронт
пересобран.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Лого и иконки — холст со скруглёнными краями (0.56)
...
Приём gnexus-creds: знак не «голым», а на холсте 64×64 со скруглёнными
краями (rx 10, заливка страницы). logo.svg и favicon icon.svg — один файл,
как у creds; PNG (PWA 192/512/maskable, расширение 16/32/48/128) теперь
растеризуются скриптом tools/rasterize_icons.sh из logo.svg, фон впечатан
(прозрачность iOS рисует чёрным). maskable — холст 80% кадра.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Экран входа — карточка кита (0.55)
...
Как на экране входа gnexus-creds: GnCard 460px по центру вместо голой
колонки, содержимое — своя колонка-обёртка (внутренности .card-content
кита не трогаем). Пока /auth/me не ответил, в карточке лого и лоадер —
кнопка не вспыхивает перед редиректом уже залогиненного.
Кнопка на узком экране (<=420px) уменьшена: «ВОЙТИ ЧЕРЕЗ GNEXUS»
переносилась на две строки.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Лого и иконки — знак «стек входящих» (0.54)
...
Бренд-чип кита заменён на знак «три строки задач»: синий маркер — в работе,
зелёный — закрытая, прочие строки приглушены. Без рамки и буквы, поэтому
работает и в шапке (навигационная оболочка, экран входа, попап расширения),
и как favicon/PWA-иконка.
- frontend/public/logo.svg, icons/icon.svg + PNG 192/512/maskable
- extension/public/logo.svg + icons 16/32/48/128, ZIP перепакован
- viewBox подрезан по глифу (11 11.5 42 42): в сетке 64 глиф занимает
12..52 × 13..52, иначе знак выглядел на треть мельче прежнего чипа
- .gitignore: *.local.html (страницы-превью вариантов)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
| 2026-09-30 |
Паста изображений в описании при создании задачи/заметки
...
Вложения привязаны к документу, а он создаётся лениво при сохранении —
в форме создания задачи паста молча ничего не делала. Теперь файлы
держатся локально, в поле blob-плейсхолдер с живым превью, после
создания они грузятся к документу и ссылки заменяются настоящими
(PATCH описания). MdEditor получает imageHref для URL заглушки.
В заметке проекта без документа он материализуется текущей заметкой.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Лого и иконки — бренд-чип кита 1.0.0 (0.52)
...
logo.svg/icon.svg и все PNG (PWA 192/512, maskable, иконки расширения)
перерисованы в язык кита: панель, 2px бордер, 6px левая кромка accent,
скругление — глиф «промпт + чек» прежний. Бренд-марка попапа — само лого
вместо phosphor-иконки в CSS-рамке.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Попап: черновик форм переживает закрытие (0.51)
...
Транзиентное окно (клик мимо, Win+Space) убивает несохранённый ввод —
текст, проект, вкладка и настройка адреса/токена пишутся в
chrome.storage.local и восстанавливаются при следующем открытии.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Попап расширения — под язык кита 1.0.0
...
Токены --gn-* вместо хардкода цветов; шапка: бренд-чип с кромкой
кита и 2px-подчёркивание, на экране подключения бренд-блок вместо
дублирующей шапки; строки «В работе» — мини-карточки (2px бордер,
радиус 3px, ховер синим); тест-оверрайд тоста убран — тосты кита
с 1.0.0 сплошные с цветной кромкой.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
ТЗ 0.50: визуальный стиль и кастомные компоненты (§3.19) — кит 1.0.0, единый язык рамок
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Сырые кастомные блоки — под визуальный язык кита 1.0.0
...
Дерево уровней, маркет, ачивки, график/heatmap статистики, инвентарь и
оверлеи сцены, полнотекстовые превью/миниатюры, tags-fieldset: бордеры
2px var(--gn-border-color-muted) вместо 1px, радиусы 6px (панели) и
3px (инсеты/контролы), поверхностные подложки поверх --gn-surface-panel.
Иконки в заголовках карточек — в цвете заголовка (было тёмные).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Кит gnexus-ui-kit: обновление 0.4.0 → 1.0.0
...
35 коммитов кита: лёгкие радиусы/плотность, переработанные тосты,
новые темы (Verdant/Ember/Mono) и --gn-* токены дизайна. Селекторы,
на которые завязаны наши kit-overrides и popup.css, не переименованы;
сборки фронта и расширения зелёные, визуальный прогон пройден.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
| 2026-09-23 |
Ачивки: описание условия по клику (GnPopover)
...
Карточка-ачивка в саду — триггер GnPopover кита: клик открывает панель
с кратким описанием условия (garden.achHint, ru/en/uk). Тултип по hover
не годится — не работает на тач-экранах; карточка стала button-триггером
и тянется на всю колонку грида. ТЗ 0.49 (§3.13).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Ребаланс сада: монеты ×2 за закрытие, микронаграды и бонус уровня ×2
...
- Монеты за закрытие: xp целиком вместо floor(xp/2)
- Микронаграды: создание задачи 1 → 2, проекта 2 → 4
- Бонус за уровень: 25·L → 50·L; ежедневная не менялась (50)
- Заголовки X-Created-* теперь из констант (были захардкожены и
разошлись бы с новыми значениями)
Цены (семена, апгрейды, декор, расширения) не тронуты. ТЗ 0.48 (§3.13).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
| 2026-09-22 |
iOS Safari: типовые проблемы iPhone-версии
...
- 16px на полях/селектах/поле тегов на touch (media hover:none, pointer:coarse) —
иначе iOS зумит страницу при фокусе и зум застревает
- 100dvh у drawer'ов/меню/модалок (100vh в iOS выше видимой области — низ
уезжал под панель браузера), фолбэк 100vh остаётся
- safe-area (viewport-fit=cover): тосты, drawer-body, топбар и refresh-лоадер
отступают от индикатора «домой» и статус-бара
- apple-mobile-web-app-* меты: standalone до iOS 16.4, black-translucent
статус-бар, тайтл
- тап-подсветка WebKit отключена; кнопка fullscreen сада скрыта там, где
requestFullscreen нет (iPhone Safari умеет только video)
ТЗ 0.47 (§3.15).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Детализация: выброшенные из заголовка детали не теряются
...
Промпт (ru/en) требует переносить убранное из заголовка (условия, числа,
уточнения) в описание, few-shot пример теперь учит переносу (description
не null). Страховка от нарушения правила маленькими моделями: если заголовок
сокращён, описания нет, а содержательные слова/числа исходника пропали —
исходный заголовок целиком кладётся в описание (при заполненном пользователем
описании не срабатывает). ТЗ 0.46 (§3.2).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
MCP: управление проектами — создание, обновление, архив/восстановление
...
Тулы create_project (микронаграда + фоновая суммаризация заметки),
update_project (имя/заметка/relevance_status/приоритет) и
archive_project/restore_project — архив вместо безвозвратного удаления:
задачи и история переживают архив, вызовы идемпотентны, delete-тула
в MCP нет намеренно. ТЗ 0.45 (§3.10).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Кнопка «Добавить» в попапе: icon-проп вместо слотового <i>
...
GnButton вешает with-icon (иконка в левой полосе) только на icon-проп;
слотовая иконка рендерилась вне раскладки кита. Заодно busy — через
:loading (спиннер кита).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Попап расширения на компонентах кита + список только «В работе»
...
GnInput/GnTextarea/GnSelect вместо сырых полей (тёмные стили кита живут
в .form-group), GnTabs вместо самодельных вкладок, GnBadge у проекта
и тегов, лоадер по центру; тосты кита перекрывали сплошной фон тинтом
rgba(…,.18) — в попапе фон приведён к #1f2335. Вкладка «В работе» —
только in_progress (ТЗ 0.44).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
ТЗ 0.43: страница-инструкция расширения (§3.18)
...
Меню только в веб-версии (скрыто в PWA), ZIP раздаётся статикой фронта.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Docker: ZIP расширения собирается в образе фронта
...
Контекст сборки web — корень репо (+.dockerignore): стадия extension
после фронта, zip dist раздаётся статикой nginx по /extension/…
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Страница-инструкция расширения: /extension в меню веб-версии
...
Скачивание ZIP (extension pack → статика фронта), шаги загрузки unpacked
и подключения MCP-токена; из установленного PWA пункт меню скрыт
(display-mode: standalone), по прямому адресу — пояснение.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
ТЗ 0.42: браузерное расширение быстрого захвата (§3.18)
...
Две вкладки («Добавить»/«Активные» — просмотр), аутентификация Bearer
MCP-токеном, настраиваемый базовый URL; кросс-ссылка в §3.10.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Расширение быстрого захвата: попап «Добавить/Активные» на Bearer MCP-токене
...
Chrome/Firefox MV3, vite-сборка с Vue + gnexus-ui-kit. Сессионная кука из
extension-контекста не уходит (SameSite=Lax) — REST /api/* ходит с Bearer
MCP-токеном; базовый URL настраиваемый, «Активные» — только просмотр.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|