diff --git a/README.md b/README.md
index 4d74271..7398535 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,12 @@
Turn visibility signals into growth decisions from one open-source workspace.
+
+
Join the OpenCMO community
+

+
Questions, ideas, or feedback? Scan with WeChat to join our group chat.
+
+
---
## Real Production Examples
diff --git a/README_es.md b/README_es.md
index c75edcb..c1948a1 100644
--- a/README_es.md
+++ b/README_es.md
@@ -33,6 +33,12 @@
Un solo workspace para monitoreo, reportes, aprobaciones y contexto competitivo.
+
+
Únete a la comunidad de OpenCMO
+

+
¿Preguntas, ideas o comentarios? Escanea el QR con WeChat para unirte a nuestro grupo.
+
+
---
## Ejemplos de Produccion Reales
diff --git a/README_ja.md b/README_ja.md
index e103324..a28e4a1 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -33,6 +33,12 @@
監視、レポート、承認、競合文脈を1つの画面で確認できます。
+
+
OpenCMO コミュニティに参加
+

+
ご質問・ご意見・フィードバックは、WeChat でQRを読み取ってグループにご参加ください。
+
+
---
## 本番環境の実例
diff --git a/README_ko.md b/README_ko.md
index b963420..415522a 100644
--- a/README_ko.md
+++ b/README_ko.md
@@ -33,6 +33,12 @@
모니터링, 리포트, 승인, 경쟁 맥락을 하나의 화면에서 봅니다.
+
+
OpenCMO 커뮤니티 참여
+

+
질문, 아이디어, 피드백이 있으신가요? WeChat으로 QR을 스캔해 그룹에 참여하세요.
+
+
---
## 실제 프로덕션 사례
diff --git a/README_zh.md b/README_zh.md
index 967e86b..c5db04e 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -33,6 +33,12 @@
在一个开源工作区里,把可见性信号变成增长决策。
+
+
加入 OpenCMO 交流群
+

+
有任何问题、想交流意见?用微信扫码进群沟通。
+
+
---
## 真实生产示例
diff --git a/assets/community-qr.png b/assets/community-qr.png
new file mode 100644
index 0000000..78cae8c
Binary files /dev/null and b/assets/community-qr.png differ
diff --git a/frontend/public/contact-qr.README.md b/frontend/public/contact-qr.README.md
index 9e87269..ac66baf 100644
--- a/frontend/public/contact-qr.README.md
+++ b/frontend/public/contact-qr.README.md
@@ -1,3 +1,11 @@
-Real WeChat QR is at `contact-qr.png` (480x480, auto-cropped to the QR + quiet zone).
-To swap: overwrite `contact-qr.png` with a new image, or change `QR_ASSET` in
+The asset `contact-qr.png` is now the OpenCMO WeChat GROUP QR card (portrait,
+dark background that already includes a title and the QR with quiet zone).
+
+To swap it later, overwrite BOTH of these with the new exported PNG:
+- `frontend/public/contact-qr.png`
+- `assets/community-qr.png` (repo root, used by the READMEs)
+
+The widget renders the card full-bleed and undistorted (`w-full h-auto`), so
+export the new image at the same portrait aspect ratio. If you change the file
+name, also update `QR_ASSET` in
`frontend/src/components/FloatingContactQR.tsx`.
diff --git a/frontend/public/contact-qr.png b/frontend/public/contact-qr.png
index f6ba4ce..78cae8c 100644
Binary files a/frontend/public/contact-qr.png and b/frontend/public/contact-qr.png differ
diff --git a/frontend/src/components/FloatingContactQR.tsx b/frontend/src/components/FloatingContactQR.tsx
index dd8938d..0d658e4 100644
--- a/frontend/src/components/FloatingContactQR.tsx
+++ b/frontend/src/components/FloatingContactQR.tsx
@@ -180,14 +180,14 @@ export function FloatingContactQR() {
{t("contactQR.subheading")}
-
diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts
index 4655ee2..e6a4c6f 100644
--- a/frontend/src/i18n/locales/en.ts
+++ b/frontend/src/i18n/locales/en.ts
@@ -2013,10 +2013,10 @@ export const en = {
"monitors.addAnotherDesc": "Add another URL, locale, or schedule for this project without leaving the page.",
// Floating contact QR widget
- "contactQR.pillLabel": "Add me on WeChat",
- "contactQR.heading": "Scan to connect on WeChat",
- "contactQR.subheading": "Scan the QR with WeChat to message us directly.",
- "contactQR.imageAlt": "WeChat contact QR code",
+ "contactQR.pillLabel": "Join our group",
+ "contactQR.heading": "Join the OpenCMO group",
+ "contactQR.subheading": "Questions or feedback? Scan with WeChat to join our group chat.",
+ "contactQR.imageAlt": "OpenCMO WeChat group QR code",
"contactQR.close": "Close",
// Unlock custom plan CTA + modal
diff --git a/frontend/src/i18n/locales/es.ts b/frontend/src/i18n/locales/es.ts
index 1e4ac4d..95e8c40 100644
--- a/frontend/src/i18n/locales/es.ts
+++ b/frontend/src/i18n/locales/es.ts
@@ -1059,10 +1059,10 @@ export const es: Partial> = {
"verify.missingUser": "Falta contexto de verificación",
"verify.missingUserBody": "Vuelve a registrarte para recibir un código nuevo.",
// Floating contact QR widget
- "contactQR.pillLabel": "Agrégame en WeChat",
- "contactQR.heading": "Conectar en WeChat",
- "contactQR.subheading": "Escanea el QR con WeChat para escribirnos directamente.",
- "contactQR.imageAlt": "Código QR de contacto en WeChat",
+ "contactQR.pillLabel": "Unirse al grupo",
+ "contactQR.heading": "Únete al grupo de OpenCMO",
+ "contactQR.subheading": "¿Preguntas o comentarios? Escanea el QR con WeChat para unirte a nuestro grupo.",
+ "contactQR.imageAlt": "Código QR del grupo de WeChat de OpenCMO",
"contactQR.close": "Cerrar",
// Unlock custom plan CTA + modal
diff --git a/frontend/src/i18n/locales/ja.ts b/frontend/src/i18n/locales/ja.ts
index df09a41..7fa2a2f 100644
--- a/frontend/src/i18n/locales/ja.ts
+++ b/frontend/src/i18n/locales/ja.ts
@@ -1122,10 +1122,10 @@ export const ja: Partial> = {
"verify.missingUser": "確認情報が不足しています",
"verify.missingUserBody": "もう一度サインアップしてコードを取得してください。",
// Floating contact QR widget
- "contactQR.pillLabel": "WeChatで追加",
- "contactQR.heading": "WeChatで連絡",
- "contactQR.subheading": "WeChatでQRをスキャンすると、すぐにメッセージを送れます。",
- "contactQR.imageAlt": "WeChat連絡QRコード",
+ "contactQR.pillLabel": "グループに参加",
+ "contactQR.heading": "QRでグループに参加",
+ "contactQR.subheading": "ご質問・ご意見は、WeChatでQRを読み取ってグループにご参加ください。",
+ "contactQR.imageAlt": "OpenCMO WeChatグループQRコード",
"contactQR.close": "閉じる",
// Unlock custom plan CTA + modal
diff --git a/frontend/src/i18n/locales/ko.ts b/frontend/src/i18n/locales/ko.ts
index 75bbdc2..84dcba0 100644
--- a/frontend/src/i18n/locales/ko.ts
+++ b/frontend/src/i18n/locales/ko.ts
@@ -1059,10 +1059,10 @@ export const ko: Partial> = {
"verify.missingUser": "인증 정보가 없습니다",
"verify.missingUserBody": "새 코드를 받으려면 다시 가입해 주세요.",
// Floating contact QR widget
- "contactQR.pillLabel": "위챗으로 추가",
- "contactQR.heading": "위챗으로 연결하기",
- "contactQR.subheading": "위챗으로 QR을 스캔하면 바로 메시지를 보낼 수 있어요.",
- "contactQR.imageAlt": "위챗 연락 QR 코드",
+ "contactQR.pillLabel": "그룹 참여",
+ "contactQR.heading": "QR로 그룹 참여",
+ "contactQR.subheading": "질문이나 피드백이 있으신가요? WeChat으로 QR을 스캔해 그룹에 참여하세요.",
+ "contactQR.imageAlt": "OpenCMO WeChat 그룹 QR 코드",
"contactQR.close": "닫기",
// Unlock custom plan CTA + modal
diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts
index 5e8ef04..00545aa 100644
--- a/frontend/src/i18n/locales/zh.ts
+++ b/frontend/src/i18n/locales/zh.ts
@@ -1991,10 +1991,10 @@ export const zh: Partial> = {
"verify.missingUser": "缺少验证上下文",
"verify.missingUserBody": "请重新走一遍注册流程以获取新的验证码。",
// Floating contact QR widget
- "contactQR.pillLabel": "加我微信",
- "contactQR.heading": "扫码加我微信",
- "contactQR.subheading": "用微信扫码即可与我们直接沟通。",
- "contactQR.imageAlt": "微信联系二维码",
+ "contactQR.pillLabel": "进群交流",
+ "contactQR.heading": "扫码进群交流",
+ "contactQR.subheading": "有任何问题、想交流意见?用微信扫码加入我们的群聊。",
+ "contactQR.imageAlt": "OpenCMO 微信交流群二维码",
"contactQR.close": "关闭",
// Unlock custom plan CTA + modal