Журнал изменений
Каждый выпуск, каждая функция, каждое исправление, в одном прокручиваемом журнале.
2026-04-26, Полное соответствие рендеринга ISO/AIM/GS1 для всех типов кодов
- Каждый QR-/2D-/1D-штрихкод проверен на соответствие профильному стандарту.
includetextу bwip-js's по умолчанию false для каждого bcid, поэтому EAN/UPC/ITF-14 уходили без полосы человекочитаемого текста, которую требуют ISO 15420 §5.1.2 + GS1 §5.4.4. Установленыincludetext: true+guardwhitespace: trueдля всего семейства EAN/UPC, плюсincludetext: trueдля ITF-14, Code 128, Code 39, Code 93, Codabar, VIN. - Тихие зоны EAN-13 теперь асимметричны по ISO 15420 Приложение A (
paddingleft: 44= 11 модулей,paddingright: 28= 7 модулей при scale=4). EAN-8 / UPC-A / UPC-E используют симметричные конверты, описанные их спецификациями. PDF417 + водительские права AAMVA получают тихие зоны 2 модуля по ISO 15438 §5.5; Data Matrix получает 1 модуль по ISO 16022; Aztec получает рекомендованный 1 модуль (ISO 24778 допускает ноль, но это ломает сканеры, читающие у самого края). - QR-параметр
QUIET_ZONE_MODULESподнят с 2 → 4, полная спецификация ISO/IEC 18004 §6.3.7. Сокращение до 2 модулей было отраслевым компромиссом, который проваливает распознавание префикса GS1 Digital Link на части промышленных лазерных сканеров. Micro QR + rMQR теперь поставляются с тихой зоной 2 модуля (qreanотдаёт голую сетку, поэтому добавляем её вручную вrenderMicroQRResult). - Уровни ECC зафиксированы: Aztec на 23 % (значение по умолчанию ISO 24778), PDF417 на уровне 5 (минимум GS1 для транспорта и логистики). Фиксация против будущего дрейфа bwip-js.
- Новая страница-эталон: /standards/barcode-rendering/. Справочник по символикам, охватывающий тихие зоны, HRI, ECC и контрольные цифры для всех 17 типов, со ссылками на первоисточники каждого упомянутого стандарта ISO/AIM/GS1.
2026-04-26, Усиление гейта деплоя staging-first
- Прод-деплои сайтов со staging теперь требуют, чтобы последний деплой в staging соответствовал ровно текущему коммиту (чистое рабочее дерево с обеих сторон). 24-часовое окно прежнего гейта позволяло несвязанным прод-деплоям ехать на устаревшей staging-истории. Отслеживание по SHA, fail-closed, обход остаётся прежним:
CF_DEPLOY_SKIP_STAGING_FIRST=1. - Префлайт-проверка в
cf-deploy.pyнаCLOUDFLARE_API_TOKEN, быстро завершается с подсказкойsource ~/.envrc, вместо того чтобы wrangler выдавал свою непонятную ошибку "non-interactive environment". - Проверка контента после каждого деплоя: запрашиваем боевой URL и убеждаемся, что его cache-buster совпадает с тем, что только что записан в
dist/. Ловит класс багов вида "неправильный CNAME" / "edge отдаёт устаревший кеш" / "не та ветка", которые 200-OK health-check молча пропустил бы.
2026-04-25, Переработка мобильного UX: фиксированная панель предпросмотра, нижний лист предпросмотра, фиксированная кнопка скачивания
- Фиксированная панель предпросмотра в верхней части страницы на телефонах (≤768 px). Всегда показывает живую миниатюру QR и однострочный статус, "Заполните форму ниже" в режиме ожидания, "Ваш QR готов · Нажмите, чтобы скачать" как только код отрисован. Пульсирует один раз, когда QR впервые становится действительным, чтобы пользователи это заметили. Решает давнюю проблему, когда мобильные посетители не понимали, что результат отрисован ниже сгиба.
- Нажатие на панель предпросмотра (или на новую фиксированную кнопку Скачать внизу) открывает предпросмотр как нижний лист, кнопки скачивания на всю ширину, расположенные вертикально, закрытие свайпом вниз или нажатием на фон, отступ безопасной области для индикатора главного экрана iOS.
- Обработка экранной клавиатуры: слушатель visualViewport ставит
body.kb-open, когда клавиатура поднимается; панель предпросмотра сжимается в тонкую таблетку, а поля с фокусом прокручиваются в центр, чтобы клавиатура никогда не закрывала то, что вводит пользователь. - Проход по тач-целям при ≤640 px: плитки выбора типа увеличены с 14×8 / 0.78rem до 16×10 / 0.82rem и минимальной высоты 56 px, вкладки панели и основные кнопки с минимумом 44 px, кнопки экспорта внутри листа выстроены на всю ширину с минимумом 48 px.
- В метатег viewport добавлен
interactive-widget=resizes-content, а два правила100vhпереведены на100dvhдля предсказуемой раскладки в мобильных браузерах с динамическими панелями. - Старая кнопка FAB прокрутки к предпросмотру удалена, панель предпросмотра и фиксированный CTA выполняют ту же задачу напрямую. Кэш service worker поднят до v132. Новые строки переведены на все 25 языков.
- Гигиена CSS: 203 одиночных объявления отступов в
style.cssпереведены на токены--space-Nчерез codemod. Чистый рефакторинг, визуально ничего не меняется. - Потолок инлайн-стилей 89 → 85: четыре атрибута
style="text-transform:uppercase"на полях AAMVA / Code 39 / Code 93 / VIN заменены существующим классом.input-uppercase.
2026-04-19, Сводка соответствия N16 (45 страниц), вторая партия N3, исправления регрессий, хвост N3, раскрытие AAMVA, сохранение состояния Expert, аудит a11y
- Полная сводка соответствия N16: все 34 платёжные целевые страницы теперь содержат блоки compliance-checklist + "когда не использовать это". Четвёртый проход (19 страниц) охватывает остальное: Alipay + WeChat Pay (PBoC + SAFE), Boleto (BACEN + FEBRABAN), Mercado Pago (матрица регуляторов семи стран), Payconiq (NBB + PSD2), EPC/Girocode (EPC069-12 + ZAG), Apple Wallet + Google Wallet (developer-program + FTC Endorsement + GDPR location), Kakao Pay + Naver Pay + LINE Pay (корейский FSC + японский FSA + тайваньский FSC + BOT), GCash + Maya (BSP EMI + AMLC + QR Ph + SEC PH), JPQR (METI + FSA Qualified-Invoice), FPS HK (HKICL + HKMA + SFC Alert List), DuitNow (PayNet + BNM + LHDN e-Invoice), M-PESA (Safaricom + CBK + eTIMS + CMA), MoMo (SBV + AMLID + GDT e-Invoice), PayID (NPP + RBA + APRA + AUSTRAC + ASIC). В сумме с тремя предыдущими проходами (AAMVA / страницы Review / Coupon / Review Funnel / App Store / PayPal / Crypto / UPI / SEPA + Venmo / Cash App / Swiss QR-bill / PIX / PromptPay / EMVCo / TWINT + Bizum / PayNow / iDEAL / BLIK / Interac / MB WAY / Swish / Vipps) это 45 целевых страниц с блокировками соответствия, каждая платёжная схема на сайте теперь имеет ссылки на местного регулятора, правила классификации продавцов, налоговые/инвойсинговые обязанности, рамки защиты потребителей и оговорку «без инвестиционного предложения», указывающую на правильный регулятор ценных бумаг. Первая подпартия (7): Venmo (AUP / злоупотребление F&F / 1099-K / отчётность Early Warning), Cash App (Cash for Business / регулируемые поверхности Bitcoin & Investing / Regulation E / флаг мошенничества CFPB), Swiss QR-bill (SIX v2.3 / правила QR-IBAN / MWSTG / 10-летнее хранение OR Art. 958f), PIX (BACEN Resolution 103/2021 / PJ против PF / окно возврата MED / мошенничество с наклейкой / инвестиционный флаг CVM), PromptPay (правила BOT / порог НДС 1,8 млн THB / отчётность AMLO / раскрытие трансграничного FX), EMVCo (ISO 18245 MCC / KYC эквайера / национальный FIU при несоответствии AID), TWINT (FINMA/AMLA / MROS / KIG защита потребителей). Вторая подпартия (8): Bizum (Bizum Negocios / SEPBLAC / factura / CNMV), PayNow (Закон MAS о платёжных услугах / отчётность STRO / SGQR / PDPA), iDEAL (лицензированный эквайер / DNB / 13-месячный спор PSD2 / благотворительные CBF / правоприменение ACM), BLIK (Polski Standard Płatności / KNF / отчётность GIIF / faktura VAT / RODO), Interac (Interac for Business / FINTRAC / PIPEDA / Quebec Bill 96 / мошенничество CAFC), MB WAY (SIBS / Banco de Portugal / UIF / CMVM / GDPR), Swish (Getswish AB / Finansinspektionen / Skatteverket kassaregister / Swish-bedrägerier), Vipps (Vipps MobilePay AS / Finanstilsynet / Økokrim / Bokføringsloven / advarselsliste). Присоединяется к ранее существующим блокам соответствия для AAMVA, Google / Yelp / TripAdvisor Review, Coupon, Review Funnel, App Store, PayPal, Crypto, UPI, SEPA. Общее покрытие сейчас: 26 целевых страниц.
- Ещё пять страниц-эталонов стандартов (вторая партия N3), водительские права AAMVA, активация eSIM (LPA), EMVCo merchant QR, Micro QR / rMQR, ZATCA e-invoice. Хаб теперь содержит 8 живых страниц-эталонов, охватывающих основные спецификации.
- Исправлены две регрессии: (1) главная страница автоматически прокручивалась вниз при загрузке, потому что инициализация
showCategory()вызывалаscrollIntoView({block:"nearest"})на чипе категории, заменено ручным горизонтальнымscrollLeft, чтобы прокрутка страницы никогда не затрагивалась. (2) Поиск типов по запросу "paym" не возвращал результатов, потому что фильтр проверял только подстроки label + data-type, DRY-исправление теперь повторно использует те же таблицы синонимов CAT_SEARCH + TYPE_SEARCH, что и палитра команд. - Хвост N3: новая страница-эталон /standards/non-qr-2d/ для Aztec (ISO/IEC 24778) + PDF417 (ISO/IEC 15438) + Data Matrix (ISO/IEC 16022). Сравнительная таблица бок о бок, матрица поддержки нативных сканеров (iOS Camera / Android / Google Lens / промышленные имиджеры / шлюзы аэропортов / читатели DMV / читатели DPM фармы), руководство «выбери правильный» (Aztec для посадочных талонов, PDF417 для длинных ASCII плоских бумаг, Data Matrix для DPM / фармы, QR для камер потребительских телефонов). Хаб стандартов теперь содержит все 9 страниц в живом виде, 0 черновиков.
- Прогрессивное раскрытие формы AAMVA (продолжение N19.3): форма из 25 полей разделена на Required (юрисдикция / лицензия / тип документа / семья / имя / DOB), Recommended свёрнуто-открытое (среднее имя + улица + город/штат/индекс + даты выдачи/истечения), Expert tuning свёрнуто (пол/глаза/рост + класс/ограничения/индоссаменты). Соответствует шаблону, использованному в TOTP, HOTP, Aztec, PDF417, Swiss QR, EMVCo, GS1, SEPA.
- Состояние Expert tuning сохраняется между визитами (продолжение N19.3): когда вы открываете секцию Expert на любой форме, состояние сохраняется в
localStorage.qrExpertSectionsOpenс ключом по типу. В следующий раз, когда вы выберете этот тип, Expert уже будет открыт. Делегированный слушательtoggleна.field-section[data-level="expert"], без проводки на каждую форму. - Внутренний аудит доступности (N8): ручной проход WCAG 2.2 AA по главной, /print-size/, новому хабу /standards/ + 9 страницам-эталонам, и 45 платёжным целевым страницам. Подтверждено прохождение по цели skip link, focus-visible, меткам форм, именам кнопок, ролям ARIA, контрасту AAA primary / AA+ muted. Исправлен пропуск уровня заголовка (три
<h4>подзаголовка внутри vCard/MECARD extra-fields повышены до<h3>для чистого outline). Полные находки опубликованы на /accessibility/. - Публичный ZIP корпуса (продолжение N2): /proof/corpus.zip, упакованные fixtures JSON + CSV + методология + README, ~4 КБ, пересобирается при каждом деплое. Парк сканеров теперь может скачать полный корпус одним файлом вместо клонирования репозитория. Связан с /proof/corpus/ заметной кнопкой Download.
- Журнал аттестации парка сканеров (продолжение N2): новый docs/SCANNER_ATTESTATION.md, датированный по строкам журнал ручных проверок устройств/ОС/приложений. Засеян 10 строками, охватывающими iPhone 15 Pro на iOS 18.3, Pixel 8 на Android 14, Zebra DS8100, Google Authenticator, 1Password. Растёт с каждым проверенным устройством.
- Реалистичность предпросмотра в генераторе (N19.6): компактный 4-чиповый переключатель под живым предпросмотром QR, Default / Phone / Mono / Low contrast. Применяет CSS-фильтры к предпросмотру (масштаб для Phone, оттенки серого для Mono, сниженный контраст для Low contrast), чтобы дизайнеры видели, как QR ведёт себя на разных подложках, не покидая генератор. Нулевое влияние на закодированную нагрузку, скачивания или копирование в буфер.
- Больше семантических валидаторов (расширение N19.4): проверка Base32 секрета HOTP + неотрицательного целого счётчика; eSIM SM-DP+ должен быть голым FQDN (без https://, частая причина срыва провижионинга); eSIM Matching ID отвергает символы
$(конфликт с разделителем поля LPA). - Прогрессивное раскрытие распространено на UPI и Crypto (расширение N19.3): сумма + примечание UPI сгруппированы как Recommended; сумма + метка crypto сгруппированы как Recommended. SIP, MMS, PromptPay и Lightning рассмотрены и оставлены плоскими, слишком мало полей для пользы от раскрытия.
- Сводный аудит качества по SEO, производительности, безопасности, целостности ссылок и качеству кода (проход i18n отложен). Записи
cache.putservice worker теперь выполняются внутриevent.waitUntil, чтобы они не могли быть отброшены посреди навигации; кэш поднят до v121. Диалог печати визитки переключён сdocument.writeна URLBlob. Обработчики кликов поделиться и скачать карточку обёрнуты в try/catch, чтобы отказы появлялись как тосты вместо тихих сбоев. Магические числа таймингов (auto-open хеша design-card, рендеринг кадра GIF, разрыв двойного PNG-скачивания, отзыв blob печати) извлечены в именованные константы. Исправлена скрытая ошибка CSS: селекторы.card-text-rowinput соответствовали только[type="text"], но HTML-минификатор удаляет атрибут по умолчаниюtype="text", добавленоinput:not([type]), чтобы поля BCD tagline + caption сохраняли стиль в продакшене. Удалены два беспричинных объявления!important; шумное предупреждение i18nconsole.warnзаглушено. CLAUDE.md обновлён, языковые страницы предварительно отрисованы вsite/{lang}/, не обслуживаются через перезаписи_redirects.
2026-04-18, Авторитет: хаб /standards/ + 3 страницы стандартов, /proof/corpus/, завершение Reviewer #6, N19.1 Advanced по принципу workflow-first
- Простой режим получает тонкий намёк «96 ещё типов в Advanced» под сеткой из 8 плиток. Клик по ссылке переключает режим, чтобы пользователи не прокручивали обратно. Simple остаётся на 8 плитках; Advanced остаётся путём обнаружения для длинного хвоста.
- Список булитов CTA Pro переписан, чтобы отражать то, что реально поставлено: коды с паролем, запланированная активация и истечение, аналитика heatmap/погода/ROI/когорт, публичные страницы статистики, группы кодов для больших портфелей, webhooks + REST API, мульти-команда и журнал аудита, SSO (SAML/OIDC) + SCIM provisioning. Старые общие буллиты «Аналитика сканирования / Рабочие процессы API / Команды» исчезли.
- Подсказка «Сохранить в Pro» под генератором теперь называет коды с паролем, запланированную активацию, аналитику heatmap и ROI, и публичные страницы статистики вместо просто «аналитики сканирования».
- Прогрессивное раскрытие на полевых продвинутых генераторах (N19.3): TOTP, HOTP, Aztec, PDF417, Swiss QR и EMVCo сворачивают свои экспертные ручки (алгоритм/цифры/период, EC level, столбцы/компактность, сообщение, MCC/AID) под секцией Expert tuning. GS1 Digital Link группирует AI 17/10/21 как Recommended; SEPA отделяет reference (Recommended) от BIC (Expert tuning). Свёрнутые сводки Expert показывают значок «expert», чтобы продвинутые пользователи замечали дополнительные ручки без клика.
- Сохранённые профили (N19.8): дать имя и сохранить текущие значения полей любого продвинутого генератора в localStorage, перечислить их в панели Saved profiles над легендой совместимости и загружать одним кликом или через палитру команд (Cmd/Ctrl+K). Хранение только на стороне клиента; ничто не покидает браузер.
- Авторитет печати-производства (N15): /print-size/ теперь содержит руководство по подложкам (8 подложек × штраф размера × ECC), правила безопасной CMYK-палитры с аннотациями уровня каталога CMYK/RGB-only, правила outdoor/signage (УФ-выгорание, поведение камеры в холодную погоду, косые углы сканирования), 4-проверочный печатный QA-протокол и определения степеней преflight на простом языке («D = провалится на глянцевой вывеске под 3 м»).
- Compliance fencing (N16): новые блоки «Compliance checklist» + «Когда не использовать это» на пяти целевых страницах, флагнутых рецензентом, App Store (Apple 5.2 / Play policy / TestFlight distribution), PayPal (AUP / злоупотребление F&F / 1099-K / классификация MSB), Bitcoin & Crypto (FATF Travel Rule / FinCEN/FCA registration / Howey-test exposure / OFAC), UPI (циркуляр NPCI / GST / overlay-мошенничество / SEBI по инвестиционным QR), SEPA (соответствие EPC069-12 / права возврата PSD2 / предупреждение о no-recurring-mandate). Присоединяется к ранее существующим блокам соответствия на AAMVA, Google / Yelp / TripAdvisor Review, Coupon, Review Funnel.
- Recent types в палитре команд (N19.7): последние 8 типов, которые вы выбирали, появляются первыми, когда Cmd/Ctrl+K открывается с пустым запросом; при частичном запросе recent types получают небольшой бонус ранжирования, чтобы "tot" надёжно прыгал к вашему наиболее используемому OTP-флоу. Также помечены чипом категории «Recent», чтобы буст был виден, а не магичен. Отслеживается только в localStorage.
- Полировка Simple-режима (N6): Simple теперь также скрывает панель Saved profiles (не понятие для новичков) и вкладку Batch. Уже скрытые элементы не изменены (поиск типов, отраслевые пресеты, легенда совместимости, вкладки категорий, чипы совместимости).
- Полоса доверия из четырёх столпов (N7): полоса заявок наверху страницы свёрнута с 5 пунктов до 4, каждый явно несёт свою столповую метку, «Действительно бесплатно, без регистрации, без paywalls», «Privacy-first, 0 исходящих запросов, проверьте вживую», «Production-safe, совместимость протестирована в апреле 2026», «No lock-in, статичный резервный QR, экспорт в любое время». Ссылка Comparison-updated удалена с полосы (это сигнал доверия, а не столп), но всё ещё живёт в навигации + футере.
- Решительные коллауты «Use this if / Do not use» (N19.11) в начале форм с большим количеством полей, Data Matrix, Aztec, PDF417, TOTP, HOTP, eSIM, GS1. С оранжевым акцентом, две статьи, перед любым вводом полей. Заменяет шаблон, где объясняющая проза сидела внизу, и пользователи читали её только после того, как закончили печатать.
- Capability banner (N19.9) на панели Style для не-QR символик, явный чип + заголовок («No styling, plain barcode only») + описание, заменяющий старую однопараграфную подсказку чем-то заметным.
- Семантическая валидация (N19.4): валидатор Base32 секрета TOTP, проверка префикса CH/LI Swiss QR IBAN + длины 21 символ, mod-97 контрольная сумма SEPA IBAN (ловит опечатанные цифры) и кросс-полевое предупреждение WiFi Enterprise, когда EAP выбран, но identity пуст. Inline, неблокирующее, переиспользует существующий реестр VALIDATION_RULES.
- QR Lab теперь в одном клике от Download (N5), пунктирный chip («Test before you print in QR Lab →») сидит inline с кнопками скачивания, чтобы верификация была видна в точке экспорта.
- Advanced открывается task-first (N19.1): полоса категорий теперь организована по тому, что вы делаете, а не тому, какая это символика. Девять корзин workflow, Everyday sharing, Events & venues, Media & files, Marketing & reviews, WiFi & telecom, Payments & banking, Retail & GS1, Boarding & ID, Auth & dev, заменяют старую таксономию символик (Everyday / Business / Payments / Identity / Security / Industrial / Advanced Standards). Все 105 кнопок типов перепривязаны; type-grid в футере перегруппирован соответственно.
- Авторитетный толчок (N3): новый хаб /standards/ с восемью полными страницами-эталонами, GS1 Digital Link (Sunrise 2027, живой валидатор контрольной цифры GTIN), TOTP & HOTP (RFC 6238 / 4226, живой валидатор энтропии Base32, совместимость аутентификаторов), Swiss QR-bill (SIX IG v2.3, живой валидатор CH/LI IBAN с детектированием QR-IBAN), водительские права AAMVA (CDS v10, таблица element-code, таблица IIN, рамки lawful-use), активация eSIM (LPA) (GSMA SGP.22, совместимость iOS 17.4+ / Android 13+), EMVCo merchant QR (структура MPM / CPM, региональные деривативы PIX/UPI/PromptPay/SGQR/DuitNow, таблица MCC), Micro QR & rMQR (ISO/IEC 18004 Annex M + ISO/IEC 23941, графики ёмкости, совместимость специализированных сканеров) и ZATCA e-invoice (Saudi FATOORA, теги TLV 01–09, Phase 1 vs Phase 2). Каждая страница: ссылка на спецификацию + канонические тестовые векторы + живой валидатор где применимо + подводные камни + совместимость сканеров + датированный next-review. Первый шаг к цели энциклопедического авторитета.
- Скаффолд публичного тестового корпуса (N2): новая страница /proof/corpus/, документирующая методологию, которую может использовать любой для аудита заявлений о совместимости сканеров, скачайте fixtures, перегенерируйте QR, отсканируйте своим парком, сообщите о расхождениях. Курированная таблица из 18 строк ожидаемых результатов сканирования по iOS Camera, Android Camera и pro-сканерам. Связывает /test-vectors/ (developer JSON) и /standards/ как авторитетный слой выше.
- Более ранние пункты Reviewer #6, отгруженные в этот день в предыдущих коммитах: jobs-first сетка плиток (N14), бренд-предложение «Самый надёжный QR-инструмент в интернете» (N17), палитра команд (N19.2), экспертные пресеты (N19.5), инспектор payload (N19.10), сводка формата канонического <title> (N20).
- Очередь переводов: копия N14 и N17 на 25 языках; всё остальное из сегодняшней свёртки Reviewer #6 (N19.3 / N19.4 / N19.7 / N19.8 / N19.9 / N19.11 / N5 / N6 / N7 / N15 / N16 / Pro SSO/SCIM) пока только на английском и откатывается на английский в других локалях до следующего прохода переводов.
2026-04-17, Keep-Alive в проде, страницы Pro roadmap + support, исправления аудита webhook
- Тариф Keep-Alive живёт в Pro: $4/мес, $36/год, или $240 Decade (10-летняя предоплата, эффективно $2/мес). Сохраняет существующие коды с 30-дневным cooldown редактирования назначения; никаких новых кодов, мест или API. Миграция 007, три продукта Stripe, путь webhook для одноразового платежа Decade, гейты плана через dashboard/codes/edit. Откатили баннеры «Ships Q3 2026» на /compare/ и /no-lock-in/.
- Новая страница на pro.qr.abundera.ai/roadmap/: что отгружено, обязательства Q3/Q4 с критериями kill, явный список того, что мы не строим.
- Новая страница на pro.qr.abundera.ai/support/: цели времени отклика по тарифам, адрес security disclosure, scope.
- Исправления Stripe webhook: гонка идемпотентности (могла глотать повторённый платёж), дедуп через SELECT перед обработкой, INSERT при успехе. Обработчик платежа Decade бросает исключение при отсутствующем/неизвестном price_id или несоответствии тарифа вместо тихого дропа.
DEFAULT_SEAT_LIMITнеопределено в team-invite accept. Допуск подписи 60s → 300s.incomplete_expiredмапится наtrialing(былexpired). - Документация:
ABUNDERA_JWT_AUDIENCESзадокументирован как обязательный; схемаPLAN_PRICE_MAPвdocs/INTEGRATIONS.md; удалены неиспользуемые ссылкиABUNDERA_SERVICE_SECRET. - Тесты: 70 проходят. Добавлено 8 для предикатов Keep-Alive и 30-дневного cooldown.
2026-04-16, Запуск Pro, переработка лестницы цен, рекомендации внешнего ревью
- Портал Pro в проде на pro.qr.abundera.ai.
- Лестница цен (месячно / годовая в месяц): Solo $12/$9, Business $39/$29, Team $129/$99, Agency $449/$349, Enterprise $1,800/$1,500. Годовая, выбор по умолчанию на сетке цен.
- Явные месячные лимиты сканирования (50K / 250K / 1M / 4M / 25M) заменяют «безлимит». Превышение лимита не ломает редиректы; мы тарифицируем овертайм по тарифу самой ступени ($0.06–$0.18 за 1K сканирований).
- У каждого тарифа явный счётчик кодов (500 / 2 500 / 15K / 75K / 500K), никаких сносок «безлимит*».
- Добавлено 13 платёжных целевых страниц: Apple Wallet, Google Wallet, EPC Girocode, BLIK, Interac, MB WAY, GCash, Maya, Kakao Pay, Naver Pay, LINE Pay, iDEAL, Boleto. Счётчик типов 91 → 104; sitemap теперь 3 224 URL.
- Scan-preflight расширен с 4 общих условий до 8 job-specific сценариев (наклейка меню, оконный плакат, lanyard, ценник на полке, складская этикетка, наружная вывеска, упаковка, визитка). Оценка C/D/F показывает модальное окно перед скачиванием.
- Матрица цен /compare/ разделена на шесть групп с одинаковой ёмкостью. Записи конкурентов добавлены для Bitly, Flowcode, Uniqode, QR Code Chimp, QRTIGER, каждая датирована и помечена для ежемесячной перепроверки. Стоимость одного кода в месяц показана в каждой строке.
- Проверка дрейфа счётчиков в pre-deploy скрипте: сканирует все сгенерированные страницы под
site/на жёстко заданные счётчики типов. Дрейф 91/104 на /compare/ вышел в продакшен, потому что старая проверка следила только за тремя страницами. - Фрейминг сайта Pro: «Free is for keeping. Pro is for changing.» проведено через /no-lock-in/, /static-vs-dynamic/ и Pro CTA на главной.
- Продукты Stripe созданы через идемпотентный скрипт
stripe-setup.py(Solo + Team подняты до rev 2 для новых сумм).PLAN_PRICE_MAPхранит и старые, и новые price ID, чтобы существующие подписчики оставались сопоставлены. - Прочее: полоса деталей совместимости над полями генератора, полоса доверия на главной, штамп свежести на каждой странице, скелет страницы /accessibility/, отраслевые пресет-пакеты /for/ (8), подсказка обнаружения Wizard/QR Lab, аудит счётчиков (120 → 336 иконок, 24 → 50 пресетов BCD), очистка языка репозитория (репозиторий приватный; «Open source generator code» → «Client-side code auditable in your browser»), OG-изображение перегенерировано с валидным QR-событием iCalendar.
2026-04-15, Simple/Advanced, /compare/, Save-to-Pro
- Переключатель Simple / Advanced на главной. Simple курирует 8 повседневных типов (URL, WiFi, vCard, Email, Phone, SMS, Event, Text); Advanced восстанавливает полные 104. Режим залипает в
localStorage; целевые страницы для не-Simple типов автоматически переключаются. - Матрица конкурентов /compare/ отгружена: feature-by-feature против QR Code Generator, QRCode Monkey и Uniqode. Датирована, повторно проверяется ежемесячно.
- Кнопка «Save to Pro» на бесплатном сайте: одним кликом продвинуть сгенерированный код в портал Pro. Состояние round-trip через хеш URL; неподписанные пользователи возвращаются на генератор с сохранённой работой.
- Стрелки прокрутки вкладок категорий на десктопе; плавная прокрутка на мобильных.
- Восстановление истории автоматически переключается в Advanced, когда тип сохранённого кода недоступен в режиме Simple.
- Копия Pro CTA смягчена; история анти-заложника (статичный резервный QR, 90-дневный grace, переносимость домена) выдвинута вперёд.
2026-04-14, Pro portal в проде, 3 новых типа, исправление autofill
- Pro portal (
pro.qr.abundera.ai) end-to-end в проде. - Три новых типа на бесплатном сайте: M-PESA Kenya (EMVCo MPM), видео-встреча (ярлыки Zoom/Meet/Teams/Webex), Coupon/Promo Code.
- Тип GS1 Digital Link теперь поддерживает все 12 Application Identifiers, мандатных Sunrise-2027.
- Новые SEO-страницы:
/static-vs-dynamic/,/no-lock-in/(контрактные: 90-дневный grace, экспорт в один клик, 30-дневное удаление GDPR, статичный резервный QR). - Исправление autofill (шестая попытка): блоки полей по типу, это настоящие
<form>элементы со своими токенамиautocomplete; неактивные формы получаютdisplay: none, чтобы Chrome не помечал off-screen инпуты. Вертикальная группировка vCard/Address/Contact/WiFi-Enterprise теперь работает в Chrome, Safari, Firefox. Playwright-харнес: 0 нарушений. - Воронка отзывов: дропдаун платформы (Google/Yelp/TripAdvisor) с per-platform placeholder копией.
- Wizard: исправлены 8 битых ссылок на result-slug.
- Header/footer унифицированы через общие partials; tool-страницы (Wizard, QR Lab, Test Vectors) перенесены в ту же шаблонную систему.
- Pre-deploy check: валидация внутренних ссылок + защита сырых английских вызовов
showToast(). - Исправления BCD: стабильность вертикального layout, регрессия UI целевой страницы, метки RFC-ссылок, артефакт водяного знака.
- Сгенерированный HTML целевых страниц больше не отслеживается git (всё ещё деплоится; git отслеживает шаблон и генератор).
2026-04-13, паритет 25 языков, редизайн header/footer, Playwright-харнес
- 6 660 ключей на английском fallback переведены по 25 языковым файлам. Не-английские целевые страницы больше не падают на английские строки. Конвейер переводов отрефакторен в валидатор/планировщик.
- i18n расширен на tool-страницы: Wizard, QR Lab и Test Vectors теперь имеют 25 языковых вариантов с тегами hreflang и записями в sitemap.
- Playwright round-trip харнес: генерирует код для каждого типа на каждом языке, декодирует canvas, проверяет поля. 0 нарушений.
- Редизайн header/footer: тонкий header, 3-колоночный footer, соответствующий шаблону sign.abundera.ai. Мобильная hamburger drawer теперь показывает элементы навигации при открытии (раньше было сломано).
- Клик по предпросмотру QR → лайтбокс zoom. Метка показывает имя типа + первый ввод (раньше показывала сырой payload).
- Первый проход исправления autofill (правильно приземлился 2026-04-14).
- Поиск типов раскрывает продвинутые типы; закрывается при выборе; пустые вкладки категорий скрыты в режиме Popular; восстановление истории переключает тип inline вместо редиректа.
2026-04-12, паритет 26 языков, 13 новых типов нагрузок, 3 не-QR 2D-штрихкода
- Полный паритет 26 языков: каждый английский ключ существует в каждом языковом файле (1 302 ключа × 25 языков). 5 533 записи добавлены за 4 прохода (proper nouns, короткие метки, метки полей форм, тосты, подсказки). 30 brand-payment подсказок остаются английскими по дизайну, URL и бренды авторитетны на английском.
- Дедупликация: удалено 113 устаревших дублирующихся блоков ключей в 19 языковых файлах (дрейф от ранних rebases).
- Исправление header info-страниц: blog/about/privacy/changelog использовали классы
.brand/.header-inner/.brand-textбез прикреплённого CSS. Переключено на ту же разметку.logo, что и в основном приложении. - 4 типа URI на основе стандартов: HOTP (RFC 4226), eSIM (GSMA SGP.22 LPA), SIP/SIPS (RFC 3261), MMS/MMSTO.
- WPA2/WPA3-Enterprise WiFi: расширяет формат
WIFI:методом EAP, аутентификацией Phase-2, identity, anonymous identity. - 6 региональных платёжных типов: Alipay, WeChat Pay, Swish (SE), Vipps (NO), Mercado Pago (LatAm), Payconiq (Benelux).
- 3 не-QR 2D-штрихкода: Data Matrix (ISO 16022), Aztec (ISO 24778), PDF417 (ISO 15438). bwip-js (~1 МБ) лениво загружается только когда выбран один из этих типов.
- 26-языковая витрина добавлена на главную с ссылками native-script.
- Pre-deploy скрипт аудита: проверка синхронизации
BATCH_VALID_TYPES+ защита сырых английскихshowToast(). - Footer, целевые страницы и i18n ключи добавлены для всех 13 новых типов (английский источник).
2026-04-11, получение URL фотографий BCD, фиксированный предпросмотр, расширяемые пресеты
- BCD: поле URL фото теперь загружает удалённые изображения и встраивает их как data URL, предотвращая загрязнение canvas при кроссдоменной загрузке (PDF/PNG-экспорт теперь работает на хостах без CORS).
- Десктопный layout BCD: панель предпросмотра теперь
position: sticky, поэтому когда пользователь раскрывает все секции, элементы управления свободно прокручиваются без потери видимости живого предпросмотра. (Раньше раскрытие Content + Layout + Options отталкивало Show-Fields за экран.) - Сетка пресетов BCD теперь расширяема, изначально показывает 12 layouts с переключателем «Show all layouts», зеркаля UX выбора иконок.
- Поля Tagline + QR-caption переоформлены: stacked label + полноширинный input (раньше был тесный sidecar 150px).
- Бейдж Scanability поднят с
bottom: -24pxдо-18px, чтобы он перестал перекрывать кнопку копирования. - Инструкции batch CSV теперь явно упоминают Google Sheets, Excel, Numbers.
2026-04-08, отраслевая библиотека иконок
- 24 новых иконки для центра логотипа (96 → 120) для медицины, продуктов питания и напитков, технологий, финансов.
- 10 новых пресетов layout BCD (40 → 50): Concrete, Honey, Indigo, Luxe, Midnight II, Ocean II, Slate, Verdant, Wine, Candy.
- Ошибка стратегии cache-buster:
?v=параметры наpage-init.js+lang-redirect.jsотсутствовали на целевых страницах, вызывая stale module loads после деплоев. Исправлено.
2026-04-04, градиентные фоны BCD + обратная сторона карточки + 12 новых пресетов
- BCD: 12 новых пресетов (Dark Mode, Pastel, Ocean, Cherry, Slate, Emerald, Amber, Mono, Rose, Midnight, Sand, Carbon). Всего 36 пресетов.
- Управляемые пользователем градиентные фоны со вторым выбором цвета.
- Рендеринг обратной стороны карточки с текстом компании, слогана и CTA.
- Строка иконок социальных сетей (LinkedIn / X / Instagram).
- Блок адреса из полей vCard.
- Визуальные миниатюры пресетов, каждая кнопка пресета теперь рендерит маленький canvas вместо placeholder.
2026-03-29, капитальный ремонт BCD + экспорт 600 DPI
- Business Card Designer: разворачиваемые секции аккордеона, фиксированный предпросмотр на мобильных, фиксированный нижний колонтитул экспорта.
- Ввод HEX-цветов с двунаправленной синхронизацией с выбором цвета, образцы цветовой палитры.
- 4 формы фотографий (круг, квадрат, скруглённый, шестиугольник).
- Разрешение экспорта увеличено до 600 DPI для чёткой печати.
- Меню kebab: экспорт шаблона, импорт шаблона, удиви меня, поделиться карточкой, печать листа (US Letter + A4 по 10 штук).
- Обрезка фото с принудительным сохранением квадратной формы. Защита минимума данных перед открытием дизайнера.
- Пресеты BCD увеличены: 8 новых визуально различных пресетов (Neon, Art Deco, Sunset, Forest, Brutalist, Kraft, Nordic, Retro 80s). Всего 24 пресета.
2026-03-22, 20 новых типов QR + Link-in-Bio + сравнения с конкурентами
- 20 новых типов QR (35 → 55): YouTube, Apple Music, Google Review, Yelp Review, TripAdvisor, Venmo, Cash App, Support/Tip Jar (Ko-fi/Patreon/BMAC/Liberapay), TWINT, Bizum, PayNow (SG), PayID (AU), ZATCA (SA), BIP-21 Bitcoin + Lightning, webcal://, JPQR (JP), HKFPS (HK), DuitNow (MY), MoMo (VN), Link-in-Bio.
- Link-in-Bio рендерит полную страницу профиля из URL-хэша QR, без бэкенда, без аккаунта, без трекинга.
- Виджет /embed/ iframe (postMessage API для интеграции в родительские страницы).
- Страницы сравнения /vs/ с конкурентами (варианты на 26 языках).
- npm-пакет @abundera/qr + CLI с 25 энкодерами типов.
2026-03-15, 96 иконок для центра логотипа + 5 новых языков
- 96 иконок для центра логотипа (12 → 96): криптовалюта, коммуникации, медиа, утилиты, коммерция, транспорт, природа, еда, люди, события, 12 смайликов, 18 глифов социальных сетей (X, Facebook, Instagram, LinkedIn, TikTok, YouTube, Pinterest, Reddit, Snapchat, Discord, Telegram, GitHub, Threads, Bluesky, Mastodon, Twitch, Signal, Medium). Расширяется через переключатель <details>.
- 5 новых языков (21 → 26): шведский, чешский, датский, норвежский, финский. По 1 106 ключей с native-переводами.
- Экспорт EPS (встроенный Level-2 PostScript с JPEG, кодировка ASCII85) для полиграфических рабочих процессов (Illustrator, InDesign, CorelDRAW).
- Анимированный GIF-экспорт (gif.js, 8 кадров радуги).
- BCD SVG-экспорт, BCD JPG-экспорт.
2026-03-08, аудит платформы + проверка доступности
Спринт исправления ошибок: устранено 3 критических + 7 высоких + 10 средних проблем.
- Нарушение CSP инлайн-скриптов на всех 55 целевых страницах, перенесено на body-атрибут
data-qr-preselect. - Ошибка устаревшего кэша Service Worker, query-stripped keys → full-URL + stale-while-revalidate.
- Рассинхронизация типа формы при нажатии на BCD-таблетку на не-vCard целевой странице.
- Видимость фоновых изображений (ползунок opacity, модули на 90% alpha, маршрутизация модального окна обрезки).
- Переполнение модального окна обрезки на мобильных.
- Wheel-zoom перехватывал прокрутку мыши (полностью удалён).
- Утечка IP аватара смягчена (referrerpolicy + no-referrer header).
- Исправление WiFi batch open-network, паритет полей MeCard batch, валидация TOTP base32.
- Сенсорные цели WCAG 2.5.8 (минимум 44×44 для грубого указателя).
- Проход aria-hidden на 87 декоративных SVG.
- Уважение к prefers-reduced-motion.
- Toast aria-live, кольцо focus-visible, навигация клавиатуры при обрезке, клавиши Home/End в меню переполнения.
- Оптимизация preload шрифтов.
2026-03-01, 15 типов на основе стандартов + валидатор сканируемости
- 15 новых типов QR: TOTP/2FA, Swiss QR-bill (с обязательным красным наложением Swiss cross), PIX (Бразилия), PromptPay (Таиланд), EMVCo универсальный мерчант, Lightning BOLT11, публичный ключ SSH, публичный ключ OpenPGP, конфигурация WireGuard, GS1 Digital Link, Spotify, Fediverse (Mastodon/Bluesky/Nostr/Matrix/Threads), Geo URI, Magnet, полный iCalendar.
- Валидатор сканируемости, запускает jsQR на отрендеренном canvas и предупреждает при сбое декодирования.
- Печатный URL-запасной вариант, переключатель добавляет URL назначения как простой текст под QR.
- jsQR лениво загружен (экономия 262 KB eager payload).
2026-02-22, многошаговый редактор градиентов + цвета для каждого глаза
- Многошаговый редактор градиентов (до 5 цветов).
- Независимые внутренний/внешний цвет для каждого глаза.
- Режим QR с фоновым изображением (ползунок непрозрачности, автоматическое принудительное EC=H).
- Масштабирование щипком на canvas предпросмотра.
- Web Share API для QR-кодов и визиток.
- Формат экспорта WebP.
- Отмена/повтор (Ctrl/Cmd-Z, буфер 50 шагов).
- Кнопка случайного шаблона («удиви меня»).
2026-02-15, страницы конфиденциальности и безопасности + укрепление i18n
- 4 новые страницы доверия: /privacy/, /terms/, /security/, /about/, на всех 21 языке.
- Опубликован /.well-known/security.txt.
- 29 жёстко заданных английских строк заменены вызовами
qrT(); ~100 новых ключей i18n переведены на все 21 язык. - Инлайн-скрипты вынесены во внешние файлы, CSP укреплена (unsafe-inline удалён).
2026-02-08, доступность модальных окон + управление фокусом
- Ловушка фокуса на всех 3 модальных окнах (обрезка, BCD, пользовательские диалоги).
- Полировка навигации клавиатуры в меню переполнения BCD, переключателе языков и выборе типа.
- Критические исправления ошибок: рамки SVG смещены на один пиксель при рендеринге, уязвимость XSS в предпросмотре пакетного масштабирования, ошибка
btoa()Latin1 при нажатии на пресет логотипа.
2026-02-01, первый запуск
- Запуск Abundera QR с 20 типами QR, 40 шаблонами, пакетной генерацией CSV (500 кодов), Business Card Designer (300 DPI), 20 языками, 420 статическими целевыми страницами.
- Принцип приоритета конфиденциальности: 100% на стороне клиента, без аккаунтов, без отслеживания, без динамических кодов перенаправления.