| 2026-10-09 |

Проекты: цвет, сайт, фавикон, закрепление, 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
|
Сырые кастомные блоки — под визуальный язык кита 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
|
| 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
|
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
|
Карточка тегов на странице проекта: максимум 400px, внутри скролл
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Подсказка про README — у заметки проекта, не у задачи
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Карточка тегов на странице задачи: максимум 400px, внутри скролл
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Подсказка: описание можно заполнить ссылкой на публичный репозиторий
...
В подписи редактора при создании задачи и на странице задачи
(пустое описание, инлайн-правка) — «вставьте ссылку на публичный
репозиторий — вместо описания подтянется README». Локали ×3, ТЗ 0.41.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Линки маркдауна — в новой вкладке (PWA не ловит навигацию)
...
renderMarkdown добавляет <a target="_blank" rel="noopener">: описание
задачи, заметка проекта, README и превью MdEditor — все ссылки
открываются во внешность, standalone-PWA окно не уводят.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Длинная заметка проекта сворачивается: начало + «Развернуть»
...
Высота блока заметки (или README от ссылки) мерится по факту рендера
(ResizeObserver — картинки догружаются и растут): выше ~420px —
сворачивается, под ней подсказка «Заметка большая — показано начало»
и кнопка «Развернуть»/«Свернуть». Локали ×3, ТЗ 3.8/0.41.
Проверено headless: длинный README свёрнут (420px, подсказка на
месте), «Развернуть» раскрывает до полных ~4700px.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
README вместо заметки-ссылки на проекте — как в описании задачи
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
README.md вместо описания-ссылки на репозиторий
...
Если описание задачи — одна ссылка на git-репозиторий, на странице
задачи вместо неё показывается README.md оттуда (с подписью-ссылкой
на источник; сырое описание в БД не меняется, чекбоксы README не
патчат описание).
Хост не обязан быть GitHub/GitLab (ТЗ 3.3, 0.41): селф-хостед системы
ищутся эвристикой — API github/gitlab/gitea + raw-пути web-интерфейсов
с дефолтной веткой HEAD (проверено на селф-хостед GitBucket);
не нашли — 404, остаётся ссылка. Кэш прочтений в памяти, 10 минут.
- backend: services/readme.py (эвристика + перебор, кэш),
GET /api/repo-readme?url=, тесты (кандидаты, кэш) — 159 тестов
- frontend: api.getRepoReadme, TaskView показывает README вместо
описания при одиночной ссылке; локали task.readmeFrom ×3
Проверено headless на живом фронте: git.gnexus.space (GitBucket) и
github.com — README рендерится, при неудаче остаётся ссылка.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Лоадеры и скелетоны: спиннер обновления в шапках, скелетоны под макет страниц
...
- Спиннер обновления (GnLoader circle, .refresh-loader fixed под топбаром) в
#actions шапок списков: задачи, стек, проекты, архив, проект, задача, опции
- Скелетоны заменены с рамочного .skeleton-stack на макет-мимикрирующие
карточки кита: списки — сетка карточек с бейджами, задача — сетка main/сайд,
статы — метрики, сад — блок + строки
- kit-overrides.css: только теговые бейджи/чипы без uppercase, позиция спиннера
- Локаль common.loading (ru/en/uk)
Проверено headless на живом фронте: скелетоны на первом входе (list 4 карточки,
task 5 карточек/12 линий, stats 3 метрики, garden блок+2 линии, projects 3,
archive 2, stack 3+6 бейджей), спиннер появляется при обновлении данных.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Теги: подсказки существующих по набору в полях тегов
...
GnTagInput кита (v0.4.0) без автодополнения — тонкая обёртка TagField:
строка чипов-подсказок под полем, фильтр по набираемому тексту (он читается
из всплывающего input-события внутреннего поля кита). Клик по подсказке
добавляет тег и очищает ввод синтетическим input-событием.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Теги — без аперкейса кита (бейджи тегов и чипы ввода тегов)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Статус-блок: «Завершено» у задачи в работе, «Не хочется делать» — только до начала
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|