Добавить ложное определение email verified column
Мигратор схемы Гибернате генерирует ПОЛЬЗОВАННУЮ ЗАПИСЬ без по умолчанию, на столах с существующими рядами. Обозначение заставляет его Включите ложную информаци...
Правильная очистка и сброс проверенного состояния слушателя Capcha на шаге выхода
Resolve duplicate emailTemplateServiceClient bean conflict
**************** and **************** were identical @Components with the same default bean name, causing **************** at startup. Delete the duplicate in r...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
Применять исправления правильности и качества реализации SP6
C1: использовать NEXT PUBLIC H*** SITE KEY Env var вместо жесткого заполнителя C2: изменить RegisterResponse.userId и все параметры API с номера на строку (Cock...
Address 4 code-review findings in registration and login paths
- Hide raw exception message in /register 500 path; log instead - Fail-closed (503) on email-verified DB check failure in login - verifyEmailToken throws if use...
Append Z to dateCommitted so JS parses it as UTC
LocalDateTime.toString() produces no timezone designator, causing JavaScript's new Date() to treat the UTC value as local time and display timestamps 7-8 hours ...
Convert PT midnight cutoff to UTC for today-count query
Commits are stored in UTC but the cutoff was a naive LocalDateTime in PT, causing yesterday-evening PT commits (00:00–06:59 UTC) to be counted as today.
Переименовать почтовый ящикId→id и providerStatus→status в ответе списка почтовых ящиков
Выравнивайте имена полей с внешними ожиданиями для списков почтовых ящиков участников.
Замените все экземпляры логотипа CSS-фильтра белым SVG
Навигация, SubNavigation, Footer, SubFooter и Preloader все используемые тот же разбитый фильтр яркости-0 инвертного рисунка. Заменить на Логотип полностью белы...
Используйте белый логотип SVG в нижнем колонтитуле вместо фильтра CSS
То же исправление, что и нав — CSS-фильтр на img внутри фонового фильтра ненадежен на iOS Safari.
Охрана цветовой схемы с !важным против темы CSS override
DynamicMetaLoader может вводить удаленный CSS, который выигрывает каскад. Добавить Важность обеспечивает цветовую схему: темнота никогда не может быть преодолен...
Исключите нижние колонтитулы и навигационные ссылки из TouchOptimized Min-Height
TouchOptimized установила minHeight:44px на всех элементах <a> короче 44px, включая нижние навигационные линии (~20px). Это происходило во время гидратации на ж...
Используйте белый логотип SVG вместо CSS-фильтра
Фильтр CSS на Img внутри фонового фильтра ненадежен на iOS Safari. Создайте логотип-full-white.svg со всеми заполнениями #ffffff и загрузите его напрямую — ни ф...
Вариант темного режима Lock Tailwind на основе класса, никогда не медиа-запрос ОС
Tailwind v4 по умолчанию темный: утилиты реагируют на цветовую схему предпочтений (предпочтение ОС). @variant override гарантирует темноту: классы активируются ...
Используйте стиль встроенного фильтра на ссылке логотипа для надежного белого рендеринга
Классы фильтров Tailwind на элементах img несовместимы в мобильных браузерах. Встроенный стиль на якорном элементе гарантирует яркость (0) инверт (1) применяетс...
Силовая темная цветовая схема, поэтому браузер никогда не применяет рендеринг в светлом режиме
Переход от «светлого только» к «темному» в globals.css, генерации Viewport html-стиль элементов — это останавливает браузер от рендеринга SVG и нативного пользо...
Предотвращение рендеринга логотипа за строкой nav на мобильных устройствах
Обертка div с фильтром CSS создала новый контекст стека, который противоречил с фоновым фильтром заголовка в мобильных браузерах, заставляя логотип рисовать На ...
Решите прокрутку и мобильную вырезку на JumpToBar и PreviewBanner
Добавить overflowY: скрытый во внутренний контейнер JumpToBar для предотвращения вертикальной прокрутки Разрешить контент PreviewBanner обернуть на мобильный те...
Заменить пространство-y-4 встроенным гибким зазором в списках ссылок нижнего колонтитула
Tailwind space-y-4 использует :where() (специфичность 0) Нагрузка на жесткое обновление вызывает несогласованное вертикальное расстояние. ряд Стили встроены в S...
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
Добавить отсутствующий запрос Интеграция i18n ключа по всем локализациям
Кнопка «Отправить запрос» в разделе «Необходима пользовательская интеграция?» КТА на /интеграции возвращался к исходному ключу **************** Потому что ключ ...
Use pg Pool options instead of connection string for geo DB
CockroachDB rejects insecure connections and node-pg can't verify self-signed certs via connection string alone. Parse the URL into Pool options and pass ssl:{r...
Цель обратной ссылки на www.kamocrm.com (канонический хост)
Компонент PoweredByKamo отправлен с указанием на вершину https://kamocrm.com/ Но каноническим хостом камо-маркетинга является https://www.kamocrm.com/. Обновлен...
*** session check, loading spinner, rebrand analytics to Kamo Analytics
Use redis get instead of exists for more reliable *** validation on logout. Replace "Authenticating..." text with an animated spinner on the OTK auth page. Rena...
Copy GeoLite2 database to production image for country detection
The /geo/ directory containing GeoLite2-City.mmdb was built during the builder stage but never copied to the runner stage, so all country/region lookups returne...
Move CSP to proxy.ts instead of middleware.ts to avoid build conflict
Next.js 16 doesn't allow both middleware.ts and proxy.ts. The Docker build copies proxy.ts as the middleware, so add CSP frame-ancestors header there instead. T...
Clean up legacy analytics deployment on each CI run
Delete old analytics deployment, service, and ingressroute that conflict with the kamo-analytics deployment managed by its own CI/CD pipeline.
Use Next.js middleware for CSP so frame-ancestors works at runtime
The standalone build bakes next.config.ts headers at build time, so ALLOWED_FRAME_URLS was always empty. Move CSP to a Next.js middleware that reads the env var...
Strip X-Frame-Options header in iframe-compatible middleware
Set X-Frame-Options to empty string to remove the SAMEORIGIN value that was being inherited, allowing CSP frame-ancestors to control iframe embedding instead.
Read ALLOWED_FRAME_URLS at runtime so CSP frame-ancestors works in standalone mode
The env var was being read at module scope during build, baking an empty value into the standalone server. Move CSP and all header construction into functions c...
Иконка Analytics является только иконкой и позиционируется последней в наборе значков
Reset document.title in rebrand() when React overwrites it
React re-applies RSC payload after hydration, resetting the title to "analytics". Add a title check inside the MutationObserver callback so it gets corrected ev...
Replace "analytics" text nodes with "Kamo Analytics" instead of clearing
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.