변경 로그
모든 릴리스, 모든 기능, 모든 수정, 스크롤 가능한 하나의 로그에.
2026-04-26, 모든 코드 타입에 대한 ISO/AIM/GS1 렌더링 완전 준수
- 모든 QR / 2D / 1D 바코드를 관할 표준에 비추어 감사했습니다. bwip-js's의
includetext는 모든 bcid에서 기본값이 false이므로, EAN/UPC/ITF-14는 ISO 15420 §5.1.2 + GS1 §5.4.4가 요구하는 사람이 읽을 수 있는 텍스트 띠 없이 출시되고 있었습니다. EAN/UPC 패밀리 전체에includetext: true+guardwhitespace: true를, 그리고 ITF-14, Code 128, Code 39, Code 93, Codabar, VIN에includetext: true를 설정했습니다. - EAN-13의 정숙 영역은 이제 ISO 15420 부속서 A에 따라 비대칭(
paddingleft: 44= 11 모듈,paddingright: 28= 7 모듈, scale=4 기준)입니다. EAN-8 / UPC-A / UPC-E는 각자의 스펙이 명시한 대칭 봉투를 사용합니다. PDF417 + AAMVA 운전면허는 ISO 15438 §5.5에 따라 2모듈 정숙 영역을, Data Matrix는 ISO 16022에 따라 1모듈을, Aztec은 권장값 1모듈(ISO 24778은 0도 허용하지만 가장자리에 닿는 스캐너에서 읽히지 않음)을 받습니다. - 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/. 17개 타입 모두에 대해 정숙 영역, HRI, ECC, 체크 디지트를 다루는 심볼로지별 레퍼런스이며, 인용된 ISO/AIM/GS1 표준 각각의 1차 출처 링크를 포함합니다.
2026-04-26, staging-first 배포 게이트 강화
- staging이 있는 사이트의 프로덕션 배포는 이제 가장 최근 staging 배포가 현재 commit과 정확히 일치할 것을 요구합니다(양쪽 모두 깨끗한 working tree). 이전 게이트의 24시간 윈도우는 무관한 프로덕션 배포가 오래된 staging 이력에 편승하는 것을 허용했습니다. SHA로 추적, fail-closed, 오버라이드는 그대로
CF_DEPLOY_SKIP_STAGING_FIRST=1. cf-deploy.py에CLOUDFLARE_API_TOKEN프리플라이트 체크 추가, wrangler가 모호한 "non-interactive environment" 오류를 내는 대신source ~/.envrc힌트와 함께 즉시 실패합니다.- 모든 배포 후 콘텐츠 검증기: 라이브 URL을 가져와 그 cache-buster가 방금
dist/에 찍힌 값과 일치하는지 확인합니다. 200-OK 헬스 체크가 조용히 놓치는 "CNAME 잘못 연결" / "엣지가 오래된 캐시 응답" / "잘못된 브랜치" 부류의 버그를 잡아냅니다.
2026-04-25, 모바일 UX 개편: 미리보기 고정 헤더, 하단 시트 미리보기, 고정 다운로드 CTA
- 휴대폰(≤768px)에서 페이지 상단에 고정되는 미리보기 헤더. 항상 QR의 라이브 썸네일과 한 줄 상태를 표시합니다, 유휴 시 "아래 양식을 작성하세요", 코드가 렌더링되면 "QR 코드가 준비되었습니다 · 다운로드하려면 탭하세요". QR이 처음 유효해질 때 한 번 펄스해 사용자가 알아차리도록 합니다. 모바일 방문자가 결과가 폴드 아래에 렌더링된 사실을 인지하지 못하던 오래된 문제를 해결.
- 미리보기 바(또는 새 하단 고정 다운로드 버튼)를 탭하면 미리보기가 하단 시트로 열립니다, 전체 너비의 다운로드 버튼이 세로로 쌓이고, 아래로 스와이프하거나 배경을 탭하면 닫히며, iOS 홈 인디케이터를 위한 세이프 에어리어 패딩 적용.
- 소프트 키보드 처리: visualViewport 리스너가 키보드가 올라오면
body.kb-open을 표시하고, 미리보기 바는 가는 알약 모양으로 축소되며 포커스된 입력은 중앙으로 스크롤되어 키보드가 사용자가 입력 중인 내용을 가리지 않습니다. - ≤640px 탭 타깃 정비: 타입 선택 타일을 14×8 / 0.78rem에서 16×10 / 0.82rem 및 최소 높이 56px로 상향, 패널 탭과 주요 버튼은 최소 44px, 내보내기 버튼은 시트 내에서 전체 너비로 쌓이며 최소 48px 적용.
- viewport 메타에
interactive-widget=resizes-content를 추가하고 두 개의100vh규칙을100dvh로 이전해 동적 툴바가 있는 모바일 브라우저에서도 예측 가능한 레이아웃을 보장. - 오래된 미리보기 스크롤 FAB 제거, 미리보기 바와 고정 CTA가 같은 일을 더 직접적으로 수행. 서비스 워커 캐시를 v132로 갱신. 새 문자열은 25개 언어 모두로 번역됨.
- CSS 정돈:
style.css의 단일 값 space 선언 203건을 codemod로--space-N토큰으로 이전. 순수 리팩터, 시각적 변화 없음. - 인라인 스타일 상한 89 → 85: AAMVA / Code 39 / Code 93 / VIN 입력에 있던 네 개의
style="text-transform:uppercase"속성을 기존.input-uppercase클래스로 대체.
2026-04-19, N16 컴플라이언스 정비(45 페이지), N3 배치 2, 회귀 수정, N3 잔여, AAMVA 고지, 전문가 상태 영구화, 접근성 감사
- 전체 N16 컴플라이언스 정비: 34개 결제 스킴 랜딩 페이지 모두 이제 컴플라이언스 체크리스트 + "이 코드를 사용하지 말아야 할 때" 블록을 갖춥니다. 네 번째 패스(19페이지)가 나머지를 다룹니다: Alipay + WeChat Pay (PBoC + SAFE), Boleto (BACEN + FEBRABAN), Mercado Pago (7개국 규제 매트릭스), Payconiq (NBB + PSD2), EPC/Girocode (EPC069-12 + ZAG), Apple Wallet + Google Wallet (개발자 프로그램 + FTC Endorsement + GDPR 위치), 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 / 리뷰 페이지 / 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 규칙 / THB 1.8M VAT 임계값 / AMLO 보고 / 국경간 FX 고지), EMVCo (ISO 18245 MCC / 어카이어러 KYC / AID 불일치 시 국가 FIU), TWINT (FINMA/AMLA / MROS / KIG 소비자 보호). 두 번째 서브 배치(8): Bizum (Bizum Negocios / SEPBLAC / factura / CNMV), PayNow (MAS Payment Services Act / STRO 보고 / SGQR / PDPA), iDEAL (라이선스 어카이어러 / DNB / PSD2 13개월 분쟁 / 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 배치 2), AAMVA 운전면허, eSIM 활성화 (LPA), EMVCo 가맹점 QR, Micro QR / rMQR, ZATCA 전자세금계산서. 허브에는 이제 핵심 사양을 다루는 8개의 라이브 레퍼런스 페이지가 있습니다.
- 두 가지 회귀 수정: (1) 홈페이지가 로드 시 자동 스크롤되던 문제,
showCategory()init이 카테고리 칩에scrollIntoView({block:"nearest"})를 호출했기 때문, 페이지 스크롤을 절대 건드리지 않도록 수동 가로scrollLeft로 교체. (2) "paym" 타입 검색이 0건을 반환하던 문제, 필터가 라벨 + 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, 긴 ASCII 평지에는 PDF417, DPM/제약에는 Data Matrix, 소비자 폰 카메라에는 QR). 표준 허브에 이제 9개 페이지 모두 라이브, 0개 초안.
- AAMVA 양식 점진적 공개 (N19.3 후속): 25개 입력 양식을 필수 (관할 / 면허 / 문서 유형 / 패밀리 / 이름 / 생년월일), 권장 펼침 (중간 이름 + 거리 + 시/도/우편번호 + 발급/만료 일자), 전문가 튜닝 접힘 (성별/눈/키 + 클래스/제한/배서)으로 분할. TOTP, HOTP, Aztec, PDF417, Swiss QR, EMVCo, GS1, SEPA에서 사용된 패턴과 일치.
- 전문가 튜닝 상태가 방문 간에 유지됨 (N19.3 후속): 어떤 양식에서든 전문가 섹션을 열면, 열림 상태가 타입별로 키 지정되어
localStorage.qrExpertSectionsOpen에 저장됩니다. 다음에 그 타입을 선택하면 전문가는 이미 열려 있습니다..field-section[data-level="expert"]의 위임된toggle리스너, 양식별 배선 없음. - 내부 접근성 감사 (N8): 홈페이지, /print-size/, 새 /standards/ 허브 + 9개 권위 페이지, 그리고 45개 결제 스킴 랜딩 페이지에 대한 수동 WCAG 2.2 AA 패스. 스킵 링크 대상, focus-visible, 양식 라벨, 버튼 이름, ARIA 역할, 명도 AAA 기본 / AA+ muted에서 통과 확인. 표제 레벨 스킵 수정 (vCard/MECARD extra-fields 내부의 세 개
<h4>부제목을 깨끗한 윤곽선을 위해<h3>로 승격). 전체 결과는 /accessibility/에 게시됨. - 공개 코퍼스 ZIP (N2 후속): /proof/corpus.zip, 묶인 픽스처 JSON + CSV + 방법론 + README, 약 4 KB, 모든 배포에서 재구축. 스캐너 플릿이 이제 리포지토리를 클론하는 대신 단일 파일로 전체 코퍼스를 다운로드할 수 있습니다. /proof/corpus/에서 눈에 띄는 다운로드 버튼으로 링크됨.
- 스캐너 플릿 증명 로그 (N2 후속): 새 docs/SCANNER_ATTESTATION.md, 수동 디바이스/OS/앱 검증의 날짜별 행 로그. iPhone 15 Pro on iOS 18.3, Pixel 8 on Android 14, Zebra DS8100, Google Authenticator, 1Password를 다루는 10개 행으로 시드. 검증한 디바이스마다 증가합니다.
- 생성기 내 미리보기 사실성 (N19.6): 라이브 QR 미리보기 아래의 컴팩트 4-칩 토글, 기본 / 폰 / 모노 / 저명도. 미리보기에 CSS 필터 적용 (폰의 경우 스케일, 모노의 경우 회색조, 저명도의 경우 명도 감소)하여 디자이너가 생성기를 떠나지 않고 다양한 매체에서 QR이 어떻게 동작하는지 확인. 인코딩된 페이로드, 다운로드, 클립보드 복사에는 영향 없음.
- 의미적 검증기 추가 (N19.4 확장): HOTP 시크릿 Base32 + 카운터 음이 아닌 정수 체크; eSIM SM-DP+는 베어 FQDN이어야 함 (https:// 없음, 흔한 폰 프로비저닝 깨짐); eSIM Matching ID가
$문자 거부 (LPA 필드 구분자와 충돌). - 점진적 공개를 UPI와 Crypto로 확장 (N19.3 확장): UPI 금액 + 메모를 권장으로 그룹화; 크립토 금액 + 라벨을 권장으로 그룹화. SIP, MMS, PromptPay, Lightning 검토 후 평면으로 유지, 공개의 이점을 얻기에는 필드가 너무 적음.
- SEO, 성능, 보안, 링크 무결성, 코드 품질에 걸친 품질 감사 정비 (i18n 패스 연기). 서비스 워커
cache.put쓰기를 이제event.waitUntil내부에서 실행하여 내비게이션 중간에 떨어지지 않도록 함; 캐시 v121로 갱신. 명함 인쇄 다이얼로그를document.write에서BlobURL로 전환. 공유 및 카드 다운로드 클릭 핸들러를 try/catch로 감싸 거부가 조용한 실패 대신 토스트로 표면화되도록. 매직 넘버 타이밍 (디자인 카드 해시 자동 열기, GIF 프레임 렌더링, 듀얼 PNG 다운로드 간격, 인쇄 blob 해제) 명명된 상수로 추출. 잠재적 CSS 버그 수정:.card-text-row입력 선택자가[type="text"]만 매칭했지만, HTML 미니파이어가 기본type="text"속성을 제거하므로input:not([type])추가하여 BCD 태그라인 + 캡션 입력이 프로덕션에서 스타일을 유지하도록. 두 개의 불필요한!important선언 제거; 시끄러운 i18nconsole.warn침묵. CLAUDE.md 업데이트, 언어 페이지는_redirects재작성을 통해 제공되지 않고site/{lang}/로 사전 렌더링됨.
2026-04-18, 권위 푸시: /standards/ 허브 + 3개 표준 페이지, /proof/corpus/, Reviewer #6 마무리, N19.1 워크플로우 우선 고급
- 심플 모드에 8 타일 그리드 아래에 미묘한 "고급에서 96개 더보기" 힌트. 링크를 클릭하면 모드 토글이 전환되어 사용자가 다시 위로 스크롤할 필요가 없음. 심플은 8 타일에 그대로; 고급은 롱테일을 위한 발견 가능성 경로로 유지.
- 실제로 출시된 내용을 반영하여 Pro CTA 글머리 기호 목록 다시 작성: 비밀번호 게이트 코드, 예약 활성화 및 만료, 히트맵/날씨/ROI/코호트 분석, 공개 가능 통계 페이지, 대형 포트폴리오용 코드 그룹, 웹훅 + REST API, 멀티팀 및 감사 로그, SSO (SAML/OIDC) + SCIM 프로비저닝. 오래된 일반적인 "스캔 분석 / API 워크플로우 / 팀" 글머리는 사라짐.
- 생성기 아래의 "Pro에 저장" 힌트는 이제 비밀번호 게이트, 예약 활성화, 히트맵 및 ROI 분석, 공개 통계 페이지를 "스캔 분석"만이 아닌 명시함.
- 필드 다수의 고급 생성기에서 점진적 공개 (N19.3): TOTP, HOTP, Aztec, PDF417, Swiss QR, EMVCo는 전문가 노브 (알고리즘/자릿수/주기, EC 레벨, 컬럼/컴팩트, 메시지, MCC/AID)를 전문가 튜닝 섹션 아래로 접음. GS1 Digital Link는 AI 17/10/21을 권장으로 그룹화; SEPA는 참조 (권장)와 BIC (전문가 튜닝) 분리. 접힌 전문가 요약은 "전문가" 알약을 표시하여 파워 유저가 클릭 없이 추가 노브를 발견함.
- 저장된 프로필 (N19.8): 모든 고급 생성기의 현재 필드 값을 이름으로 저장하여 localStorage에 저장하고, 호환성 범례 위의 저장된 프로필 패널에 나열하며, 한 번의 클릭이나 명령 팔레트 (Cmd/Ctrl+K)로 로드. 저장은 클라이언트 측 전용; 브라우저 외부로 나가지 않음.
- 인쇄 프로덕션 권위 (N15): /print-size/는 이제 매체 가이드 (8개 매체 × 크기 페널티 × ECC), CMYK 안전 팔레트 규칙과 카탈로그 레벨 CMYK/RGB 전용 주석, 야외/사이니지 규칙 (UV 페이드, 추운 날씨 카메라 동작, 비스듬한 스캔 각도), 4단계 인쇄 가능한 QA 프로토콜, 평이한 영어 프리플라이트 등급 정의 ("D = 3 m 이하 광택 사이니지에서 실패")를 포함.
- 컴플라이언스 펜스 (N16): 다섯 개의 리뷰어 표시 랜딩 페이지에 새로운 "컴플라이언스 체크리스트" + "이 코드를 사용하지 말아야 할 때" 블록, App Store (Apple 5.2 / Play 정책 / TestFlight 배포), PayPal (AUP / F&F 남용 / 1099-K / MSB 분류), Bitcoin & Crypto (FATF Travel Rule / FinCEN/FCA 등록 / Howey 테스트 노출 / OFAC), UPI (NPCI 회람 / GST / 사기 방지 오버레이 사기 / 투자 QR에 대한 SEBI), SEPA (EPC069-12 적합성 / PSD2 반환 권리 / 비반복 위임 경고). AAMVA, Google / Yelp / TripAdvisor 리뷰, Coupon, Review Funnel의 기존 컴플라이언스 블록에 합류.
- 명령 팔레트의 최근 타입 (N19.7): Cmd/Ctrl+K가 빈 쿼리로 열릴 때 마지막 8개 선택한 타입이 먼저 표시됨; 부분 쿼리에서 최근 타입은 작은 순위 보너스를 받아 "tot"이 가장 자주 사용하는 OTP 흐름으로 안정적으로 점프함. 부스트가 마법이 아니라 보이도록 "최근" 카테고리 칩으로도 표시됨. localStorage에서만 추적.
- 심플 모드 다듬기 (N6): 심플은 이제 저장된 프로필 패널 (초보자 개념이 아님)과 배치 탭도 숨김. 이미 숨겨진 항목 변경 없음 (타입 검색, 산업 프리셋, 호환성 범례, 카테고리 탭, 호환성 칩).
- 4기둥 신뢰 스트립 (N7): 페이지 상단 클레임 스트립이 5개에서 4개로 축소, 각 항목이 명시적으로 기둥 라벨을 갖춤, "진정으로 무료, 가입 없음, 페이월 없음", "개인정보 우선, 0 외부 요청, 라이브 검증", "프로덕션 안전, 2026년 4월 호환성 테스트", "잠금 없음, 정적 백업 QR, 언제든 내보내기". 비교 업데이트 링크는 스트립에서 제거됨 (신뢰성 신호이지 기둥은 아님)이지만 여전히 내비게이션 + 푸터에 있음.
- 결정적인 "이런 경우 사용 / 사용하지 마세요" 콜아웃 (N19.11), 필드 다수의 고급 양식 상단에, Data Matrix, Aztec, PDF417, TOTP, HOTP, eSIM, GS1. 주황색 강조, 두 절, 어떤 필드 입력 전. 설명 산문이 하단에 위치해 사용자가 입력을 마친 후에야 읽던 패턴 대체.
- 비-QR 심볼로지의 스타일 패널에 대한 기능 배너 (N19.9), 명시적 칩 + 제목 ("스타일 없음, 평이한 바코드만") + 설명, 이전의 단일 단락 힌트를 한눈에 들어오는 것으로 대체.
- 의미적 검증 (N19.4): TOTP Base32 시크릿 검증기, Swiss QR IBAN CH/LI 접두사 + 21-자 길이 체크, SEPA IBAN mod-97 체크섬 (오타 자릿수 잡기), EAP가 선택되었지만 신원이 비어 있을 때 교차 필드 WiFi Enterprise 경고. 인라인, 비차단, 기존 VALIDATION_RULES 레지스트리 재사용.
- QR Lab은 이제 다운로드에서 한 번의 클릭 거리 (N5), 점선 테두리 칩 ("인쇄 전 QR Lab에서 테스트하세요 →")이 다운로드 버튼과 인라인으로 위치하여 검증이 내보내기 시점에서 보임.
- 고급은 작업 우선으로 열림 (N19.1): 카테고리 스트립이 이제 심볼로지가 무엇인지가 아니라 무엇을 하고 있는지로 정리됨. 9개 워크플로우 버킷, 일상 공유, 이벤트 및 장소, 미디어 및 파일, 마케팅 및 리뷰, WiFi 및 통신, 결제 및 금융, 소매 및 GS1, 탑승 및 ID, 인증 및 개발, 이전 심볼로지 분류 (일상 / 비즈니스 / 결제 / 신원 / 보안 / 산업 / 고급 표준)를 대체. 모든 105개 타입 버튼 재매핑; 푸터 타입 그리드도 일치하도록 재그룹화.
- 권위 푸시 (N3): 8개의 전체 레퍼런스 페이지가 있는 새 /standards/ 허브, GS1 Digital Link (Sunrise 2027, 라이브 GTIN 체크 디지트 검증기), TOTP & HOTP (RFC 6238 / 4226, 라이브 Base32 엔트로피 검증기, 인증기 호환성), Swiss QR-bill (SIX IG v2.3, QR-IBAN 감지가 있는 라이브 CH/LI IBAN 검증기), AAMVA 운전면허 (CDS v10, 요소 코드 표, IIN 표, 합법적 사용 프레이밍), eSIM 활성화 (LPA) (GSMA SGP.22, iOS 17.4+ / Android 13+ 호환성), EMVCo 가맹점 QR (MPM / CPM 구조, 지역 파생 PIX/UPI/PromptPay/SGQR/DuitNow, MCC 표), Micro QR & rMQR (ISO/IEC 18004 부속서 M + ISO/IEC 23941, 용량 차트, 전문가 스캐너 호환성), ZATCA 전자세금계산서 (사우디 FATOORA, TLV 태그 01–09, Phase 1 대 Phase 2). 각 페이지: 사양 링크 + 정식 테스트 벡터 + 적용 가능한 경우 라이브 검증기 + 함정 + 스캐너 호환성 + 날짜 적힌 다음 검토. 백과사전급 권위 목표를 향한 첫걸음.
- 공개 테스트 코퍼스 스캐폴드 (N2): 누구나 스캐너 호환성 클레임을 감사할 수 있는 방법론을 문서화한 새 /proof/corpus/, 픽스처 다운로드, QR 재생성, 자체 플릿으로 스캔, 불일치 보고. iOS Camera, Android Camera, 프로 스캐너에 걸친 큐레이트된 18-행 예상 스캔 결과 표. 권위 레이어로 위에 있는 /test-vectors/ (개발자 JSON)와 /standards/를 링크.
- 이 날 이전 커밋에서 출시된 Reviewer #6 항목: 작업 우선 타일 그리드 (N14), "인터넷에서 가장 신뢰받는 QR 도구" 브랜드 문장 (N17), 명령 팔레트 (N19.2), 전문가 프리셋 (N19.5), 페이로드 인스펙터 (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 로드맵 + 지원 페이지, 웹훅 감사 수정
- Pro에 Keep-Alive 티어 라이브: $4/월, $36/년 또는 $240 Decade(10년 선납, 실효 $2/월). 30일 목적지 편집 쿨다운으로 기존 코드 보존; 새 코드 없음, 시트 없음, API 없음. 마이그레이션 007, 세 개의 Stripe 제품, 일회성 Decade 결제용 웹훅 경로, 대시보드/코드/편집 전반의 플랜 게이트. /compare/와 /no-lock-in/의 "Q3 2026 출시" 배너 되돌림.
- pro.qr.abundera.ai/roadmap/의 새 페이지: 출시된 것, 종료 기준이 있는 Q3/Q4 약속, 우리가 만들지 않을 것에 대한 명시적 목록.
- pro.qr.abundera.ai/support/의 새 페이지: 티어별 응답 시간 목표, 보안 공개 주소, 범위.
- Stripe 웹훅 수정: 멱등성 경합 (재시도된 결제를 삼킬 수 있음), 처리 전 SELECT로 중복 제거, 성공 시 INSERT. Decade 결제 핸들러는 누락된/알 수 없는 price_id 또는 일치하지 않는 티어에 대해 조용히 떨어뜨리는 대신 throw. team-invite 수락에서
DEFAULT_SEAT_LIMIT미정의. 시그니처 허용 60초 → 300초.incomplete_expired는trialing으로 매핑됨 (이전엔expired). - 문서:
ABUNDERA_JWT_AUDIENCES가 필수로 문서화됨;docs/INTEGRATIONS.md의PLAN_PRICE_MAP스키마; 사용되지 않는ABUNDERA_SERVICE_SECRET참조 제거. - 테스트: 70개 통과. Keep-Alive 술어와 30일 쿨다운에 대해 8개 추가.
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 per 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; 사이트맵은 이제 3,224 URL.
- 스캔 프리플라이트가 4개 일반 조건에서 8개 작업별 시나리오 (메뉴 스티커, 창문 포스터, 랜야드, 선반 태그, 창고 라벨, 야외 사이니지, 패키징, 명함)로 확장. 등급 C/D/F는 사전 다운로드 모달 표시.
- /compare/ 가격 매트릭스가 6개 용량 일치 그룹으로 분할. Bitly, Flowcode, Uniqode, QR Code Chimp, QRTIGER에 대한 경쟁사 항목 추가, 각각 날짜가 적혀 있고 월간 재검증 표시. 모든 행에 코드별 월간 비용 표시.
- 사전 배포 스크립트의 카운트 드리프트 체크:
site/아래의 모든 생성된 페이지에서 하드코딩된 타입 카운트 스캔. /compare/의 91/104 드리프트가 출시된 것은 이전 체크가 세 페이지만 감시했기 때문. - Pro 사이트 프레이밍: "무료는 보존을 위한 것. Pro는 변경을 위한 것." /no-lock-in/, /static-vs-dynamic/, 홈페이지 Pro CTA 전체에 적용.
- 멱등
stripe-setup.py스크립트로 생성된 Stripe 제품 (Solo + Team은 새 금액에 대해 rev 2로 상향).PLAN_PRICE_MAP은 기존 가입자가 매핑된 상태로 유지되도록 이전 및 새 price ID를 모두 보유. - 기타: 생성기 필드 위의 호환성 상세 스트립, 홈페이지 신뢰 스트립, 모든 페이지의 신선도 스탬프, /accessibility/ 스켈레톤 페이지, /for/ 산업 프리셋 팩 (8), 마법사/QR Lab 발견 가능성 힌트, 카운트 감사 (120 → 336 아이콘, 24 → 50 BCD 프리셋), 리포지토리 언어 정리 (리포는 비공개; "오픈 소스 생성기 코드" → "브라우저에서 감사 가능한 클라이언트 측 코드"), 유효한 iCalendar 이벤트 QR로 OG 이미지 재생성.
2026-04-15, 심플/고급, /compare/, Save-to-Pro
- 홈페이지의 심플 / 고급 토글. 심플은 8개 일상 타입 (URL, WiFi, vCard, Email, Phone, SMS, Event, Text)을 큐레이트; 고급은 전체 104개를 복원. 모드는
localStorage에서 끈적임; 비-심플 타입의 랜딩 페이지는 자동 전환. - /compare/ 경쟁사 매트릭스 출시: QR Code Generator, QRCode Monkey, Uniqode와 기능별 비교. 날짜 적힘, 월간 재검토.
- 무료 사이트의 "Pro에 저장" 버튼: 생성된 코드를 한 번의 클릭으로 Pro 포털에 승격. 상태가 URL 해시를 통해 라운드트립; 미서명 사용자는 작업이 보존된 상태로 생성기로 돌아옴.
- 데스크톱의 카테고리 탭 스크롤 화살표; 모바일의 부드러운 스크롤.
- 저장된 코드의 타입이 심플 모드에서 사용할 수 없을 때 히스토리 복원이 자동으로 고급으로 전환.
- Pro CTA 카피가 부드러워짐; 인질 방지 스토리 (정적 백업 QR, 90일 유예, 도메인 이식성)가 앞으로 당겨짐.
2026-04-14, Pro 포털 온라인, 3개 새 타입, 자동 채우기 수정
- Pro 포털 (
pro.qr.abundera.ai)이 엔드투엔드로 온라인. - 3개 새 무료 사이트 타입: M-PESA Kenya (EMVCo MPM), Video Meeting (Zoom/Meet/Teams/Webex 단축), Coupon/Promo Code.
- GS1 Digital Link 타입은 이제 모든 12개 Sunrise-2027 의무 Application Identifiers 지원.
- 새 SEO 페이지:
/static-vs-dynamic/,/no-lock-in/(계약상: 90일 유예, 한 번의 클릭 내보내기, 30일 GDPR 삭제, 정적 백업 QR). - 자동 채우기 수정 (여섯 번째 시도): 타입별 필드 블록은 자체
autocomplete토큰이 있는 실제<form>요소; 비활성 양식은 Chrome이 화면 밖 입력을 표시하지 않도록display: none을 받음. vCard/Address/Contact/WiFi-Enterprise 세로 그룹화는 이제 Chrome, Safari, Firefox에서 작동. Playwright 하니스 0 위반. - 리뷰 퍼널: 플랫폼 드롭다운 (Google/Yelp/TripAdvisor)과 플랫폼별 플레이스홀더 카피.
- 마법사: 8개의 깨진 결과 슬러그 참조 수정.
- 헤더/푸터가 공유 partials를 통해 통일됨; 도구 페이지 (Wizard, QR Lab, Test Vectors)가 동일한 템플릿 시스템으로 이동.
- 사전 배포 체크: 내부 링크 검증 + 원시 영어
showToast()가드. - BCD 수정: 세로 레이아웃 안정성, 랜딩 페이지 UI 회귀, RFC 링크 라벨, 워터마크 아티팩트.
- 생성된 랜딩 페이지 HTML은 더 이상 git 추적되지 않음 (여전히 배포; git는 템플릿과 생성기 추적).
2026-04-13, 25개 언어 동등성, 헤더/푸터 재설계, Playwright 하니스
- 25개 언어 파일에 걸쳐 6,660개 영어 폴백 키 번역. 비영어 랜딩 페이지가 더 이상 영어 문자열로 폴백되지 않음. 번역 파이프라인이 검증기/플래너로 리팩터링됨.
- i18n이 도구 페이지로 확장: Wizard, QR Lab, Test Vectors는 이제 25개 언어 변형, hreflang 태그와 사이트맵 항목 포함.
- Playwright 라운드트립 하니스: 모든 언어의 모든 타입에 대해 코드 생성, 캔버스 디코드, 필드 체크. 0 위반.
- 헤더/푸터 재설계: 슬림 헤더, sign.abundera.ai 패턴과 일치하는 3열 푸터. 모바일 햄버거 드로어가 이제 열렸을 때 내비게이션 항목 표시 (이전엔 깨짐).
- QR 미리보기 클릭 → 줌 라이트박스. 라벨이 타입 이름 + 첫 입력을 표시 (이전엔 원시 페이로드 표시).
- 첫 패스 자동 채우기 수정 (2026-04-14에 적절히 안착).
- 타입 검색이 고급 타입을 표면화; 선택 시 닫힘; 빈 카테고리 탭이 인기 모드에서 숨겨짐; 히스토리 복원이 리디렉션 대신 인라인으로 타입 전환.
2026-04-12, 26개 언어 동등성, 13개 새 페이로드 타입, 3개 비-QR 2D 바코드
- 전체 26개 언어 동등성: 모든 영어 키가 모든 언어 파일에 존재 (1,302 키 × 25 lang). 4회 패스에 걸쳐 5,533개 항목 추가 (고유명사, 짧은 라벨, 양식 필드 라벨, 토스트, 힌트). 30개 브랜드 결제 힌트는 의도적으로 영어 유지, URL과 브랜드 이름은 영어가 권위적임.
- 중복 제거: 19개 lang 파일에 걸쳐 113개의 오래된 중복 키 블록 제거 (이전 리베이스의 드리프트).
- 정보 페이지 헤더 수정: blog/about/privacy/changelog가 CSS가 첨부되지 않은
.brand/.header-inner/.brand-text클래스 사용 중. 메인 앱과 동일한.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 인증, 신원, 익명 신원으로 확장. - 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 MB)는 그러한 타입 중 하나가 선택될 때만 게으르게 로드됨.
- 네이티브 스크립트 링크가 있는 26개 언어 쇼케이스 섹션이 홈페이지에 추가됨.
- 사전 배포 감사 스크립트:
BATCH_VALID_TYPES동기화 체크 + 원시 영어showToast()가드. - 13개 모든 새 타입에 대한 푸터, 랜딩 페이지, i18n 키 추가 (영어 소스).
2026-04-11, BCD 사진 URL 가져오기, 미리보기 끈적임, 확장 가능한 프리셋
- BCD: 사진 URL 필드가 이제 원격 이미지를 데이터 URL로 가져와 인라인하므로 내보내기 캔버스가 교차 출처 로드에 의해 오염되지 않음 (CORS가 없는 호스트에서 PDF/PNG 내보내기가 이제 작동).
- BCD 데스크톱 레이아웃: 미리보기 창이 이제
position: sticky이므로 사용자가 모든 섹션을 확장할 때 컨트롤이 라이브 미리보기의 가시성을 잃지 않고 자유롭게 스크롤됨. (이전엔 콘텐츠 + 레이아웃 + 옵션 확장이 Show-Fields를 화면 밖으로 밀어냄.) - BCD 프리셋 그리드는 이제 확장 가능, 처음에 12개 레이아웃 표시, "모든 레이아웃 표시" 토글이 있어 아이콘 선택기 UX 미러링.
- 태그라인 + QR 캡션 입력 다시 스킨됨: 쌓인 라벨 + 전체 너비 입력 (이전엔 좁은 150px 사이드카).
- 스캔 가능성 배지가
bottom: -24px에서-18px로 올림으로써 복사 버튼을 가리지 않음. - 배치 CSV 지침이 이제 Google Sheets, Excel, Numbers를 명시적으로 언급.
2026-04-08, 업종별 아이콘 라이브러리
- 24개 새 center-logo 아이콘 (96 → 120) 의료, 식음료, 기술, 금융 업종 대상.
- 10개 새 BCD 레이아웃 프리셋 (40 → 50): Concrete, Honey, Indigo, Luxe, Midnight II, Ocean II, Slate, Verdant, Wine, Candy.
- 캐시 버스터 전략 버그: 랜딩 페이지에서
page-init.js+lang-redirect.js의?v=파라미터가 누락되어 배포 후 오래된 모듈 로드를 일으킴. 수정.
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 필드에서 주소 블록 렌더링.
- 시각적 프리셋 썸네일, 각 프리셋 버튼이 이제 플레이스홀더 대신 미니 캔버스 렌더링.
2026-03-29, BCD 전면 개편 + 600 DPI 내보내기
- Business Card Designer 접을 수 있는 아코디언 섹션, 고정 모바일 미리보기, 고정 내보내기 푸터.
- 양방향 컬러 피커 동기화가 있는 헥스 컬러 입력, 컬러 팔레트 스와치.
- 4가지 사진 형태 (원형, 정사각형, 둥근, 육각형).
- 또렷한 인쇄 출력을 위해 내보내기 해상도 600 DPI로 올림.
- 케밥 메뉴: 템플릿 내보내기, 템플릿 가져오기, 놀라게 해줘, 카드 공유, 시트 인쇄 (10-up US Letter + A4).
- 사진 자르기를 정사각형으로 강제. 디자이너 열기 전 최소 데이터 가드.
- 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는 QR의 URL 해시에서 전체 바이오 페이지 렌더링, 백엔드 없음, 계정 없음, 추적 없음.
- /embed/ iframe 위젯 (부모 통합을 위한 postMessage API).
- /vs/ 경쟁사 비교 페이지 (26개 언어 변형).
- 25개 타입 인코더가 있는 @abundera/qr npm 패키지 + CLI.
2026-03-15, 96개 center-logo 아이콘 + 5개 새 언어
- 96개 center-logo 아이콘 (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개 키.
- 인쇄소 워크플로우용 EPS 내보내기 (임베디드 JPEG Level 2 PostScript, ASCII85 인코딩) (Illustrator, InDesign, CorelDRAW).
- 애니메이션 GIF 내보내기 (gif.js, 8 프레임 무지개).
- BCD SVG 내보내기, BCD JPG 내보내기.
2026-03-08, 플랫폼 감사 + 접근성 정비
버그 수정 스프린트: 3 CRITICAL + 7 HIGH + 10 MEDIUM 문제 수정.
- 모든 55개 랜딩 페이지의 CSP 인라인 스크립트 위반,
data-qr-preselectbody 속성으로 이동. - Service worker 오래된 캐시 버그, 쿼리 제거 키 → 전체 URL + stale-while-revalidate.
- 비-vCard 랜딩 페이지에서 BCD 알약을 클릭할 때 폼 타입 비동기화.
- 배경 이미지 가시성 (불투명도 슬라이더, 90% 알파의 모듈, 자르기 모달 라우팅).
- 자르기 모달 모바일 오버플로.
- 마우스 스크롤을 가로채는 휠 줌 (완전히 제거).
- 아바타 IP 누출 완화 (referrerpolicy + no-referrer 헤더).
- WiFi 배치 개방 네트워크 수정, MeCard 배치 필드 동등성, TOTP base32 검증.
- WCAG 2.5.8 터치 타겟 (거친 포인터에서 44×44 최소).
- 87개 장식 SVG에 aria-hidden 정비.
- prefers-reduced-motion 존중.
- Toast aria-live, focus-visible 링, 자르기 키보드 내비게이션, 오버플로 메뉴 Home/End 키.
- 폰트 프리로드 최적화.
2026-03-01, 15개 표준 기반 타입 + 스캔 가능성 검증기
- 15개 새 QR 타입: TOTP/2FA, Swiss QR-bill (필수 빨간 스위스 십자 오버레이 포함), PIX (브라질), PromptPay (태국), EMVCo 일반 가맹점, Lightning BOLT11, SSH 공개 키, OpenPGP 공개 키, WireGuard 구성, GS1 Digital Link, Spotify, Fediverse (Mastodon/Bluesky/Nostr/Matrix/Threads), Geo URI, Magnet, 전체 iCalendar.
- 스캔 가능성 검증기, 렌더링된 캔버스에서 jsQR을 실행하고 디코드 실패 시 경고.
- 인쇄 가능한 URL 폴백, 토글이 QR 아래에 목적지 URL을 평이한 텍스트로 추가.
- jsQR 게으르게 로드됨 (262 KB 적극적 페이로드 절약).
2026-02-22, 다중 정지 그라디언트 편집기 + 눈별 색상
- 다중 정지 그라디언트 편집기 (최대 5색).
- 눈별 독립적인 내부/외부 색상.
- 배경 이미지 QR 모드 (불투명도 슬라이더, EC=H 자동 강제).
- 미리보기 캔버스의 핀치 줌.
- QR 코드와 명함을 위한 Web Share API.
- 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 프레임 경계선이 1픽셀 어긋남, 배치 줌 미리보기의 XSS 취약점, 프리셋 로고 클릭 시
btoa()Latin1 오류.
2026-02-01, 초기 출시
- 20개 QR 타입, 40개 템플릿, 배치 CSV 생성 (500개 코드), Business Card Designer (300 DPI), 20개 언어, 420개 정적 랜딩 페이지로 Abundera QR 출시.
- 개인정보 우선 입장: 100% 클라이언트 측, 계정 없음, 추적 없음, 동적 리디렉션 코드 없음.