From 222c11c7fef41480a48cec90e4ae546602e6de7e Mon Sep 17 00:00:00 2001
From: Rocky <72559939+hkgood@users.noreply.github.com>
Date: Wed, 29 Jul 2026 21:04:42 +0800
Subject: [PATCH] docs(site): add App Store badges, SEO pages, and GSC
verification
Ship official store badges on READMEs and the site, expand discoverability
with FAQ/JSON-LD/llms.txt/content pages, and add the Search Console HTML
verification file so the live Pages site can be claimed.
---
CHANGELOG.md | 2 +
README.en.md | 14 ++
README.md | 12 ++
docs/assets/badges/appstore-en.svg | 46 ++++
docs/assets/badges/appstore-zh.svg | 29 +++
docs/assets/site-pages.css | 117 ++++++++++
docs/compare/index.html | 172 +++++++++++++++
docs/en/index.html | 130 ++++++++++++
docs/google6f435ae7291170cf.html | 1 +
docs/index.html | 330 +++++++++++++++++++++++++++--
docs/install/index.html | 156 ++++++++++++++
docs/llms.txt | 51 +++++
docs/mac-dictation/index.html | 130 ++++++++++++
docs/privacy.html | 12 +-
docs/privacy/index.html | 11 +-
docs/robots.txt | 22 ++
docs/sitemap.xml | 39 +++-
17 files changed, 1249 insertions(+), 25 deletions(-)
create mode 100644 docs/assets/badges/appstore-en.svg
create mode 100644 docs/assets/badges/appstore-zh.svg
create mode 100644 docs/assets/site-pages.css
create mode 100644 docs/compare/index.html
create mode 100644 docs/en/index.html
create mode 100644 docs/google6f435ae7291170cf.html
create mode 100644 docs/install/index.html
create mode 100644 docs/llms.txt
create mode 100644 docs/mac-dictation/index.html
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f508abe..1f5e210 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
+- **App Store download badges**: official badges on bilingual READMEs (hero + Get sections) and the website, with China-store `/cn/` links for Chinese and regionless App Store links for English. / **App Store 下载徽章**:中英文 README(顶部与获取区)与官网挂载官方徽章;中文链 `/cn/`,英文用无地区链接。
+- **Website SEO & AI discovery**: richer meta/JSON-LD/FAQ, `llms.txt`, expanded sitemap, English landing, plus install / compare / Mac-dictation content pages. / **官网 SEO 与 AI 发现**:强化 meta/JSON-LD/FAQ、`llms.txt`、sitemap,并新增英文落地页与安装 / 对比 / Mac 听写专题页。
- **Context-aware polish safeguards**: polish can use a redacted cursor-neighborhood snapshot for natural continuation, validates protected terms and identifiers, retries once, and falls back to a conservative local cleanup when needed. / **上下文润色护栏**:润色可使用经截断脱敏的光标附近文字自然衔接,并校验受保护词与标识符;失败时重试一次,仍不合格则降级为本地保守清理。
- **Pause-aware chunk polish**: chunked ASR carries detected silence boundaries into the polish request while keeping previews and final output marker-free. / **分块停顿感知润色**:分块 ASR 将检测到的静音边界传入润色请求,实时预览与最终输出均不会显示内部标记。
- **True streaming cloud ASR**: Bailian, Volcengine, and OpenAI Realtime use one utterance-level WebSocket with live partials; Volcengine enables official two-pass (`enable_nonstream`) so interim text stays on-screen while definite ASR feeds polish. / **真流式云端 ASR**:百炼、火山与 OpenAI Realtime 按整句长连接推流并实时上屏;火山开启官方二遍识别(`enable_nonstream`),interim 仅上屏,definite 再送润色。
diff --git a/README.en.md b/README.en.md
index 98513c6..4379914 100644
--- a/README.en.md
+++ b/README.en.md
@@ -12,6 +12,12 @@ Voice input for iPhone, iPad, and Mac. Speak in any app — polished text lands
[Website](https://hkgood.github.io/OSGKeyboard/) · [中文 README](./README.md) · [Privacy Policy](https://hkgood.github.io/OSGKeyboard/privacy/)
+
+
+
+
+
+
---
## Why OSGKeyboard
@@ -52,6 +58,14 @@ Speech is transcribed on-device by default. Polish sends **text only** — the t
---
+## Get the app
+
+**App Store (recommended)**
+
+
+
+
+
## Build from source
Requires macOS with **Xcode 26** and [XcodeGen](https://github.com/yonaskolb/XcodeGen).
diff --git a/README.md b/README.md
index f245d1b..b732f11 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,12 @@
[官网](https://hkgood.github.io/OSGKeyboard/) · [English](./README.en.md) · [隐私政策](https://hkgood.github.io/OSGKeyboard/privacy/)
+
+
+
+
+
+
---
## 为什么用它
@@ -59,6 +65,12 @@
## 获取
+**App Store(推荐)**
+
+
+
+
+
**从源码构建**(需 macOS + Xcode 26):
```bash
diff --git a/docs/assets/badges/appstore-en.svg b/docs/assets/badges/appstore-en.svg
new file mode 100644
index 0000000..072b425
--- /dev/null
+++ b/docs/assets/badges/appstore-en.svg
@@ -0,0 +1,46 @@
+
+ Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/badges/appstore-zh.svg b/docs/assets/badges/appstore-zh.svg
new file mode 100644
index 0000000..e3f29cd
--- /dev/null
+++ b/docs/assets/badges/appstore-zh.svg
@@ -0,0 +1,29 @@
+
+ Download_on_the_App_Store_Badge_CNSC_RGB_blk_092917
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/site-pages.css b/docs/assets/site-pages.css
new file mode 100644
index 0000000..3b94f5d
--- /dev/null
+++ b/docs/assets/site-pages.css
@@ -0,0 +1,117 @@
+:root {
+ --bg: #f7f7f5;
+ --bg-elevated: #ffffff;
+ --bg-soft: #efefec;
+ --text: #121214;
+ --text-2: #5a5a62;
+ --text-3: #8e8e96;
+ --line: rgba(18, 18, 20, 0.10);
+ --accent: #2f9a52;
+ --nav: rgba(247, 247, 245, 0.9);
+ --max: 760px;
+ --font: "Outfit", -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Noto Sans SC", sans-serif;
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --bg: #0a0a0b;
+ --bg-elevated: #131316;
+ --bg-soft: #18181b;
+ --text: #f4f4f2;
+ --text-2: #a8a8b0;
+ --text-3: #6f6f78;
+ --line: rgba(255, 255, 255, 0.09);
+ --accent: #4cc46e;
+ --nav: rgba(10, 10, 11, 0.9);
+ }
+}
+* { box-sizing: border-box; }
+html { scroll-behavior: smooth; }
+body {
+ margin: 0;
+ font-family: var(--font);
+ background: var(--bg);
+ color: var(--text);
+ line-height: 1.65;
+ -webkit-font-smoothing: antialiased;
+}
+a { color: var(--accent); text-decoration: none; }
+a:hover { text-decoration: underline; }
+.wrap { width: min(100% - 2rem, var(--max)); margin-inline: auto; }
+.nav {
+ position: sticky; top: 0; z-index: 20;
+ backdrop-filter: blur(14px);
+ background: var(--nav);
+ border-bottom: 1px solid var(--line);
+}
+.nav-inner {
+ display: flex; align-items: center; justify-content: space-between;
+ gap: 1rem; padding: 0.85rem 0; width: min(100% - 2rem, 1120px); margin-inline: auto;
+}
+.brand { display: inline-flex; align-items: center; gap: 0.55rem; color: var(--text); font-weight: 700; text-decoration: none; }
+.brand img { width: 28px; height: 28px; border-radius: 7px; }
+.nav-links { display: flex; flex-wrap: wrap; gap: 0.85rem 1.1rem; font-size: 0.9rem; font-weight: 500; }
+.nav-links a { color: var(--text-2); text-decoration: none; }
+.nav-links a:hover { color: var(--text); }
+main { padding: 2.5rem 0 4rem; }
+.eyebrow {
+ display: inline-flex; align-items: center; gap: 0.35rem;
+ margin: 0 0 0.75rem; font-size: 0.8rem; font-weight: 600;
+ letter-spacing: 0.04em; text-transform: uppercase; color: var(--accent);
+}
+h1 {
+ margin: 0 0 0.85rem;
+ font-size: clamp(1.9rem, 5vw, 2.75rem);
+ line-height: 1.15; letter-spacing: -0.03em;
+}
+.lead { margin: 0 0 1.5rem; color: var(--text-2); font-size: 1.08rem; }
+.store-badge { display: inline-flex; line-height: 0; margin: 0.25rem 0 1.5rem; }
+.store-badge img { height: 44px; width: auto; display: block; }
+.store-badge:hover { opacity: 0.9; }
+h2 { margin: 2.25rem 0 0.75rem; font-size: 1.35rem; letter-spacing: -0.02em; }
+h3 { margin: 1.4rem 0 0.45rem; font-size: 1.08rem; }
+p, li { color: var(--text-2); }
+ul, ol { padding-left: 1.2rem; }
+li { margin: 0.35rem 0; }
+.card {
+ background: var(--bg-elevated);
+ border: 1px solid var(--line);
+ border-radius: 16px;
+ padding: 1.1rem 1.2rem;
+ margin: 1rem 0;
+}
+.card strong { color: var(--text); }
+table {
+ width: 100%; border-collapse: collapse; font-size: 0.92rem;
+ margin: 1rem 0 0.5rem; background: var(--bg-elevated);
+ border: 1px solid var(--line); border-radius: 12px; overflow: hidden;
+}
+th, td { padding: 0.7rem 0.75rem; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
+th { background: var(--bg-soft); color: var(--text); font-weight: 600; }
+tr:last-child td { border-bottom: none; }
+.note { font-size: 0.88rem; color: var(--text-3); }
+.cta-row { display: flex; flex-wrap: wrap; gap: 0.75rem 1rem; align-items: center; margin: 1.25rem 0; }
+.btn {
+ display: inline-flex; align-items: center; gap: 0.35rem;
+ padding: 0.65rem 1rem; border-radius: 999px; font-weight: 600;
+ font-size: 0.92rem; text-decoration: none; border: 1px solid var(--line);
+ color: var(--text); background: var(--bg-elevated);
+}
+.btn:hover { text-decoration: none; background: var(--bg-soft); }
+.btn-primary { background: var(--accent); color: #fff; border-color: transparent; }
+.btn-primary:hover { opacity: 0.92; background: var(--accent); }
+footer {
+ border-top: 1px solid var(--line);
+ padding: 1.4rem 0 2rem;
+ color: var(--text-3);
+ font-size: 0.88rem;
+}
+.footer-inner {
+ width: min(100% - 2rem, 1120px); margin-inline: auto;
+ display: flex; flex-wrap: wrap; gap: 0.75rem 1.25rem;
+ justify-content: space-between; align-items: center;
+}
+.footer-links { display: flex; flex-wrap: wrap; gap: 0.75rem 1rem; }
+.footer-links a { color: var(--text-2); text-decoration: none; }
+.footer-links a:hover { color: var(--text); }
+.lang-switch { font-size: 0.9rem; margin-bottom: 1rem; color: var(--text-3); }
+.lang-switch a { margin-right: 0.75rem; }
diff --git a/docs/compare/index.html b/docs/compare/index.html
new file mode 100644
index 0000000..6c3b8ff
--- /dev/null
+++ b/docs/compare/index.html
@@ -0,0 +1,172 @@
+
+
+
+
+
+ OSGKeyboard vs Typeless vs Superwhisper · 开源听写对比
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
中文 English
+
+
+ 产品对比
+ OSGKeyboard 和常见听写工具比什么?
+ 如果你在找 Typeless 替代 、Superwhisper 平替 ,或想要「本地免费 + 自带 Key 润色」的开源方案,下面按维度对照。
+
+
+
+
+
+
+ 价格与功能据各产品公开说明整理,可能更新,以官方为准。
+
+ 什么时候选 OSGKeyboard
+
+ 不想再开一份「听写订阅」,已有 DeepSeek / OpenAI 等额度
+ 默认希望录音留在设备上,隐私路径可审计(开源)
+ 同时需要 iPhone 键盘 与 Mac 全局听写
+ 接受源码可见许可(个人学习 / 非商用本地使用;商用需授权)
+
+
+ 什么时候可能不适合
+
+ 需要 Windows 客户端
+ 希望完全托管、零配置云端识别(闭源 SaaS 更省心)
+ 商用分发但未取得商业许可
+
+
+
+
+
+
+
+
+ Compare
+ OSGKeyboard vs Typeless, Superwhisper, Openless
+ Looking for a Typeless alternative or Superwhisper alternative that is open, free locally, and BYOK-friendly? Here is a straight comparison.
+
+
+
+
+
+
+ Features and prices from public pages; verify with each vendor.
+
+ Choose OSGKeyboard when you want
+
+ No second dictation subscription — reuse LLM credits you already buy
+ On-device audio by default and auditable source
+ Both an iOS keyboard and Mac global hotkey
+
+
+ Maybe not if you need
+
+ Windows
+ Fully managed cloud ASR with zero setup
+ Commercial redistribution without a license
+
+
+
+
+
+
+
+
diff --git a/docs/en/index.html b/docs/en/index.html
new file mode 100644
index 0000000..887d78d
--- /dev/null
+++ b/docs/en/index.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+ OSGKeyboard — Free Open-Source Voice Keyboard for iPhone, iPad & Mac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Free · Open · Cross-platform
+
Speak it. It's typed.
+
OSGKeyboard is a free, open-source voice keyboard for iPhone, iPad, and Mac. Dictate in any app; on-device recognition stays private by default. Bring your own API key for AI polish — skip another dictation subscription.
+
+
+
+
+
+
+
+
+
+
Why people switch to OSGKeyboard
+
+
Works everywhere Messages, Notes, Notion, Cursor, Mail, WeChat — wherever the cursor is.
+
On-device by default Local ASR on iOS; optional local models on Mac. Cloud only when you opt in.
+
BYOK polish Use DeepSeek, OpenAI, Anthropic, OpenRouter, or any compatible endpoint.
+
Phone + Mac Custom keyboard on iOS/iPadOS; hold Option for global Mac dictation.
+
+
+
Who it is for
+
+ Users looking for a Typeless or Superwhisper alternative without another subscription
+ People who want privacy-first dictation that does not upload audio by default
+ Developers and power users who already pay for LLM APIs and want BYOK
+ Anyone who needs the same voice workflow on iPhone and Mac
+
+
+
Get started
+
+ Install from the App Store .
+ On iOS: enable the keyboard and Full Access. On Mac: grant Microphone + Accessibility.
+ Speak — text lands at the cursor. Add an API key only if you want AI polish.
+
+
Full steps: Install guide . Feature deep-dive: Mac global dictation . Side-by-side: Compare products .
+
+
Download
+
+
+
+
+
+
+
+
+
diff --git a/docs/google6f435ae7291170cf.html b/docs/google6f435ae7291170cf.html
new file mode 100644
index 0000000..b909446
--- /dev/null
+++ b/docs/google6f435ae7291170cf.html
@@ -0,0 +1 @@
+google-site-verification: google6f435ae7291170cf.html
diff --git a/docs/index.html b/docs/index.html
index 6d8e087..f2f0cb2 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -3,34 +3,130 @@
- OSGKeyboard — 开口即文字 · iOS & Mac 语音输入
-
-
+ OSGKeyboard — 开口即文字 · iOS & Mac 语音输入 / 听写键盘
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
@@ -261,10 +357,68 @@
.hero-cta {
display: flex;
flex-wrap: wrap;
+ align-items: center;
justify-content: center;
gap: 0.7rem;
margin-bottom: 1.4rem;
}
+ .store-badge {
+ display: inline-flex;
+ line-height: 0;
+ border-radius: 8px;
+ transition: opacity 0.15s ease, transform 0.15s ease;
+ }
+ .store-badge:hover { opacity: 0.9; transform: translateY(-1px); }
+ .store-badge img {
+ height: 44px;
+ width: auto;
+ display: block;
+ }
+ .download-block {
+ text-align: center;
+ padding: 3.5rem 0 1rem;
+ }
+ .download-block .store-badge { margin: 0.4rem 0 1rem; }
+ .download-block .store-badge img { height: 52px; }
+ .faq-list {
+ max-width: 720px;
+ margin: 0 auto;
+ display: grid;
+ gap: 0.85rem;
+ }
+ .faq-item {
+ background: var(--bg-elevated);
+ border: 1px solid var(--line);
+ border-radius: 16px;
+ padding: 1.05rem 1.2rem;
+ }
+ .faq-item h3 {
+ margin: 0 0 0.45rem;
+ font-size: 1.02rem;
+ font-weight: 600;
+ }
+ .faq-item p {
+ margin: 0;
+ color: var(--text-2);
+ font-size: 0.95rem;
+ }
+ .resource-links {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 0.75rem 1.25rem;
+ margin-top: 1.25rem;
+ font-size: 0.92rem;
+ }
+ .resource-links a { color: var(--accent); font-weight: 500; }
+ .resource-links a:hover { text-decoration: underline; }
+ .nav-link-text {
+ color: var(--text-2);
+ font-size: 0.9rem;
+ font-weight: 500;
+ text-decoration: none;
+ }
+ .nav-link-text:hover { color: var(--text); }
.hero-meta {
display: flex;
flex-wrap: wrap;
@@ -671,6 +825,8 @@
contrast
+ 安装
+ 对比
code
GitHub
@@ -691,9 +847,8 @@
开口即文字
免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。
+
+
+
+
+
常见问题
+
关于免费、隐私、设备和替代方案的短答。
+
+
+
+ OSGKeyboard 是免费的吗?
+ 是。本地识别与核心听写免费。云端 AI 润色用你自己的 API Key(BYOK),不另收听写订阅。
+
+
+ 语音会上传到你们的服务器吗?
+ 默认不会。iOS 走端侧识别;只有你主动开云端引擎时,音频才发往你配置的服务商。润色默认只发文字。
+
+
+ 支持哪些设备?
+ iPhone / iPad 自定义键盘,以及 Mac 菜单栏全局听写(按住 Option)。需 iOS / iPadOS / macOS 26+。
+
+
+ 和 Typeless、Superwhisper 有什么不同?
+ 开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。详见对比页。
+
+
+
+
+
+
+
+
+
+
+
立即下载
+
App Store 一键安装;也可从源码自行构建。
+
+
+
+
+
+