Compare commits

...
8 Commits
Author SHA1 Message Date
qingjie.du 9030d98fcd docs: add deployment script and GEO audit reports
- Add deploy-html.sh for quick HTML deployment
- Add brand-presence-guide.md for brand authority setup
- Add GEO audit reports from GEOWizard
2026-06-21 12:24:33 +09:00
qingjie.du b401940c4e feat: add Japanese version images for ContextWizard
- Add cw-banner-jp.png for Japanese hero banner
- Add screen-search-640-400-jp.jpg for Japanese search screenshot
2026-06-21 12:24:22 +09:00
qingjie.du b31fee0a14 docs: enhance llms.txt with better descriptions
- Add more detailed product descriptions
- Add advanced integration guide link
- Add passkey benefits page link
- Add privacy policy link
- Improve overall structure for AI crawlers
2026-06-21 12:24:02 +09:00
qingjie.du 97a3a007e6 feat: add language selector with i18n support
- Add createLanguageSelector function to amipro_utils.js
- Add language selector CSS styles to modern.css and core.css
- Support EN/JA language switching with localStorage persistence
2026-06-21 12:23:26 +09:00
qingjie.du d06b4cf629 feat: add static HTML content for GEO
- merits.html: Passkey vs Password security comparison table
- passkey.html: How Passkeys Work steps and business benefits
- fido2_top.html: Why Choose amiPro Passkey Hub section
- contextwizard_top.html: What is ContextWizard section
- contextwizard_install.html: What You Get After Installation section
2026-06-21 12:23:18 +09:00
qingjie.du efef260de6 feat: add FAQPage schema for AI citability
- fido2_top.html: 5 FAQ questions about Passkey Hub
- merits.html: 4 FAQ questions about passkey benefits
- passkey.html: 4 FAQ questions about passkey basics
2026-06-21 12:23:09 +09:00
qingjie.du 8076fc8dd1 feat: enhance Organization schema with sameAs links
- Add GitHub organization URL
- Add Chrome Web Store link
- Add contactPoint schema for sales email
2026-06-21 12:22:53 +09:00
qingjie.du 506989660b fix: add canonical URLs, unique meta descriptions, and hreflang tags
- Add canonical URL to all pages
- Fix duplicate meta descriptions across 4 pages
- Add hreflang tags for en/ja/zh-CN/x-default
- Remove llms.txt rewrite rule causing 500 error in .htaccess
2026-06-21 12:22:24 +09:00
22 changed files with 4325 additions and 482 deletions
-1
View File
@@ -10,7 +10,6 @@ RewriteRule ^(.*)$ https://amipro.me/$1 [L,R=301]
# === Serve static robots.txt and sitemap.xml directly (bypass WordPress) ===
RewriteRule ^robots\.txt$ /robots.txt [L]
RewriteRule ^sitemap\.xml$ /sitemap.xml [L]
RewriteRule ^llms\.txt$ /llms.txt [L]
# === Security Headers ===
<IfModule mod_headers.c>
+236
View File
@@ -0,0 +1,236 @@
AI ASSISTANT INSTRUCTION: UPDATE HTML FOR GENERATIVE ENGINE OPTIMIZATION (GEO)
[ROLE & TASK]
You are an expert Frontend Engineer and SEO/GEO (Generative Engine Optimization) Specialist.
Your task is to refactor the landing page HTML code for a local-first Chrome extension called "ContextWizard". The goal is to make the content highly structured, explicit, and declarative so that AI search engines (like ChatGPT Browse, Perplexity, Claude, and Gemini) can perfectly parse, summarize, and cite this tool when users ask production-related questions.
Please apply the following four specific updates to the target HTML file (contextwizard_top.html):
UPDATE 1: Add Structured Schema Markup in
Insert this standard JSON-LD Schema snippet into the <head> section of the HTML to help AI bots understand the exact category, capabilities, and system requirements of the application instantly.
HTML
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "ContextWizard",
"operatingSystem": "Windows, macOS, Linux",
"applicationCategory": "BrowserApplication",
"browserRequirements": "Requires Google Chrome, Microsoft Edge, or Chromium-based browsers",
"description": "A local-first browser extension designed for multitaskers and information workers to seamlessly capture, search, bookmark, and transfer AI chat histories across 10+ major platforms locally.",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
</script>
UPDATE 2: Refactor Hero Section H1 & Subtitle for Explicit Category Anchor
Locate the main Hero Section. Keep the poetic tagline but inject explicit product category keywords ("AI Chat Manager", "Prompt Organizer Extension") so AI crawlers can match user intent.
[Old H1/Subtitle Area (Approximate)]:
H1: ContextWizard
Subtitle: The universal context layer for your AI chats. Capture, bookmark, search, and transfer knowledge across platforms.
[Replace With]:
HTML
<h1>ContextWizard</h1>
<h2>The Ultimate All-in-One AI Chat Manager & Prompt Organizer Extension</h2>
<p>The universal context layer for your AI chats. Automatically capture, bookmark, search, and transfer knowledge across 10+ AI platforms seamlessly with zero configuration.</p>
UPDATE 3: Enhance "Local-First / Privacy" Section with Structured Assertions
Locate the section talking about "Local-first: A unified conversation manager...". Refactor the text or bullet points into highly explicit, declarative statements that match user privacy-focused queries.
[Replace or Append to the Privacy/Local-first Section]:
HTML
<div class="geo-privacy-assertions">
<h3>Local-First & Privacy-Centric Architecture</h3>
<ul>
<li><strong>Zero Cloud Uploads:</strong> All captured AI chat logs, transcripts, and custom prompt templates are fully encrypted and saved strictly inside your browser's local storage (<code>chrome.storage.local</code>).</li>
<li><strong>No Cloud Account & No API Keys Required:</strong> ContextWizard runs entirely out of the box via native DOM mutation observers. It does not require any third-party registration or OpenAI/Anthropic/DeepSeek API keys.</li>
<li><strong>100% GDPR & Privacy Compliant:</strong> Your confidential prompts, proprietary source codes, and business contexts remain completely offline and never touch external synchronization servers.</li>
</ul>
</div>
UPDATE 4: Rewrite FAQ Section into Direct Answer Blocks
Locate the "Frequently Asked Questions" section at the bottom of the page. Rewrite the answers into "Direct Assertion + Specific Features" format. This allows AI bots to directly extract these text blocks for "Direct Answers / Snippets" in AI search results.
[Replace the existing FAQ list with the following updated Q&A blocks]:
HTML
<div class="faq-section">
<h2>Frequently Asked Questions</h2>
<div class="faq-item">
<h3>How to copy a long ChatGPT thread into Claude without formatting issues?</h3>
<p><strong>To copy a long ChatGPT thread into Claude without markdown or UI formatting clutter, you can use ContextWizard's Context Copy feature.</strong> It automatically strips out platform-specific UI artifacts, extracts clean raw text transcripts from ChatGPT, and allows one-step copying, exporting, or transferring of full conversation contexts into Claude, Manus, Gemini, or other assistants.</p>
</div>
<div class="faq-item">
<h3>What is the best way to search through multiple AI platform histories at once?</h3>
<p><strong>The most efficient way to search through multiple AI platform histories at once is by using a local-first browser tool like ContextWizard.</strong> It builds a unified local index that allows full-text search across titles, summaries, and message bodies across 10+ major platforms (including ChatGPT, Claude, Gemini, Grok, DeepSeek, and Perplexity) simultaneously with granular platform filters.</p>
</div>
<div class="faq-item">
<h3>How to build a local knowledge base from AI chats safely?</h3>
<p><strong>ContextWizard turns your daily browsing history into a secure, searchable local text database.</strong> By capturing real-time conversations using platform-specific selectors, it aggregates scattered insights into a unified workspace on your PC, enabling power users to build an offline second brain from their AI interactions.</p>
</div>
<div class="faq-item">
<h3>How do I keep track of important conversations across different AI models?</h3>
<p><strong>ContextWizard's cross-platform bookmark feature allows you to link and save key moments across ChatGPT, Claude, and Gemini in a single place.</strong> It supports organizing bookmarks into draggable custom groups with full instant undo support, making it easy for multitaskers to jump back to any bookmarked conversation in its original web context with a single click.</p>
</div>
<div class="faq-item">
<h3>How can I safely reuse prompts without exposing sensitive data?</h3>
<p><strong>The built-in Prompt Editor in ContextWizard allows you to manage reusable prompt templates while safeguarding your privacy through auto-redaction.</strong> You can define custom redaction rules that automatically replace sensitive information—such as API keys, passwords, and private tokens—with placeholders before sending the prompt to any AI platform.</p>
</div>
</div>
[EXECUTION LOGIC]
Parse the existing contextwizard_top.html file.
Carefully merge the above updates into their respective blocks while preserving the existing CSS class names, tailwind utilities, and layout structures.
Ensure no original styling breaks. Output the updated clean HTML code.
================================================================================
VERIFICATION: GEO IMPACT ANALYSIS (2026-06-10)
================================================================================
DATA SOURCE: GA4 (Google Analytics 4) - chatgpt.com (ChatGPT 引用推荐)
- ChatGPT referral visits: 11 (占整体流量 6.8%)
- May 2026 spike: 从 0-1 跳升至 9 次
- 累计占比排名前列
GIT HISTORY: contextwizard_top.html
- 531021f (2025-11-18) New style and added ContextWizard pages ← 页面创建
- e0fe7b8 (2025-11-23) ContextWizard landing page done
- 82a8be4 (2026-04-02) GEO ← ★★★ 首次GEO优化
- 024ba06 (2026-06-10) GEO improved
- 5e3001a (2026-06-10) GEO improve v2
--------------------------------------------------------------------------------
TIMELINE CORRELATION
--------------------------------------------------------------------------------
2025-11 ~ 2026-03 无GEO → ChatGPT推荐 ≈ 0
2026-04-02 首次GEO优化提交 (82a8be4)
2026-05 ChatGPT推荐从0-1跳升至9次 ← ★★★ 效果显现
2026-06-10 今天继续强化GEO (GEO improved + GEO improve v2)
结论:约4周索引延迟后,ChatGPT推荐与GEO优化呈因果关联。
--------------------------------------------------------------------------------
WHAT THE INITIAL GEO COMMIT (82a8be4, Apr 2) DID
--------------------------------------------------------------------------------
1. TITLE改写
Old: "ContextWizard - amiPro"
New: "ContextWizard | AI Chat Backup & Search - Local-First Privacy | amiPro"
→ 明确包含产品类别关键词 "AI Chat Backup & Search"
2. META DESCRIPTION重写
Old: 单句描述
New: "ContextWizard automatically captures and organizes AI conversations
across ChatGPT, Claude, Gemini, Perplexity, and more. Local-first
encryption, full-text search, zero configuration. Free Chrome and
Edge extension by amiPro."
→ 显式列出支持的AI平台(ChatGPT排首位),含特性关键词和CTA
3. 结构化数据(Schema.org JSON-LD)
- FAQPage(3个问题,均含"ChatGPT"关键词问答)
- SoftwareApplication(类别、价格0、installUrl、特性列表)
→ ChatGPT搜索底层(Bing index)对FAQPage和SoftwareApplication
有高优先级抓取,直接用于生成推荐卡片
4. Open Graph / Twitter Card
→ 社交分享时展示完整标题+描述+图片,间接增强外链CTR
5. Canonical URL + hreflang(en, ja, x-default)
→ 明确语言版本,避免多语言重复内容扣分
6. Script标签添加 defer
→ 性能优化,提升Core Web Vitals(LCP/FID)
7. HERO标题重构
From: "Never lose an AI conversation again."
To: "The universal context indexer for your AI chats..."
→ 功能导向,含"context indexer"等关键词
8. 新增安装按钮(Chrome Store + Edge Store + 视频)
→ 降低用户行动成本,提高转化
9. 移除技术细节section → 替换为FAQ可视区块
→ 内容用户友好化,同时FAQ文本也被AI引擎索引
10. 新增footer(Privacy / Tokushoho / Contact)
→ 站点完整性信号
--------------------------------------------------------------------------------
WHY CHATGPT STARTED RECOMMENDING
--------------------------------------------------------------------------------
核心杠杆 - 三要素对齐了ChatGPT搜索的推荐偏好:
[1] FAQPage Schema + "ChatGPT"关键词
Question: "How to copy a long ChatGPT thread into Claude..."
→ ChatGPT搜索会优先索引FAQPage,且问题/答案中显式包含
"ChatGPT",触发相关性匹配
[2] SoftwareApplication Schema
- price: 0(免费工具优先推荐)
- installUrl: chrome.google.com(可直接安装)
- browserRequirements / applicationCategory(明确使用场景)
→ ChatGPT会把这类数据渲染为推荐卡片
[3] Meta description + 正文高频出现"ChatGPT"
description + hero + FAQ + feature list 中反复出现ChatGPT
→ 语义相关性信号强化
--------------------------------------------------------------------------------
"GEO improved" (024ba06, Jun 10) 做了什么
--------------------------------------------------------------------------------
1. FAQ答案从短句→长段(200+字符),提高摘录概率
2. FAQ从3题→5题,新增:
- "How do I keep track of important conversations across different AI models?"
- "How can I safely reuse prompts without exposing sensitive data?"
3. FAQ答案开头加粗(如 "<strong>To copy a long ChatGPT thread...</strong>")
→ 便于AI引擎提取direct answer
4. HERO结构微调(H1改回"ContextWizard" + 独立subtitle)
5. 隐私callout扩展为详细三条文(Zero Cloud, No API Keys, GDPR)
6. 增加强调结构(FAQ每个item的strong开头)
--------------------------------------------------------------------------------
"GEO improve v2" (5e3001a, Jun 10) 做了什么
--------------------------------------------------------------------------------
1. i18n消息新增Bookmark特性和Prompt Editor特性(中英日三语)
2. 新增两个特性卡片:
- Cross-Platform Bookmarks(书签跨平台管理)
- Prompt Editor & Privacy(提示词编辑与隐私保护)
3. 特性卡片在页面中间位置展示,增加内容密度和实体锚点
--------------------------------------------------------------------------------
EXPECTED NEXT WAVE (from today's GEO improve v2)
--------------------------------------------------------------------------------
- 索引延迟约2-4周 → 效果预计在 2026-07 上旬 GA4 数据中显现
- 新增的两个FAQ问题(bookmarks / prompt privacy)可能带来新的
长尾query匹配
- 中英日i18n字符串可能被多语言索引
================================================================================
SUMMARY
================================================================================
ChatGPT推荐从0-1跳升至9/11次(6.8%)的跃升可直接归因于
2026-04-02的首次GEO优化commit(82a8be4),核心杠杆是:
FAQPage Schema中"ChatGPT"显式问句
+ SoftwareApplication Schema标明免费工具属性
+ Meta/Hero高频平台关键词
三者对齐了ChatGPT联网搜索的推荐偏好,经过约4周的索引延迟后,
在5月触发流量跃升。这是GEO(Generative Engine Optimization)
在AI搜索渠道上的已验证有效案例。
@@ -0,0 +1,218 @@
{
"generated_at": "2026-06-21T09:01:21.925512",
"domain": "amipro.me",
"pages_audited": 10,
"site_checks": {
"crawler": {
"score": 100.0,
"robots_found": true,
"blocked_crawlers": [],
"allowed_crawlers": [],
"noindex": false,
"nofollow": false,
"issues": []
},
"llmstxt": {
"score": 94.0,
"found": true,
"url": "https://amipro.me/llms.txt",
"has_required_sections": true,
"link_count": 9,
"broken_links": [],
"issues": []
}
},
"brand_score": 0.0,
"pages": [
{
"filename": "contextwizard_install.html",
"url": "https://amipro.me/contextwizard_install.html",
"category": "product:contextwizard",
"weighted_total": 51.5,
"grade": "C+",
"scores": {
"citability": 49.9,
"content": 55.0,
"schema_markup": 20.0,
"technical": 90.0,
"platform": 42.2,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 281,
"issue_count": 27
},
{
"filename": "contextwizard_privacy_policy.html",
"url": "https://amipro.me/contextwizard_privacy_policy.html",
"category": "legal",
"weighted_total": 61.4,
"grade": "B",
"scores": {
"citability": 62.8,
"content": 80.0,
"schema_markup": 20.0,
"technical": 90.0,
"platform": 43.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 803,
"issue_count": 25
},
{
"filename": "contextwizard_tokushoho.html",
"url": "https://amipro.me/contextwizard_tokushoho.html",
"category": "legal",
"weighted_total": 43.6,
"grade": "C",
"scores": {
"citability": 27.8,
"content": 50.0,
"schema_markup": 20.0,
"technical": 90.0,
"platform": 43.0,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 71,
"issue_count": 29
},
{
"filename": "contextwizard_top.html",
"url": "https://amipro.me/contextwizard_top.html",
"category": "product:contextwizard",
"weighted_total": 57.6,
"grade": "C+",
"scores": {
"citability": 32.2,
"content": 55.0,
"schema_markup": 80.0,
"technical": 95.0,
"platform": 52.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 38,
"issue_count": 23
},
{
"filename": "fido2_top.html",
"url": "https://amipro.me/fido2_top.html",
"category": "product:passkey",
"weighted_total": 46.7,
"grade": "C",
"scores": {
"citability": 17.5,
"content": 45.0,
"schema_markup": 60.0,
"technical": 95.0,
"platform": 45.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 19,
"issue_count": 28
},
{
"filename": "index.html",
"url": "https://amipro.me/",
"category": "homepage",
"weighted_total": 62.8,
"grade": "B",
"scores": {
"citability": 46.5,
"content": 55.0,
"schema_markup": 90.0,
"technical": 95.0,
"platform": 47.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 31,
"issue_count": 24
},
{
"filename": "integration.html",
"url": "https://amipro.me/integration.html",
"category": "docs",
"weighted_total": 34.8,
"grade": "D",
"scores": {
"citability": 10.0,
"content": 45.0,
"schema_markup": 20.0,
"technical": 85.0,
"platform": 33.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 4,
"issue_count": 34
},
{
"filename": "integration_api.html",
"url": "https://amipro.me/integration_api.html",
"category": "docs",
"weighted_total": 34.8,
"grade": "D",
"scores": {
"citability": 10.0,
"content": 45.0,
"schema_markup": 20.0,
"technical": 85.0,
"platform": 33.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 4,
"issue_count": 34
},
{
"filename": "merits.html",
"url": "https://amipro.me/merits.html",
"category": "marketing",
"weighted_total": 33.6,
"grade": "D",
"scores": {
"citability": 8.4,
"content": 45.0,
"schema_markup": 20.0,
"technical": 80.0,
"platform": 33.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 2,
"issue_count": 36
},
{
"filename": "passkey.html",
"url": "https://amipro.me/passkey.html",
"category": "marketing",
"weighted_total": 33.6,
"grade": "D",
"scores": {
"citability": 8.4,
"content": 45.0,
"schema_markup": 20.0,
"technical": 80.0,
"platform": 33.8,
"brand_mentions": 0.0,
"crawler_access": 0.0,
"llms_txt": 0.0
},
"word_count": 2,
"issue_count": 36
}
]
}
File diff suppressed because it is too large Load Diff
+169
View File
@@ -0,0 +1,169 @@
# amiPro 品牌外部存在创建指南
## 目标
在主要平台建立品牌账号,然后在网站 Organization schema 的 sameAs 中添加链接,提升品牌权威信号(GEO 审计中此项权重 20%)。
---
## 1. GitHub Organization(优先级最高)
**为什么重要**:amiPro 有开源 SDK,GitHub 是技术品牌的核心阵地。
**步骤**:
1. 登录 GitHub → 右上角 "+" → "New organization"
2. 选择 Free 计划
3. Organization name: `amipro-llc`
4. 组织邮箱: `sales@amipro.me`
5. 上传 logo(favicon.ico 或专门的品牌 logo)
6. 填写 Description: "FIDO2 passkey infrastructure & AI privacy tooling. Open-source SDKs for JavaScript, iOS, Android."
7. 填写 Website: `https://amipro.me`
8. 创建后将现有开源仓库(dFido2Lib-ios 等)转移到此 organization
9. 在 README 中添加指向 amipro.me 的链接
**完成后在网站添加**:
```json
"https://github.com/amipro-llc"
```
---
## 2. LinkedIn Company Page(优先级高)
**为什么重要**:LinkedIn 是 B2B 品牌最权威的外部信号。
**步骤**:
1. 登录 LinkedIn → 左上角 "Work" 图标 → "Create a Company Page"
2. 选择 "Company" 类型
3. 填写:
- Company name: `amiPro, LLC`
- LinkedIn public URL: `amipro`
- Industry: `Computer Software`
- Company size: `2-10 employees`
- Company type: `Privately Held`
4. 上传 logo 和 banner 图
5. 填写 About: "amiPro builds FIDO2-certified passkey infrastructure and privacy-first AI tooling. Founded 2023, based in Tokyo, Japan."
6. 填写 Website: `https://amipro.me`
7. 添加公司位置: Shibuya-ku, Tokyo, Japan
8. 发布几条关于 Passkey 和 ContextWizard 的帖子
**完成后**:网站已有此链接 ✅
---
## 3. Crunchbase(优先级中)
**为什么重要**:Crunchbase 是 AI 系统识别公司实体的主要数据源。
**步骤**:
1. 访问 `https://www.crunchbase.com/` → "Claim Profile"
2. 搜索 "amiPro" 或 "amiPro LLC"
3. 如果没有,点击 "Add Organization"
4. 填写:
- Organization name: `amiPro, LLC`
- Short description: "B2B identity infrastructure and AI privacy platform"
- Headquarters: Tokyo, Japan
- Founded date: March 3, 2023
- Founders: (填写创始人姓名)
- Categories: Identity Management, Cybersecurity, AI
- Website: `https://amipro.me`
5. 验证邮箱(需要使用公司域名邮箱)
6. 完善公司详情:融资信息(如有)、员工数、技术栈
**完成后在网站添加**:
```json
"https://crunchbase.com/organization/amipro"
```
---
## 4. Product Hunt(优先级中)
**为什么重要**:技术产品的权威发布平台,AI 系统会引用。
**步骤**:
1. 访问 `https://www.producthunt.com/` → 登录
2. 点击 "Submit" → "Product"
3. 提交 ContextWizard:
- Product name: `ContextWizard`
- Tagline: "Local-first AI chat backup & search across 10+ platforms"
- Website: `https://amipro.me/contextwizard_top.html`
- Description: 详细产品描述
- Topics: Productivity, AI, Privacy, Browser Extensions
- Logo: 上传产品 logo
4. 选择发布日期(周二至周四效果最佳)
5. 邀请支持者在发布日投票和评论
**完成后在网站添加**:
```json
"https://producthunt.com/posts/contextwizard"
```
---
## 5. AlternativeTo(优先级中)
**为什么重要**:软件对比平台,AI 系统在回答"XXX 替代品"时会引用。
**步骤**:
1. 访问 `https://alternativeto.net/` → 登录
2. 搜索 ContextWizard
3. 如果不存在,点击 "Suggest Alternative"
4. 填写产品信息,标记为 "Free" 和 "Open Source"
5. 添加到相关替代品列表(如 ChatGPT 导出工具、AI 笔记工具等)
---
## 6. G2 / Capterra(优先级低)
**为什么重要**:B2B 软件评测平台,提升信任信号。
**步骤**:
1. 访问 `https://www.g2.com/` → "Claim Your Profile"
2. 搜索 "amiPro" 或 "Passkey Hub"
3. 如果不存在,提交新产品
4. 填写产品详情、定价、功能列表
5. 鼓励早期用户留下评价
---
## 7. Hacker News / Reddit(优先级低)
**为什么重要**:技术社区讨论增加品牌提及。
**步骤**:
- **Hacker News**: 发布产品公告(Show HN 格式)
- **Reddit**:
- r/netsec(Passkey 安全相关)
- r/privacy(ContextWizard 隐私相关)
- r/SideProject(产品展示)
- 发布有价值的技术内容,不要硬广
---
## 实施顺序建议
| 优先级 | 平台 | 预计时间 | 难度 |
|--------|------|---------|------|
| P0 | GitHub Organization | 30 分钟 | 低 |
| P0 | LinkedIn Company Page | 1 小时 | 低 |
| P1 | Crunchbase | 1-2 小时 | 中(需验证) |
| P1 | Product Hunt | 1 天(含准备) | 中 |
| P2 | AlternativeTo | 30 分钟 | 低 |
| P2 | G2 / Capterra | 1 小时 | 低 |
| P3 | Hacker News / Reddit | 持续运营 | 中 |
---
## 完成后更新网站
每个平台创建完成后,在 `index.html` 的 Organization schema 中添加 sameAs 链接:
```json
"sameAs": [
"https://www.linkedin.com/company/amipro",
"https://github.com/amipro-llc",
"https://crunchbase.com/organization/amipro",
"https://producthunt.com/posts/contextwizard",
"https://alternativeto.net/software/contextwizard/"
]
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+342 -45
View File
@@ -11,6 +11,44 @@
content="Step-by-step instructions to install the ContextWizard browser extension in Chrome, Edge, and other Chromium-based browsers."
/>
<link rel="canonical" href="https://amipro.me/contextwizard_install.html" />
<link rel="alternate" hreflang="en" href="https://amipro.me/contextwizard_install.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/contextwizard_install.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/contextwizard_install.html" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Install ContextWizard - amiPro, LLC" />
<meta property="og:description" content="Step-by-step instructions to install the ContextWizard browser extension in Chrome, Edge, and other Chromium-based browsers." />
<meta property="og:url" content="https://amipro.me/contextwizard_install.html" />
<meta property="og:site_name" content="amiPro, LLC" />
<meta property="og:image" content="https://amipro.me/files/og-contextwizard.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Install ContextWizard - amiPro, LLC" />
<meta name="twitter:description" content="Step-by-step instructions to install the ContextWizard browser extension in Chrome, Edge, and other Chromium-based browsers." />
<meta name="twitter:image" content="https://amipro.me/files/og-contextwizard.png" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Install ContextWizard - amiPro, LLC",
"description": "Step-by-step instructions to install the ContextWizard browser extension in Chrome, Edge, and other Chromium-based browsers.",
"url": "https://amipro.me/contextwizard_install.html",
"author": {
"@type": "Person",
"name": "amiPro Team"
},
"publisher": {
"@type": "Organization",
"name": "amiPro, LLC",
"url": "https://amipro.me"
},
"datePublished": "2025-01-15",
"dateModified": "2025-06-21"
}
</script>
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
@@ -113,8 +151,250 @@
}
</style>
<script>
const i18n_messages = new Map();
let lang_map;
lang_map = new Map();
lang_map.set('en', 'amiPro, LLC');
lang_map.set('ja', 'amiPro, LLC');
i18n_messages.set('nav_brand', lang_map);
lang_map = new Map();
lang_map.set('en', 'Privacy-first identity &amp; AI products');
lang_map.set('ja', 'プライバシーを重視したID・AIプロダクト');
i18n_messages.set('nav_tagline', lang_map);
lang_map = new Map();
lang_map.set('en', 'Back to ContextWizard');
lang_map.set('ja', 'ContextWizard に戻る');
i18n_messages.set('nav_back', lang_map);
lang_map = new Map();
lang_map.set('en', 'Contact support');
lang_map.set('ja', 'サポートに問い合わせ');
i18n_messages.set('nav_contact', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard');
lang_map.set('ja', 'ContextWizard');
i18n_messages.set('hero_eyebrow', lang_map);
lang_map = new Map();
lang_map.set('en', 'Install ContextWizard in your browser');
lang_map.set('ja', 'ブラウザに ContextWizard をインストール');
i18n_messages.set('hero_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Follow this guide to install the unpackaged ContextWizard extension in Chrome, Microsoft Edge, Brave, or any Chromium-based browser that supports developer mode extensions.');
lang_map.set('ja', 'このガイドに従って、Chrome、Microsoft Edge、Brave、または開発者モード拡張機能をサポートする Chromium ベースのブラウザに、パッケージ未処理の ContextWizard 拡張機能をインストールします。');
i18n_messages.set('hero_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'Works offline on your machine');
lang_map.set('ja', 'オフラインで動作');
i18n_messages.set('chip_offline', lang_map);
lang_map = new Map();
lang_map.set('en', 'No account required');
lang_map.set('ja', 'アカウント不要');
i18n_messages.set('chip_no_account', lang_map);
lang_map = new Map();
lang_map.set('en', 'Download ContextWizard ZIP');
lang_map.set('ja', 'ContextWizard ZIP をダウンロード');
i18n_messages.set('btn_download', lang_map);
lang_map = new Map();
lang_map.set('en', 'Read privacy policy');
lang_map.set('ja', 'プライバシーポリシーを読む');
i18n_messages.set('btn_privacy', lang_map);
lang_map = new Map();
lang_map.set('en', 'Step-by-step installation');
lang_map.set('ja', 'ステップバイステップのインストール');
i18n_messages.set('steps_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Download the ZIP file');
lang_map.set('ja', 'ZIP ファイルをダウンロード');
i18n_messages.set('step1_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Click <strong>Download ContextWizard ZIP</strong> above and save the file to a location you can find, such as your <em>Downloads</em> folder.');
lang_map.set('ja', '上の<strong>「ContextWizard ZIP をダウンロード」</strong>をクリックし、<em>ダウンロード</em>フォルダなど、見つけやすい場所にファイルを保存します。');
i18n_messages.set('step1_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'The ZIP contains the full extension source so your browser can run it in developer mode.');
lang_map.set('ja', 'ZIP には完全な拡張機能ソースが含まれており、ブラウザの開発者モードで実行できます。');
i18n_messages.set('step1_note', lang_map);
lang_map = new Map();
lang_map.set('en', 'Unzip the archive');
lang_map.set('ja', 'アーカイブを展開');
i18n_messages.set('step2_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Locate the downloaded ZIP file, then unzip it:');
lang_map.set('ja', 'ダウンロードした ZIP ファイルを見つけて展開します:');
i18n_messages.set('step2_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'On macOS: double-click the ZIP file in Finder.');
lang_map.set('ja', 'macOS:Finder で ZIP ファイルをダブルクリックします。');
i18n_messages.set('step2_mac', lang_map);
lang_map = new Map();
lang_map.set('en', 'On Windows: right-click the ZIP and choose <em>Extract All…</em>.');
lang_map.set('ja', 'Windows:ZIP を右クリックし、<em>すべて展開...</em> を選択します。');
i18n_messages.set('step2_win', lang_map);
lang_map = new Map();
lang_map.set('en', 'You should end up with a folder named something like <code>ContextWizard-crx-latest</code>. Keep this folder in a permanent location (not inside your browser cache or trash).');
lang_map.set('ja', '<code>ContextWizard-crx-latest</code> という名前のフォルダが作成されます。このフォルダをブラウザのキャッシュやゴミ箱ではなく、永続的な場所に保管してください。');
i18n_messages.set('step2_note', lang_map);
lang_map = new Map();
lang_map.set('en', 'Open the extensions page');
lang_map.set('ja', '拡張機能ページを開く');
i18n_messages.set('step3_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'In Chrome, open <code>chrome://extensions</code> in the address bar. In Edge, use <code>edge://extensions</code>. You will see the extensions management screen.');
lang_map.set('ja', 'Chrome では、アドレスバーに <code>chrome://extensions</code> を入力します。Edge では <code>edge://extensions</code> を使用します。拡張機能の管理画面が表示されます。');
i18n_messages.set('step3_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'This is where you manage, enable, and remove extensions in your browser.');
lang_map.set('ja', 'ここでブラウザの拡張機能の管理、有効化、削除を行います。');
i18n_messages.set('step3_note', lang_map);
lang_map = new Map();
lang_map.set('en', 'Enable developer mode');
lang_map.set('ja', '開発者モードを有効にする');
i18n_messages.set('step4_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Turn on <strong>Developer mode</strong> using the toggle in the top-right corner of the extensions page.');
lang_map.set('ja', '拡張機能ページの右上にあるトグルで<strong>「開発者モード」</strong>をオンにします。');
i18n_messages.set('step4_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'When Developer mode is on, you should see a <strong>Load unpacked</strong> button near the top of the page.');
lang_map.set('ja', '開発者モードがオンになると、ページ上部に<strong>「パッケージを展開して読み込む」</strong>ボタンが表示されます。');
i18n_messages.set('step4_note', lang_map);
lang_map = new Map();
lang_map.set('en', 'Load the unpacked extension');
lang_map.set('ja', 'パッケージ未処理の拡張機能を読み込む');
i18n_messages.set('step5_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Click <strong>Load unpacked</strong> and choose the folder you unzipped in Step 2.');
lang_map.set('ja', '<strong>「パッケージを展開して読み込む」</strong>をクリックし、ステップ 2 で展開したフォルダを選択します。');
i18n_messages.set('step5_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'In the file picker, select the <strong>folder</strong> (for example, <code>ContextWizard-crx-latest</code>), not the ZIP file.');
lang_map.set('ja', 'ファイル選択で ZIP ファイルではなく<strong>フォルダ</strong>(例:<code>ContextWizard-crx-latest</code>)を選択してください。');
i18n_messages.set('step5_note1', lang_map);
lang_map = new Map();
lang_map.set('en', 'After loading, your browser will add ContextWizard to the list of installed extensions.');
lang_map.set('ja', '読み込み後、ブラウザのインストール済み拡張機能一覧に ContextWizard が追加されます。');
i18n_messages.set('step5_note2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Pin and open ContextWizard');
lang_map.set('ja', 'ContextWizard をピン留めして開く');
i18n_messages.set('step6_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Pin the extension so it is easy to reach, then open it in a new tab.');
lang_map.set('ja', '拡張機能をピン留めしてアクセスしやすくし、新しいタブで開きます。');
i18n_messages.set('step6_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Click the puzzle icon (Chrome/Edge), then pin <strong>ContextWizard</strong>.');
lang_map.set('ja', 'パズルアイコン(Chrome/Edge)をクリックし、<strong>ContextWizard</strong> をピン留めします。');
i18n_messages.set('step6_li1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Click the ContextWizard icon or open the extension\'s page to start using it.');
lang_map.set('ja', 'ContextWizard アイコンをクリックするか、拡張機能のページを開いて使用を開始します。');
i18n_messages.set('step6_li2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Your conversations stay local on your machine. You can remove the unpacked extension at any time from the extensions page.');
lang_map.set('ja', '会話はすべてローカルのマシンに保存されます。拡張機能ページからいつでもパッケージ未処理の拡張機能を削除できます。');
i18n_messages.set('step6_note', lang_map);
lang_map = new Map();
lang_map.set('en', 'Supported browsers');
lang_map.set('ja', 'サポート対応ブラウザ');
i18n_messages.set('browsers_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard works in most Chromium-based desktop browsers that support loading unpacked extensions:');
lang_map.set('ja', 'ContextWizard は、パッケージ未処理の拡張機能の読み込みをサポートするほとんどの Chromium ベースのデスクトップブラウザで動作します:');
i18n_messages.set('browsers_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Mobile browsers and Safari do not support this unpacked extension flow.');
lang_map.set('ja', 'モバイルブラウザと Safari はこのパッケージ未処理拡張機能のフローをサポートしていません。');
i18n_messages.set('browsers_limit', lang_map);
lang_map = new Map();
lang_map.set('en', 'If something doesn\'t work');
lang_map.set('ja', '問題が発生した場合');
i18n_messages.set('troubleshoot_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Make sure <strong>Developer mode</strong> is enabled on the extensions page.');
lang_map.set('ja', '拡張機能ページで<strong>「開発者モード」</strong>が有効になっていることを確認してください。');
i18n_messages.set('troubleshoot_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Confirm you selected the <strong>uncompressed folder</strong>, not the ZIP file.');
lang_map.set('ja', '<strong>解凍済みフォルダ</strong>を選択していることを確認してください(ZIP ファイルではありません)。');
i18n_messages.set('troubleshoot_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Try restarting the browser after loading the extension.');
lang_map.set('ja', '拡張機能を読み込んだ後、ブラウザを再起動してみてください。');
i18n_messages.set('troubleshoot_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'If you are still stuck, reach out and we\'ll help you get set up.');
lang_map.set('ja', 'まだ解決しない場合は、お問い合わせください。セットアップをお手伝いします。');
i18n_messages.set('troubleshoot_help', lang_map);
lang_map = new Map();
lang_map.set('en', 'Email support');
lang_map.set('ja', 'メールでサポート');
i18n_messages.set('btn_email_support', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard overview');
lang_map.set('ja', 'ContextWizard 概要');
i18n_messages.set('footer_overview', lang_map);
lang_map = new Map();
lang_map.set('en', 'Privacy policy');
lang_map.set('ja', 'プライバシーポリシー');
i18n_messages.set('footer_privacy', lang_map);
lang_map = new Map();
lang_map.set('en', 'What You Get After Installation');
lang_map.set('ja', 'インストール後に利用できる機能');
lang_map.set('zh-CN', '安装后你将获得');
i18n_messages.set('static_get_title', lang_map);
</script>
<script>
window.onload = function () {
setI18NText(i18n_messages);
if (typeof initRevealAnimations === 'function') {
initRevealAnimations();
} else {
@@ -124,6 +404,10 @@
el.style.transform = 'none';
});
}
var nav = document.getElementById('navbar-collapse');
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
};
</script>
</head>
@@ -148,13 +432,13 @@
style="margin-right: 16px;"
/>
<div>
<div style="font-weight: 700; font-size: 1.25rem; color: #0f172a;">amiPro, LLC</div>
<small style="color: #64748b;">Privacy-first identity &amp; AI products</small>
<div id="nav_brand" style="font-weight: 700; font-size: 1.25rem; color: #0f172a;">amiPro, LLC</div>
<small id="nav_tagline" style="color: #64748b;">Privacy-first identity &amp; AI products</small>
</div>
</div>
</div>
<a href="contextwizard_top.html" class="btn btn-link ms-auto me-3">Back to ContextWizard</a>
<a
<a id="nav_back" href="contextwizard_top.html" class="btn btn-link ms-auto me-3">Back to ContextWizard</a>
<a id="nav_contact"
href="mailto:sales@amipro.me?subject=ContextWizard%20support"
class="btn btn-outline-primary"
>Contact support</a>
@@ -165,26 +449,28 @@
<div class="container-xxl" style="padding: 32px 24px 72px;">
<section class="hero reveal">
<div class="hero__text" data-animate>
<span class="hero__eyebrow">ContextWizard</span>
<h1 class="hero__title">Install ContextWizard in your browser</h1>
<p class="hero__lead">
<span id="hero_eyebrow" class="hero__eyebrow">ContextWizard</span>
<h1 id="hero_title" class="hero__title">Install ContextWizard in your browser</h1>
<p id="hero_lead" class="hero__lead">
Follow this guide to install the unpackaged ContextWizard extension in Chrome, Microsoft Edge,
Brave, or any Chromium-based browser that supports developer mode extensions.
</p>
<div style="margin-top: 1.5rem;" class="hero__chips">
<span class="hero-chip">Works offline on your machine</span>
<span class="hero-chip">No account required</span>
<span id="chip_offline" class="hero-chip">Works offline on your machine</span>
<span id="chip_no_account" class="hero-chip">No account required</span>
</div>
<div
class="hero__actions"
style="margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 1rem;"
>
<a
id="btn_download"
href="https://amipro.me/contextwizard-files/ContextWizard-crx-latest.zip"
class="btn btn-primary"
style="flex: 1 0 220px;"
>Download ContextWizard ZIP</a>
<a
id="btn_privacy"
href="contextwizard_privacy_policy.html"
class="btn btn-outline-secondary"
style="flex: 1 0 220px;"
@@ -193,12 +479,23 @@
</div>
</section>
<section style="margin-top: 2rem; padding: 1.5rem; background: #f0f9ff; border-radius: 12px; border-left: 4px solid #2563eb;">
<h2 id="static_get_title" style="font-size: 1.25rem; font-weight: 600; color: #0f172a; margin-bottom: 0.75rem;">What You Get After Installation</h2>
<ul style="color: #475569; line-height: 1.8; margin: 0; padding-left: 1.25rem;">
<li><strong>Automatic AI chat capture:</strong> ContextWizard detects when you visit a supported AI platform and starts recording conversations in real-time.</li>
<li><strong>Full-text search:</strong> Search across all your AI conversations by title, summary, or message body with instant results.</li>
<li><strong>Cross-platform bookmarks:</strong> Save key moments from ChatGPT, Claude, and Gemini in one unified list.</li>
<li><strong>Local-first privacy:</strong> All data is encrypted and stored in your browser local storage. Nothing leaves your machine.</li>
<li><strong>12-language UI:</strong> Automatically detects your browser language and supports manual switching.</li>
</ul>
</section>
<section class="reveal" data-animate style="margin-top: 48px;">
<div class="row g-4 align-items-start">
<div class="col-lg-7">
<article class="card step-card">
<div class="card-body">
<h2 style="font-weight: 600; color: #0f172a; margin-bottom: 1rem;">
<h2 id="steps_title" style="font-weight: 600; color: #0f172a; margin-bottom: 1rem;">
Step-by-step installation
</h2>
@@ -207,12 +504,12 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">1</div>
<div>
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Download the ZIP file</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step1_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Download the ZIP file</h3>
<p id="step1_desc" style="margin-bottom: 0.5rem; color: #475569;">
Click <strong>Download ContextWizard ZIP</strong> above and save the file to a
location you can find, such as your <em>Downloads</em> folder.
</p>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step1_note" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
The ZIP contains the full extension source so your browser can run it in
developer mode.
</p>
@@ -224,15 +521,15 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">2</div>
<div>
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Unzip the archive</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step2_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Unzip the archive</h3>
<p id="step2_desc" style="margin-bottom: 0.5rem; color: #475569;">
Locate the downloaded ZIP file, then unzip it:
</p>
<ul style="padding-left: 1.1rem; margin-bottom: 0.5rem; color: #475569;">
<li>On macOS: double-click the ZIP file in Finder.</li>
<li>On Windows: right-click the ZIP and choose <em>Extract All…</em>.</li>
<li id="step2_mac">On macOS: double-click the ZIP file in Finder.</li>
<li id="step2_win">On Windows: right-click the ZIP and choose <em>Extract All…</em>.</li>
</ul>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step2_note" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
You should end up with a folder named something like
<code>ContextWizard-crx-latest</code>. Keep this folder in a permanent location
(not inside your browser cache or trash).
@@ -245,8 +542,8 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">3</div>
<div style="width: 100%;">
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Open the extensions page</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step3_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Open the extensions page</h3>
<p id="step3_desc" style="margin-bottom: 0.5rem; color: #475569;">
In Chrome, open <code>chrome://extensions</code> in the address bar. In Edge, use
<code>edge://extensions</code>. You will see the extensions management screen.
</p>
@@ -257,7 +554,7 @@
style="max-width: 100%; border-radius: 0.75rem; box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12);"
/>
</div>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step3_note" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
This is where you manage, enable, and remove extensions in your browser.
</p>
</div>
@@ -268,8 +565,8 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">4</div>
<div style="width: 100%;">
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Enable developer mode</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step4_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Enable developer mode</h3>
<p id="step4_desc" style="margin-bottom: 0.5rem; color: #475569;">
Turn on <strong>Developer mode</strong> using the toggle in the top-right corner of
the extensions page.
</p>
@@ -280,7 +577,7 @@
style="max-width: 100%; border-radius: 0.75rem; box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12);"
/>
</div>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step4_note" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
When Developer mode is on, you should see a <strong>Load unpacked</strong> button
near the top of the page.
</p>
@@ -292,8 +589,8 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">5</div>
<div style="width: 100%;">
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Load the unpacked extension</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step5_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Load the unpacked extension</h3>
<p id="step5_desc" style="margin-bottom: 0.5rem; color: #475569;">
Click <strong>Load unpacked</strong> and choose the folder you unzipped in Step 2.
</p>
<div style="margin: 0.5rem 0 0.75rem;">
@@ -303,11 +600,11 @@
style="max-width: 100%; border-radius: 0.75rem; box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12);"
/>
</div>
<p style="margin-bottom: 0.25rem; color: #475569; font-size: 0.9rem;">
<p id="step5_note1" style="margin-bottom: 0.25rem; color: #475569; font-size: 0.9rem;">
In the file picker, select the <strong>folder</strong> (for example,
<code>ContextWizard-crx-latest</code>), not the ZIP file.
</p>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step5_note2" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
After loading, your browser will add ContextWizard to the list of installed
extensions.
</p>
@@ -319,8 +616,8 @@
<div style="display: flex; align-items: flex-start;">
<div class="step-number">6</div>
<div>
<h3 style="font-size: 1.05rem; margin-bottom: 0.35rem;">Pin and open ContextWizard</h3>
<p style="margin-bottom: 0.5rem; color: #475569;">
<h3 id="step6_title" style="font-size: 1.05rem; margin-bottom: 0.35rem;">Pin and open ContextWizard</h3>
<p id="step6_desc" style="margin-bottom: 0.5rem; color: #475569;">
Pin the extension so it is easy to reach, then open it in a new tab.
</p>
<div style="margin: 0.5rem 0 0.75rem;">
@@ -331,10 +628,10 @@
/>
</div>
<ul style="padding-left: 1.1rem; margin-bottom: 0.5rem; color: #475569;">
<li>Click the puzzle icon (Chrome/Edge), then pin <strong>ContextWizard</strong>.</li>
<li>Click the ContextWizard icon or open the extension's page to start using it.</li>
<li id="step6_li1">Click the puzzle icon (Chrome/Edge), then pin <strong>ContextWizard</strong>.</li>
<li id="step6_li2">Click the ContextWizard icon or open the extension's page to start using it.</li>
</ul>
<p style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
<p id="step6_note" style="margin-bottom: 0; color: #64748b; font-size: 0.9rem;">
Your conversations stay local on your machine. You can remove the unpacked
extension at any time from the extensions page.
</p>
@@ -352,8 +649,8 @@
style="border-radius: 1.25rem; box-shadow: 0 16px 50px rgba(15, 23, 42, 0.08);"
>
<div class="card-body">
<h3 style="font-size: 1.15rem; margin-bottom: 0.75rem;">Supported browsers</h3>
<p style="color: #475569;">
<h3 id="browsers_title" style="font-size: 1.15rem; margin-bottom: 0.75rem;">Supported browsers</h3>
<p id="browsers_desc" style="color: #475569;">
ContextWizard works in most Chromium-based desktop browsers that support loading
unpacked extensions:
</p>
@@ -362,22 +659,22 @@
<span class="browser-pill"><i class="bx bxl-microsoft"></i>Microsoft Edge</span>
<span class="browser-pill"><i class="bx bxs-ship"></i>Brave / Vivaldi / Opera</span>
</div>
<p style="color: #64748b; font-size: 0.9rem;">
<p id="browsers_limit" style="color: #64748b; font-size: 0.9rem;">
Mobile browsers and Safari do not support this unpacked extension flow.
</p>
<hr />
<h3 style="font-size: 1.05rem; margin-bottom: 0.5rem;">If something doesnt work</h3>
<h3 id="troubleshoot_title" style="font-size: 1.05rem; margin-bottom: 0.5rem;">If something doesnt work</h3>
<ul style="padding-left: 1.1rem; color: #475569;">
<li>Make sure <strong>Developer mode</strong> is enabled on the extensions page.</li>
<li>Confirm you selected the <strong>uncompressed folder</strong>, not the ZIP file.</li>
<li>Try restarting the browser after loading the extension.</li>
<li id="troubleshoot_1">Make sure <strong>Developer mode</strong> is enabled on the extensions page.</li>
<li id="troubleshoot_2">Confirm you selected the <strong>uncompressed folder</strong>, not the ZIP file.</li>
<li id="troubleshoot_3">Try restarting the browser after loading the extension.</li>
</ul>
<p style="color: #64748b; font-size: 0.9rem; margin-bottom: 0.75rem;">
If you are still stuck, reach out and well help you get set up.
<p id="troubleshoot_help" style="color: #64748b; font-size: 0.9rem; margin-bottom: 0.75rem;">
If you are still stuck, reach out and we'll help you get set up.
</p>
<a href="mailto:support@amipro.me?subject=ContextWizard%20installation%20help" class="btn btn-sm btn-outline-primary">
<a id="btn_email_support" href="mailto:support@amipro.me?subject=ContextWizard%20installation%20help" class="btn btn-sm btn-outline-primary">
Email support
</a>
</div>
@@ -397,8 +694,8 @@
<a href="https://www.amipro.me" target="_blank" class="footer-link fw-bolder">amiPro, LLC</a>
</div>
<div>
<a href="contextwizard_top.html" class="footer-link me-4">ContextWizard overview</a>
<a href="contextwizard_privacy_policy.html" class="footer-link">Privacy policy</a>
<a id="footer_overview" href="contextwizard_top.html" class="footer-link me-4">ContextWizard overview</a>
<a id="footer_privacy" href="contextwizard_privacy_policy.html" class="footer-link">Privacy policy</a>
</div>
</div>
</footer>
+484 -78
View File
@@ -25,6 +25,58 @@
<meta name="description" content="ContextWizard privacy policy and data handling disclosures" />
<!-- Canonical -->
<link rel="canonical" href="https://amipro.me/contextwizard_privacy_policy.html" />
<!-- Hreflang -->
<link rel="alternate" hreflang="en" href="https://amipro.me/contextwizard_privacy_policy.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/contextwizard_privacy_policy.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/contextwizard_privacy_policy.html" />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:title" content="ContextWizard Privacy Policy - amiPro" />
<meta property="og:description" content="ContextWizard privacy policy and data handling disclosures" />
<meta property="og:url" content="https://amipro.me/contextwizard_privacy_policy.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/og-image.png" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="ContextWizard Privacy Policy - amiPro" />
<meta name="twitter:description" content="ContextWizard privacy policy and data handling disclosures" />
<meta name="twitter:image" content="https://amipro.me/files/og-image.png" />
<!-- JSON-LD Article Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "ContextWizard Privacy Policy",
"description": "ContextWizard privacy policy and data handling disclosures",
"url": "https://amipro.me/contextwizard_privacy_policy.html",
"datePublished": "2025-11-18",
"dateModified": "2025-11-18",
"author": {
"@type": "Person",
"name": "amiPro Team"
},
"publisher": {
"@type": "Organization",
"name": "amiPro, LLC",
"url": "https://amipro.me",
"logo": {
"@type": "ImageObject",
"url": "https://amipro.me/files/og-image.png"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://amipro.me/contextwizard_privacy_policy.html"
}
}
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
@@ -151,9 +203,367 @@
lang_map.set('ja', '管理ポータル');
i18n_messages.set('label_portal', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard · Privacy');
lang_map.set('ja', 'ContextWizard · プライバシー');
i18n_messages.set('hero_eyebrow', lang_map);
lang_map = new Map();
lang_map.set('en', 'Your AI conversations stay on your device');
lang_map.set('ja', 'AI会話はデバイス内にとどまります');
i18n_messages.set('hero_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard by amiPro, LLC captures what is already visible in your AI chat windows, encrypts and stores it locally, and never transmits it to amiPro or third parties.');
lang_map.set('ja', 'ContextWizard(amiPro, LLC)は、AIチャットウィンドウにすでに表示されている内容をキャプチャし、ローカルで暗号化・保存します。amiProや第三者への送信は一切行いません。');
i18n_messages.set('hero_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'Local-first');
lang_map.set('ja', 'ローカルファースト');
i18n_messages.set('chip_local', lang_map);
lang_map = new Map();
lang_map.set('en', 'Chrome Manifest V3');
lang_map.set('ja', 'Chrome Manifest V3');
i18n_messages.set('chip_manifest', lang_map);
lang_map = new Map();
lang_map.set('en', 'GDPR & CCPA aligned');
lang_map.set('ja', 'GDPR・CCPA準拠');
i18n_messages.set('chip_gdpr', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard Privacy Policy');
lang_map.set('ja', 'ContextWizard プライバシーポリシー');
i18n_messages.set('hero_media_title', lang_map);
lang_map = new Map();
lang_map.set('en', "Learn exactly how data moves (and doesn't move) inside the extension and how to stay in control.");
lang_map.set('ja', 'データが拡張機能内でどのように移動(または移動しない)するのか、そしてどのようにしてコントロールを維持するのかを正確に把握できます。');
i18n_messages.set('hero_media_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'No telemetry');
lang_map.set('ja', 'テレメトリなし');
i18n_messages.set('chip_telemetry', lang_map);
lang_map = new Map();
lang_map.set('en', 'Full user control');
lang_map.set('ja', 'ユーザー完全管理');
i18n_messages.set('chip_control', lang_map);
lang_map = new Map();
lang_map.set('en', 'Offline friendly');
lang_map.set('ja', 'オフライン対応');
i18n_messages.set('chip_offline', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Last updated:</strong> 18 November 2025');
lang_map.set('ja', '<strong>最終更新日:</strong>2025年11月18日');
i18n_messages.set('last_updated', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard Privacy Policy');
lang_map.set('ja', 'ContextWizard プライバシーポリシー');
i18n_messages.set('section_intro_title', lang_map);
lang_map = new Map();
lang_map.set('en', "ContextWizard is a Chrome extension built by amiPro, LLC that helps you capture, search, and revisit AI chat conversations across multiple platforms. This Privacy Policy explains what data the extension processes, how the data stays on your device, and what controls you have. By installing or using ContextWizard you agree to the data practices described below.");
lang_map.set('ja', 'ContextWizardは、amiPro, LLCが開発したChrome拡張機能で、複数のプラットフォームにわたるAIチャット会話をキャプチャ、検索、再確認できるようにします。本プライバシーポリシーでは、拡張機能がどのようなデータを処理するか、データがどのようにデバイス内にとどまるか、およびどのようなコントロールがあるかを説明します。ContextWizardをインストールまたは使用することで、以下に記載されるデータ慣行に同意したものとみなされます。');
i18n_messages.set('section_intro_text', lang_map);
lang_map = new Map();
lang_map.set('en', '1. Scope & Purpose');
lang_map.set('ja', '1. 適用範囲と目的');
i18n_messages.set('section_1_title', lang_map);
lang_map = new Map();
lang_map.set('en', "ContextWizard runs entirely as a browser extension and operates solely within the Chrome profile where it is installed. Its only purpose is to capture the text you already see on supported AI chat platforms, store summaries and metadata locally, and provide search, filtering, and export/import features.");
lang_map.set('ja', 'ContextWizardは完全にブラウザ拡張機能として動作し、インストールされたChromeプロファイル内のみで動作します。唯一の目的は、対応するAIチャットプラットフォームですでに表示されているテキストをキャプチャし、サマリーメタデータをローカルに保存し、検索、フィルタリング、エクスポート/インポート機能を提供することです。');
i18n_messages.set('section_1_text', lang_map);
lang_map = new Map();
lang_map.set('en', '2. Data We Process');
lang_map.set('ja', '2. 処理するデータ');
i18n_messages.set('section_2_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Category');
lang_map.set('ja', 'カテゴリ');
i18n_messages.set('th_category', lang_map);
lang_map = new Map();
lang_map.set('en', 'Description');
lang_map.set('ja', '説明');
i18n_messages.set('th_description', lang_map);
lang_map = new Map();
lang_map.set('en', 'Storage Location');
lang_map.set('ja', '保存先');
i18n_messages.set('th_storage', lang_map);
lang_map = new Map();
lang_map.set('en', 'Conversation content');
lang_map.set('ja', '会話コンテンツ');
i18n_messages.set('td_conv_content', lang_map);
lang_map = new Map();
lang_map.set('en', 'Message text, titles, timestamps, participant role (user/assistant), detected platform, and the URL of the conversation you are currently viewing.');
lang_map.set('ja', 'メッセージテキスト、タイトル、タイムスタンプ、参加者ロール(ユーザー/アシスタント)、検出されたプラットフォーム、および現在閲覧中の会話のURL。');
i18n_messages.set('td_conv_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Platform settings');
lang_map.set('ja', 'プラットフォーム設定');
i18n_messages.set('td_platform_settings', lang_map);
lang_map = new Map();
lang_map.set('en', 'Which built-in platforms are enabled, custom platform URL patterns, color assignments, and per-platform toggles.');
lang_map.set('ja', '有効な組み込みプラットフォーム、カスタムプラットフォームのURLパターン、色の割り当て、プラットフォームごとのトグル。');
i18n_messages.set('td_platform_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'UI preferences');
lang_map.set('ja', 'UI設定');
i18n_messages.set('td_ui_prefs', lang_map);
lang_map = new Map();
lang_map.set('en', 'Language override, sort order, search filters, onboarding dismissals, and other UX state.');
lang_map.set('ja', '言語オーバーライド、ソート順、検索フィルタ、オンボーディングの非表示設定、その他のUX状態。');
i18n_messages.set('td_ui_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard does <strong>not</strong> collect account credentials, payment data, unrelated browsing history, or telemetry/analytics.');
lang_map.set('ja', 'ContextWizardはアカウント認証情報、支払いデータ、無関係な閲覧履歴、テレメトリ/アナリティクスを<strong>収集しません</strong>。');
i18n_messages.set('section_2_note', lang_map);
lang_map = new Map();
lang_map.set('en', '3. Data Sources & Collection Method');
lang_map.set('ja', '3. データソースと収集方法');
i18n_messages.set('section_3_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Content is captured only from pages whose URLs match the built-in or user-configured host permissions (e.g., <code>https://chatgpt.com/*</code>).');
lang_map.set('ja', 'コンテンツは、URLが組み込みまたはユーザー設定のホスト権限と一致するページのみからキャプチャされます(例:<code>https://chatgpt.com/*</code>)。');
i18n_messages.set('section_3_1', lang_map);
lang_map = new Map();
lang_map.set('en', "The extension uses MutationObserver and DOM queries to read message containers in the active tab; it does <strong>not</strong> call any platform APIs or intercept network traffic.");
lang_map.set('ja', '拡張機能はMutationObserverとDOMクエリを使用してアクティブタブのメッセージコンテナを読み取ります。プラットフォームAPIを呼び出したり、ネットワークトラフィックを傍受したりすることは<strong>ありません</strong>。');
i18n_messages.set('section_3_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Data collection begins only after you navigate to a supported page and the recording indicator appears. Closing the tab or disabling the platform stops collection immediately.');
lang_map.set('ja', 'データ収集は、対応するページに移動し、録画インジケータが表示された後にのみ開始されます。タブを閉じるかプラットフォームを無効にすると、収集は直ちに停止します。');
i18n_messages.set('section_3_3', lang_map);
lang_map = new Map();
lang_map.set('en', '4. How We Use Data');
lang_map.set('ja', '4. データの使用方法');
i18n_messages.set('section_4_title', lang_map);
lang_map = new Map();
lang_map.set('en', "All captured data is used exclusively to power the extension's on-device features:");
lang_map.set('ja', 'キャプチャされたすべてのデータは、拡張機能のデバイス内機能を駆動するためにのみ使用されます:');
i18n_messages.set('section_4_intro', lang_map);
lang_map = new Map();
lang_map.set('en', 'Build a searchable, unified list of your AI conversations.');
lang_map.set('ja', 'AI会話の検索可能な統一リストを構築します。');
i18n_messages.set('section_4_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Provide quick links back to the source page via <code>chrome.tabs.update</code>.');
lang_map.set('ja', '<code>chrome.tabs.update</code>を通じてソースページへのクイックリンクを提供します。');
i18n_messages.set('section_4_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Enable exports/imports so you can back up or restore your local archive.');
lang_map.set('ja', 'エクスポート/インポートを有効にし、ローカルアーカイブのバックアップや復元が可能になります。');
i18n_messages.set('section_4_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Maintain per-platform enable/disable states and custom URL patterns.');
lang_map.set('ja', 'プラットフォームごとの有効/無効状態とカスタムURLパターンを維持します。');
i18n_messages.set('section_4_4', lang_map);
lang_map = new Map();
lang_map.set('en', 'We never send this information to amiPro, LLC servers or any third party.');
lang_map.set('ja', 'この情報がamiPro, LLCのサーバーや第三者に送信されることはありません。');
i18n_messages.set('section_4_note', lang_map);
lang_map = new Map();
lang_map.set('en', '5. Data Sharing & Transfers');
lang_map.set('ja', '5. データの共有と転送');
i18n_messages.set('section_5_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard does <strong>not</strong> transmit data outside the local browser environment.');
lang_map.set('ja', 'ContextWizardはローカルブラウザ環境の外部にデータを送信するこた<strong>ありません</strong>。');
i18n_messages.set('section_5_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'We do not share, sell, rent, or trade any user data with third parties.');
lang_map.set('ja', 'ユーザーデータを第三者と共有、販売、賃貸、取引することはありません。');
i18n_messages.set('section_5_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'The extension does not embed third-party analytics or advertising scripts.');
lang_map.set('ja', '拡張機能には第三者のアナリティクスや広告スクリプトは埋め込まれていません。');
i18n_messages.set('section_5_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Operating offline is fully supported once the extension is installed.');
lang_map.set('ja', '拡張機能のインストール後、オフラインでの動作が完全にサポートされます。');
i18n_messages.set('section_5_4', lang_map);
lang_map = new Map();
lang_map.set('en', '6. Permissions & Technical Safeguards');
lang_map.set('ja', '6. 権限と技術的保護措置');
i18n_messages.set('section_6_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Permission');
lang_map.set('ja', '権限');
i18n_messages.set('th_permission', lang_map);
lang_map = new Map();
lang_map.set('en', 'Reason');
lang_map.set('ja', '理由');
i18n_messages.set('th_reason', lang_map);
lang_map = new Map();
lang_map.set('en', 'Detects whether the tab you explicitly interact with matches a supported platform so conversations can be listed in the popup.');
lang_map.set('ja', 'ユーザーが明示的に操作したタブが対応するプラットフォームと一致するかを検出し、ポップアップに会話を一覧表示できるようにします。');
i18n_messages.set('td_activeTab', lang_map);
lang_map = new Map();
lang_map.set('en', "Opens the saved conversation's URL in the current window and reads metadata (title/URL) for the active tab only.");
lang_map.set('ja', '保存された会話のURLを現在のウィンドウで開き、アクティブタブのメタデータ(タイトル/URL)のみを読み取ります。');
i18n_messages.set('td_tabs', lang_map);
lang_map = new Map();
lang_map.set('en', 'Injects the packaged content script (<code>content.js</code>) on supported hosts to observe DOM changes in real time; no remote code is used.');
lang_map.set('ja', '対応するホストにパッケージされたコンテンツスクリプト(<code>content.js</code>)を注入し、DOMの変更をリアルタイムで監視します。リモートコードは使用されません。');
i18n_messages.set('td_scripting', lang_map);
lang_map = new Map();
lang_map.set('en', 'Saves conversations, summaries, and user preferences locally using Chrome Storage APIs.');
lang_map.set('ja', 'Chrome Storage APIを使用して会話、サマリー、ユーザー設定をローカルに保存します。');
i18n_messages.set('td_storage_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Host permissions');
lang_map.set('ja', 'ホスト権限');
i18n_messages.set('td_host_perm', lang_map);
lang_map = new Map();
lang_map.set('en', 'Restrict DOM access to specific AI chat domains so we can parse message containers safely.');
lang_map.set('ja', 'DOMアクセスを特定のAIチャットドメインに制限し、メッセージコンテナを安全に解析できるようにします。');
i18n_messages.set('td_host_perm_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Additional safeguards:');
lang_map.set('ja', '追加の保護措置:');
i18n_messages.set('safeguards_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Manifest V3 service worker architecture prevents persistent background execution.');
lang_map.set('ja', 'Manifest V3のサービスワーカーアーキテクチャにより、永続的なバックグラウンド実行が防止されます。');
i18n_messages.set('safeguard_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'All JavaScript injected into pages ships with the extension bundle; no remote code execution or eval of downloaded strings.');
lang_map.set('ja', 'ページに注入されるすべてのJavaScriptは拡張機能バンドルに含まれています。リモートコード実行やダウンロードされた文字列のevalはありません。');
i18n_messages.set('safeguard_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Obfuscation is applied only during the optional <code>npm run build</code> release process; source review builds remain readable.');
lang_map.set('ja', 'オフスケーションはオプションの<code>npm run build</code>リリースプロセス中のみ適用されます。ソースレビュー用ビルドはそのまま読める状態です。');
i18n_messages.set('safeguard_3', lang_map);
lang_map = new Map();
lang_map.set('en', '7. User Controls');
lang_map.set('ja', '7. ユーザーコントロール');
i18n_messages.set('section_7_title', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Platform Toggles:</strong> Settings (<code>options.html</code>) lets you enable/disable each built-in domain or remove custom domains.');
lang_map.set('ja', '<strong>プラットフォームトグル:</strong>設定(<code>options.html</code>)で、各組み込みドメインの有効/無効やカスタムドメインの削除が可能です。');
i18n_messages.set('section_7_1', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Data Management:</strong> Export, import, or delete all stored data from Settings → Data Management. Deleting clears <code>chrome.storage</code> entries.');
lang_map.set('ja', '<strong>データ管理:</strong>設定 → データ管理から、保存されたデータをすべてエクスポート、インポート、または削除できます。削除すると<code>chrome.storage</code>エントリがクリアされます。');
i18n_messages.set('section_7_2', lang_map);
lang_map = new Map();
lang_map.set('en', "<strong>Pause Collection:</strong> Use Chrome's site access controls or the in-extension platform toggle to stop monitoring a site temporarily. Removing the extension deletes every stored record.");
lang_map.set('ja', '<strong>収集の一時停止:</strong>Chromeのサイトアクセスコントロールまたは拡張機能内のプラットフォームトグルを使用して、サイトの監視を一時的に停止できます。拡張機能を削除すると、保存されたすべてのレコードが削除されます。');
i18n_messages.set('section_7_3', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Language & UI:</strong> Switch languages via the popup menu; UI choices persist only within your profile.');
lang_map.set('ja', '<strong>言語とUI:</strong>ポップアップメニューで言語を切り替えます。UIの選択はプロファイル内でのみ維持されます。');
i18n_messages.set('section_7_4', lang_map);
lang_map = new Map();
lang_map.set('en', '8. Data Retention');
lang_map.set('ja', '8. データの保持');
i18n_messages.set('section_8_title', lang_map);
lang_map = new Map();
lang_map.set('en', "Data stays in your local Chrome profile until you delete it via the Data Management screen, clear Chrome's site data, or uninstall the extension. We do not maintain server-side backups, so removing the extension permanently erases your archive.");
lang_map.set('ja', 'データは、データ管理画面で削除するか、Chromeのサイトデータをクリアするか、拡張機能をアンインストールするまで、ローカルのChromeプロファイルに残ります。サーバーサイドのバックアップは保持していないため、拡張機能を削除するとアーカイブが完全に消去されます。');
i18n_messages.set('section_8_text', lang_map);
lang_map = new Map();
lang_map.set('en', '9. Compliance Statement');
lang_map.set('ja', '9. コンプライアンス声明');
i18n_messages.set('section_9_title', lang_map);
lang_map = new Map();
lang_map.set('en', "ContextWizard complies with the Chrome Web Store Developer Program Policies, including the User Data, Limited Use, and Secure Handling requirements. Because all processing occurs locally and no personal data leaves the device, ContextWizard also aligns with major privacy regulations (e.g., GDPR, CCPA) regarding data minimization and user control.");
lang_map.set('ja', 'ContextWizardは、ユーザーデータ、限定利用、安全な取り扱いの要件を含むChrome Web Store開発者プログラムポリシーに準拠しています。すべての処理がローカルで行われ、個人データがデバイス外に出ないため、ContextWizardはデータ最小化とユーザーコントロールに関する主要なプライバシー規制(GDPR、CCPAなど)にも適合しています。');
i18n_messages.set('section_9_text', lang_map);
lang_map = new Map();
lang_map.set('en', "10. Children's Privacy");
lang_map.set('ja', '10. 児童のプライバシー');
i18n_messages.set('section_10_title', lang_map);
lang_map = new Map();
lang_map.set('en', "ContextWizard is intended for general audiences and does not knowingly collect information from children under 13. If you believe a minor has provided data, remove the extension or clear the storage to delete it immediately.");
lang_map.set('ja', 'ContextWizardは一般向けに意図されたものであり、13歳未満の児童の情報を故意に収集しません。未成年者がデータを提供したと思われる場合は、拡張機能を削除するか、ストレージをクリアして直ちに削除してください。');
i18n_messages.set('section_10_text', lang_map);
lang_map = new Map();
lang_map.set('en', '11. Changes to This Policy');
lang_map.set('ja', '11. ポリシーの変更');
i18n_messages.set('section_11_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'We may update this policy to reflect feature changes or regulatory guidance. When we do, we will update the "Last updated" date above and publish the revised policy at this same URL. Material changes will be summarized in the README and release notes.');
lang_map.set('ja', '機能の変更や規制ガイドラインの反映 위해、本ポリシーを更新する場合があります。更新する際は、上記の「最終更新日」を更新し、同じURLで改訂版ポリシーを公開します。重要な変更はREADMEとリリースノートに要約されます。');
i18n_messages.set('section_11_text', lang_map);
lang_map = new Map();
lang_map.set('en', '12. Contact Us');
lang_map.set('ja', '12. お問い合わせ');
i18n_messages.set('section_12_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'For privacy questions, requests, or bug reports, email <a href="mailto:support@amipro.me">support@amipro.me</a>. We aim to respond within five business days.');
lang_map.set('ja', 'プライバシーに関するお問い合わせ、リクエスト、バグ報告は、<a href="mailto:support@amipro.me">support@amipro.me</a>までメールください。5営業日以内に回答を目指しています。');
i18n_messages.set('section_12_text', lang_map);
window.onload = async function() {
setI18NText(i18n_messages);
initRevealAnimations();
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
</head>
@@ -166,39 +576,35 @@
<div class="layout-page">
<!-- Navbar -->
<!-- / Navbar -->
<!-- Content wrapper -->
<div class="content-wrapper">
<!-- Content -->
<div style="margin: 24px;">
<section class="hero reveal">
<div class="hero__text" data-animate>
<span class="hero__eyebrow">ContextWizard · Privacy</span>
<h1 class="hero__title">Your AI conversations stay on your device</h1>
<p class="hero__lead">
<span id="hero_eyebrow" class="hero__eyebrow">ContextWizard · Privacy</span>
<h1 id="hero_title" class="hero__title">Your AI conversations stay on your device</h1>
<p id="hero_lead" class="hero__lead">
ContextWizard by amiPro, LLC captures what is already visible in your AI chat windows,
encrypts and stores it locally, and never transmits it to amiPro or third parties.
</p>
<div class="hero__chips">
<span class="hero-chip">Local‑first</span>
<span class="hero-chip">Chrome Manifest V3</span>
<span class="hero-chip">GDPR & CCPA aligned</span>
<span id="chip_local" class="hero-chip">Local‑first</span>
<span id="chip_manifest" class="hero-chip">Chrome Manifest V3</span>
<span id="chip_gdpr" class="hero-chip">GDPR & CCPA aligned</span>
</div>
</div>
<div class="hero__media" data-animate>
<div class="hero__orb"></div>
<div class="hero__device">
<h4>ContextWizard Privacy Policy</h4>
<p>
Learn exactly how data moves (and doesn’t move) inside the extension and how to stay in control.
<h4 id="hero_media_title">ContextWizard Privacy Policy</h4>
<p id="hero_media_desc">
Learn exactly how data moves (and doesn't move) inside the extension and how to stay in control.
</p>
<div class="hero__chips" style="margin-top: 1.5rem;">
<span class="hero-chip">No telemetry</span>
<span class="hero-chip">Full user control</span>
<span class="hero-chip">Offline friendly</span>
<span id="chip_telemetry" class="hero-chip">No telemetry</span>
<span id="chip_control" class="hero-chip">Full user control</span>
<span id="chip_offline" class="hero-chip">Offline friendly</span>
</div>
</div>
</div>
@@ -207,17 +613,17 @@
<div class="alert alert-info d-flex align-items-center" role="alert" style="margin-top: 24px;">
<i class="bx bx-shield-quarter bx-sm me-2"></i>
<div>
<strong>Last updated:</strong> 18 November 2025
<span id="last_updated"><strong>Last updated:</strong> 18 November 2025</span>
</div>
</div>
<article class="privacy-content" style="margin-top: 24px;">
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h2 class="card-title" style="margin: 0;">ContextWizard Privacy Policy</h2>
<h2 id="section_intro_title" class="card-title" style="margin: 0;">ContextWizard Privacy Policy</h2>
</div>
<div class="card-body">
<p>
<p id="section_intro_text">
ContextWizard is a Chrome extension built by amiPro, LLC that helps you capture, search, and revisit
AI chat conversations across multiple platforms. This Privacy Policy explains what data the extension
processes, how the data stays on your device, and what controls you have. By installing or using
@@ -228,10 +634,10 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">1. Scope &amp; Purpose</h3>
<h3 id="section_1_title" class="card-title" style="margin: 0;">1. Scope &amp; Purpose</h3>
</div>
<div class="card-body">
<p>
<p id="section_1_text">
ContextWizard runs entirely as a browser extension and operates solely within the Chrome profile where it is
installed. Its only purpose is to capture the text you already see on supported AI chat platforms, store summaries
and metadata locally, and provide search, filtering, and export/import features.
@@ -241,38 +647,38 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">2. Data We Process</h3>
<h3 id="section_2_title" class="card-title" style="margin: 0;">2. Data We Process</h3>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Category</th>
<th>Description</th>
<th>Storage Location</th>
<th id="th_category">Category</th>
<th id="th_description">Description</th>
<th id="th_storage">Storage Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>Conversation content</td>
<td>Message text, titles, timestamps, participant role (user/assistant), detected platform, and the URL of the conversation you are currently viewing.</td>
<td id="td_conv_content">Conversation content</td>
<td id="td_conv_desc">Message text, titles, timestamps, participant role (user/assistant), detected platform, and the URL of the conversation you are currently viewing.</td>
<td><code>chrome.storage.local</code></td>
</tr>
<tr>
<td>Platform settings</td>
<td>Which built-in platforms are enabled, custom platform URL patterns, color assignments, and per-platform toggles.</td>
<td id="td_platform_settings">Platform settings</td>
<td id="td_platform_desc">Which built-in platforms are enabled, custom platform URL patterns, color assignments, and per-platform toggles.</td>
<td><code>chrome.storage.sync</code></td>
</tr>
<tr>
<td>UI preferences</td>
<td>Language override, sort order, search filters, onboarding dismissals, and other UX state.</td>
<td id="td_ui_prefs">UI preferences</td>
<td id="td_ui_desc">Language override, sort order, search filters, onboarding dismissals, and other UX state.</td>
<td><code>chrome.storage.local</code></td>
</tr>
</tbody>
</table>
</div>
<p class="mb-0">
<p id="section_2_note" class="mb-0">
ContextWizard does <strong>not</strong> collect account credentials, payment data, unrelated browsing history, or telemetry/analytics.
</p>
</div>
@@ -280,90 +686,90 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">3. Data Sources &amp; Collection Method</h3>
<h3 id="section_3_title" class="card-title" style="margin: 0;">3. Data Sources &amp; Collection Method</h3>
</div>
<div class="card-body">
<ul>
<li>Content is captured only from pages whose URLs match the built-in or user-configured host permissions (e.g., <code>https://chatgpt.com/*</code>).</li>
<li>The extension uses MutationObserver and DOM queries to read message containers in the active tab; it does <strong>not</strong> call any platform APIs or intercept network traffic.</li>
<li>Data collection begins only after you navigate to a supported page and the recording indicator appears. Closing the tab or disabling the platform stops collection immediately.</li>
<li id="section_3_1">Content is captured only from pages whose URLs match the built-in or user-configured host permissions (e.g., <code>https://chatgpt.com/*</code>).</li>
<li id="section_3_2">The extension uses MutationObserver and DOM queries to read message containers in the active tab; it does <strong>not</strong> call any platform APIs or intercept network traffic.</li>
<li id="section_3_3">Data collection begins only after you navigate to a supported page and the recording indicator appears. Closing the tab or disabling the platform stops collection immediately.</li>
</ul>
</div>
</section>
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">4. How We Use Data</h3>
<h3 id="section_4_title" class="card-title" style="margin: 0;">4. How We Use Data</h3>
</div>
<div class="card-body">
<p>All captured data is used exclusively to power the extension’s on-device features:</p>
<p id="section_4_intro">All captured data is used exclusively to power the extension's on-device features:</p>
<ol>
<li>Build a searchable, unified list of your AI conversations.</li>
<li>Provide quick links back to the source page via <code>chrome.tabs.update</code>.</li>
<li>Enable exports/imports so you can back up or restore your local archive.</li>
<li>Maintain per-platform enable/disable states and custom URL patterns.</li>
<li id="section_4_1">Build a searchable, unified list of your AI conversations.</li>
<li id="section_4_2">Provide quick links back to the source page via <code>chrome.tabs.update</code>.</li>
<li id="section_4_3">Enable exports/imports so you can back up or restore your local archive.</li>
<li id="section_4_4">Maintain per-platform enable/disable states and custom URL patterns.</li>
</ol>
<p class="mb-0">We never send this information to amiPro, LLC servers or any third party.</p>
<p id="section_4_note" class="mb-0">We never send this information to amiPro, LLC servers or any third party.</p>
</div>
</section>
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">5. Data Sharing &amp; Transfers</h3>
<h3 id="section_5_title" class="card-title" style="margin: 0;">5. Data Sharing &amp; Transfers</h3>
</div>
<div class="card-body">
<ul>
<li>ContextWizard does <strong>not</strong> transmit data outside the local browser environment.</li>
<li>We do not share, sell, rent, or trade any user data with third parties.</li>
<li>The extension does not embed third-party analytics or advertising scripts.</li>
<li>Operating offline is fully supported once the extension is installed.</li>
<li id="section_5_1">ContextWizard does <strong>not</strong> transmit data outside the local browser environment.</li>
<li id="section_5_2">We do not share, sell, rent, or trade any user data with third parties.</li>
<li id="section_5_3">The extension does not embed third-party analytics or advertising scripts.</li>
<li id="section_5_4">Operating offline is fully supported once the extension is installed.</li>
</ul>
</div>
</section>
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">6. Permissions &amp; Technical Safeguards</h3>
<h3 id="section_6_title" class="card-title" style="margin: 0;">6. Permissions &amp; Technical Safeguards</h3>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Permission</th>
<th>Reason</th>
<th id="th_permission">Permission</th>
<th id="th_reason">Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>activeTab</code></td>
<td>Detects whether the tab you explicitly interact with matches a supported platform so conversations can be listed in the popup.</td>
<td id="td_activeTab">Detects whether the tab you explicitly interact with matches a supported platform so conversations can be listed in the popup.</td>
</tr>
<tr>
<td><code>tabs</code></td>
<td>Opens the saved conversation’s URL in the current window and reads metadata (title/URL) for the active tab only.</td>
<td id="td_tabs">Opens the saved conversation's URL in the current window and reads metadata (title/URL) for the active tab only.</td>
</tr>
<tr>
<td><code>scripting</code></td>
<td>Injects the packaged content script (<code>content.js</code>) on supported hosts to observe DOM changes in real time; no remote code is used.</td>
<td id="td_scripting">Injects the packaged content script (<code>content.js</code>) on supported hosts to observe DOM changes in real time; no remote code is used.</td>
</tr>
<tr>
<td><code>storage</code></td>
<td>Saves conversations, summaries, and user preferences locally using Chrome Storage APIs.</td>
<td id="td_storage_desc">Saves conversations, summaries, and user preferences locally using Chrome Storage APIs.</td>
</tr>
<tr>
<td>Host permissions</td>
<td>Restrict DOM access to specific AI chat domains so we can parse message containers safely.</td>
<td id="td_host_perm">Host permissions</td>
<td id="td_host_perm_desc">Restrict DOM access to specific AI chat domains so we can parse message containers safely.</td>
</tr>
</tbody>
</table>
</div>
<div>
<p><strong>Additional safeguards:</strong></p>
<p id="safeguards_title"><strong>Additional safeguards:</strong></p>
<ul>
<li>Manifest V3 service worker architecture prevents persistent background execution.</li>
<li>All JavaScript injected into pages ships with the extension bundle; no remote code execution or eval of downloaded strings.</li>
<li>Obfuscation is applied only during the optional <code>npm run build</code> release process; source review builds remain readable.</li>
<li id="safeguard_1">Manifest V3 service worker architecture prevents persistent background execution.</li>
<li id="safeguard_2">All JavaScript injected into pages ships with the extension bundle; no remote code execution or eval of downloaded strings.</li>
<li id="safeguard_3">Obfuscation is applied only during the optional <code>npm run build</code> release process; source review builds remain readable.</li>
</ul>
</div>
</div>
@@ -371,35 +777,35 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">7. User Controls</h3>
<h3 id="section_7_title" class="card-title" style="margin: 0;">7. User Controls</h3>
</div>
<div class="card-body">
<ul>
<li><strong>Platform Toggles:</strong> Settings (<code>options.html</code>) lets you enable/disable each built-in domain or remove custom domains.</li>
<li><strong>Data Management:</strong> Export, import, or delete all stored data from Settings → Data Management. Deleting clears <code>chrome.storage</code> entries.</li>
<li><strong>Pause Collection:</strong> Use Chrome’s site access controls or the in-extension platform toggle to stop monitoring a site temporarily. Removing the extension deletes every stored record.</li>
<li><strong>Language &amp; UI:</strong> Switch languages via the popup menu; UI choices persist only within your profile.</li>
<li id="section_7_1"><strong>Platform Toggles:</strong> Settings (<code>options.html</code>) lets you enable/disable each built-in domain or remove custom domains.</li>
<li id="section_7_2"><strong>Data Management:</strong> Export, import, or delete all stored data from Settings → Data Management. Deleting clears <code>chrome.storage</code> entries.</li>
<li id="section_7_3"><strong>Pause Collection:</strong> Use Chrome's site access controls or the in-extension platform toggle to stop monitoring a site temporarily. Removing the extension deletes every stored record.</li>
<li id="section_7_4"><strong>Language &amp; UI:</strong> Switch languages via the popup menu; UI choices persist only within your profile.</li>
</ul>
</div>
</section>
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">8. Data Retention</h3>
<h3 id="section_8_title" class="card-title" style="margin: 0;">8. Data Retention</h3>
</div>
<div class="card-body">
<p>
Data stays in your local Chrome profile until you delete it via the Data Management screen, clear Chrome’s site data, or uninstall the extension. We do not maintain server-side backups, so removing the extension permanently erases your archive.
<p id="section_8_text">
Data stays in your local Chrome profile until you delete it via the Data Management screen, clear Chrome's site data, or uninstall the extension. We do not maintain server-side backups, so removing the extension permanently erases your archive.
</p>
</div>
</section>
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">9. Compliance Statement</h3>
<h3 id="section_9_title" class="card-title" style="margin: 0;">9. Compliance Statement</h3>
</div>
<div class="card-body">
<p>
<p id="section_9_text">
ContextWizard complies with the Chrome Web Store Developer Program Policies, including the User Data, Limited Use, and Secure Handling requirements. Because all processing occurs locally and no personal data leaves the device, ContextWizard also aligns with major privacy regulations (e.g., GDPR, CCPA) regarding data minimization and user control.
</p>
</div>
@@ -407,10 +813,10 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">10. Children’s Privacy</h3>
<h3 id="section_10_title" class="card-title" style="margin: 0;">10. Children’s Privacy</h3>
</div>
<div class="card-body">
<p>
<p id="section_10_text">
ContextWizard is intended for general audiences and does not knowingly collect information from children under 13. If you believe a minor has provided data, remove the extension or clear the storage to delete it immediately.
</p>
</div>
@@ -418,21 +824,21 @@
<section class="card mb-4 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">11. Changes to This Policy</h3>
<h3 id="section_11_title" class="card-title" style="margin: 0;">11. Changes to This Policy</h3>
</div>
<div class="card-body">
<p>
We may update this policy to reflect feature changes or regulatory guidance. When we do, we will update the “Last updated” date above and publish the revised policy at this same URL. Material changes will be summarized in the README and release notes.
<p id="section_11_text">
We may update this policy to reflect feature changes or regulatory guidance. When we do, we will update the "Last updated" date above and publish the revised policy at this same URL. Material changes will be summarized in the README and release notes.
</p>
</div>
</section>
<section class="card mb-5 reveal" data-animate>
<div class="card-header">
<h3 class="card-title" style="margin: 0;">12. Contact Us</h3>
<h3 id="section_12_title" class="card-title" style="margin: 0;">12. Contact Us</h3>
</div>
<div class="card-body">
<p>
<p id="section_12_text">
For privacy questions, requests, or bug reports, email <a href="mailto:support@amipro.me">support@amipro.me</a>.
We aim to respond within five business days.
</p>
+43
View File
@@ -25,6 +25,49 @@
<meta name="description" content="ContextWizard Chrome拡張機能の特定商取引法に基づく表記(通信販売に関する表示事項)" />
<!-- Canonical -->
<link rel="canonical" href="https://amipro.me/contextwizard_tokushoho.html" />
<!-- Hreflang -->
<link rel="alternate" hreflang="ja" href="https://amipro.me/contextwizard_tokushoho.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/contextwizard_tokushoho.html" />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:title" content="特定商取引法に基づく表記 - ContextWizard - amiPro" />
<meta property="og:description" content="ContextWizard Chrome拡張機能の特定商取引法に基づく表記(通信販売に関する表示事項)" />
<meta property="og:url" content="https://amipro.me/contextwizard_tokushoho.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/og-image.png" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="特定商取引法に基づく表記 - ContextWizard - amiPro" />
<meta name="twitter:description" content="ContextWizard Chrome拡張機能の特定商取引法に基づく表記(通信販売に関する表示事項)" />
<meta name="twitter:image" content="https://amipro.me/files/og-image.png" />
<!-- JSON-LD Article Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "特定商取引法に基づく表記 - ContextWizard",
"description": "ContextWizard Chrome拡張機能の特定商取引法に基づく表記(通信販売に関する表示事項)",
"url": "https://amipro.me/contextwizard_tokushoho.html",
"datePublished": "2025-12-29",
"dateModified": "2025-12-29",
"author": {
"@type": "Person",
"name": "杜 慶捷"
},
"publisher": {
"@type": "Organization",
"name": "amiPro合同会社",
"url": "https://amipro.me"
}
}
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
+487 -75
View File
@@ -456,9 +456,406 @@
lang_map.set('ja', 'YouTubeで5秒ワークフローデモを見る &rarr;');
i18n_messages.set('video_act_link', lang_map);
lang_map = new Map();
lang_map.set('en', 'The universal context layer for your AI chats. Automatically capture, search, and transfer knowledge across platforms.');
lang_map.set('ja', 'AIチャットのための汎用コンテキストレイヤー。プラットフォーム全体で知識を自動的にキャプチャ、検索、転送します。');
i18n_messages.set('hero_subtitle', lang_map);
lang_map = new Map();
lang_map.set('en', "Harness each assistant's strengths, one-click backup or migrate every thread, and start immediately with zero configuration.");
lang_map.set('ja', '各アシスタントの強みを活用し、ワンクリックで全スレッドをバックアップまたは移行、ゼロコンフィグレーションで即座にスタート。');
i18n_messages.set('hero_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'All your data never leaves your PC');
lang_map.set('ja', 'すべてのデータはPCから外に出ません');
i18n_messages.set('check_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'No API keys required');
lang_map.set('ja', 'APIキーは不要です');
i18n_messages.set('check_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Automatic capture across your favorite AI chat platforms');
lang_map.set('ja', 'お気に入りのAIチャットプラットフォーム全体を自動キャプチャ');
i18n_messages.set('check_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Search, filter, and relaunch chats instantly');
lang_map.set('ja', 'チャットを即座に検索、フィルター、再起動');
i18n_messages.set('check_4', lang_map);
lang_map = new Map();
lang_map.set('en', 'Install from Chrome Store');
lang_map.set('ja', 'Chromeストアからインストール');
i18n_messages.set('btn_chrome_text', lang_map);
lang_map = new Map();
lang_map.set('en', 'Install from Edge store');
lang_map.set('ja', 'Edgeストアからインストール');
i18n_messages.set('btn_edge_text', lang_map);
lang_map = new Map();
lang_map.set('en', 'Watch Video');
lang_map.set('ja', '動画を見る');
i18n_messages.set('btn_video_text', lang_map);
lang_map = new Map();
lang_map.set('en', 'Local-First &amp; Privacy-Centric Architecture');
lang_map.set('ja', 'ローカルファースト&プライバシー重視のアーキテクチャ');
i18n_messages.set('callout_title', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Zero Cloud Uploads:</strong> All captured AI chat logs, transcripts, and custom prompt templates are fully encrypted and saved strictly inside your browser\'s local storage (<code>chrome.storage.local</code>).');
lang_map.set('ja', '<strong>クラウドアップロードゼロ:</strong> キャプチャされたすべてのAIチャットログ、文字起こし、カスタムプロンプトテンプレートは完全に暗号化され、ブラウザのローカルストレージ(<code>chrome.storage.local</code>)内に厳密に保存されます。');
i18n_messages.set('callout_1', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>No Cloud Account &amp; No API Keys Required:</strong> ContextWizard runs entirely out of the box via native DOM observation. It does not require any third-party registration or OpenAI/Anthropic/DeepSeek API keys.');
lang_map.set('ja', '<strong>クラウドアカウント不要&APIキー不要:</strong> ContextWizardはネイティブDOM監視によりそのまま動作します。第三者登録やOpenAI/Anthropic/DeepSeekのAPIキーは一切不要です。');
i18n_messages.set('callout_2', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>100% GDPR &amp; Privacy Compliant:</strong> Your confidential prompts, proprietary source code, and business context remain completely offline and never touch external synchronization servers.');
lang_map.set('ja', '<strong>100% GDPR&プライバシー準拠:</strong> 機密プロンプト、自社ソースコード、ビジネスコンテキストは完全にオフラインで保持され、外部同期サーバーに一切送信されません。');
i18n_messages.set('callout_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Why ContextWizard?');
lang_map.set('ja', 'なぜ ContextWizard?');
i18n_messages.set('why_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard automatically captures and organizes your conversations across multiple AI assistants, making every insight searchable, portable, and ready to revisit.');
lang_map.set('ja', 'ContextWizardは複数のAIアシスタント全体の会話を自動的にキャプチャし整理し、すべてのインサイトを検索可能、ポータブル、再訪可能な状態にします。');
i18n_messages.set('why_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'Multi-Platform Support');
lang_map.set('ja', 'マルチプラットフォーム対応');
i18n_messages.set('mp_title', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>10 built-in platforms</strong>: ChatGPT, Claude, Gemini, Copilot, Perplexity, HuggingChat, Poe, Grok, DeepSeek, Qwen.');
lang_map.set('ja', '<strong>10の内蔵プラットフォーム</strong>: ChatGPT、Claude、Gemini、Copilot、Perplexity、HuggingChat、Poe、Grok、DeepSeek、Qwen。');
i18n_messages.set('mp_1', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Custom platforms</strong>: Add any AI chat site via URL patterns.');
lang_map.set('ja', '<strong>カスタムプラットフォーム</strong>: URLパターンで任意のAIチャットサイトを追加可能。');
i18n_messages.set('mp_2', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Automatic detection</strong> as soon as you land on supported hosts.');
lang_map.set('ja', '<strong>自動検出</strong> - サポートされているホストにアクセスするとすぐに検出。');
i18n_messages.set('mp_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Smart Recording');
lang_map.set('ja', 'スマート録画');
i18n_messages.set('sr_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Real-time capture using MutationObserver.');
lang_map.set('ja', 'MutationObserverを使用したリアルタイムキャプチャ。');
i18n_messages.set('sr_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Platform-specific selectors for accurate transcripts.');
lang_map.set('ja', '正確な文字起こしのためのプラットフォーム固有セレクタ。');
i18n_messages.set('sr_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Debounced saves, visual indicator, and URL-aware logic for clean history.');
lang_map.set('ja', 'デバウンス保存、ビジュアルインジケーター、URL認識ロジックによるクリーンな履歴。');
i18n_messages.set('sr_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Powerful Search');
lang_map.set('ja', '強力な検索');
i18n_messages.set('ps_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Full-text search across titles, summaries, and message bodies.');
lang_map.set('ja', 'タイトル、要約、メッセージ本文を横断する全文検索。');
i18n_messages.set('ps_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Platform filters plus smart ranking by recency and relevance.');
lang_map.set('ja', 'プラットフォームフィルターと最新性・関連性によるスマートランキング。');
i18n_messages.set('ps_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Jump back into any conversation with one click.');
lang_map.set('ja', 'ワンクリックで任意の会話にジャンプ。');
i18n_messages.set('ps_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Conversation Management');
lang_map.set('ja', '会話管理');
i18n_messages.set('cm_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Unified list for every assistant you use.');
lang_map.set('ja', '使用するすべてのアシスタントの統一リスト。');
i18n_messages.set('cm_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Quick access, deletion, export, and import workflows.');
lang_map.set('ja', 'クイックアクセス、削除、エクスポート、インポートのワークフロー。');
i18n_messages.set('cm_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Local storage ensures nothing syncs beyond your machine.');
lang_map.set('ja', 'ローカルストレージにより、マシン外への同期は一切行われません。');
i18n_messages.set('cm_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Internationalization');
lang_map.set('ja', '多言語対応');
i18n_messages.set('i18n_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Localized UI across 12 languages.');
lang_map.set('ja', '12言語にローカライズされたUI。');
i18n_messages.set('i18n_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Automatic browser-language detection.');
lang_map.set('ja', 'ブラウザ言語の自動検出。');
i18n_messages.set('i18n_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Fast language switching with persistent preferences.');
lang_map.set('ja', '永続化された設定による高速な言語切替。');
i18n_messages.set('i18n_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Customization');
lang_map.set('ja', 'カスタマイズ');
i18n_messages.set('cust_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Enable/disable platforms individually.');
lang_map.set('ja', 'プラットフォームごとに個別に有効/無効化。');
i18n_messages.set('cust_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Add custom URL patterns for new AI sites.');
lang_map.set('ja', '新しいAIサイトのカスタムURLパターンを追加。');
i18n_messages.set('cust_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Manage data with stats, exports, imports, and clears.');
lang_map.set('ja', '統計、エクスポート、インポート、クリアでデータを管理。');
i18n_messages.set('cust_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Stay coordinated across assistants');
lang_map.set('ja', 'アシスタント全体で連携を維持');
i18n_messages.set('stay_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Bring order to the chaos of juggling multiple AI assistants. ContextWizard keeps a unified list, lets you filter by platform, and opens any saved thread in-place with a single click.');
lang_map.set('ja', '複数のAIアシスタントの使い分けに秩序をもたらします。ContextWizardは統一リストを維持し、プラットフォームでフィルタリングし、ワンクリックで保存されたスレッドを開きます。');
i18n_messages.set('stay_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'Tag and color-code platforms for quick scanning.');
lang_map.set('ja', 'プラットフォームにタグと色分けを設定してクイックスキャンニング。');
i18n_messages.set('stay_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Use summaries to remember why a chat mattered.');
lang_map.set('ja', '要約を使用してチャットの重要性を記憶。');
i18n_messages.set('stay_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Export/import archives for backups or new machines.');
lang_map.set('ja', 'バックアップや新しいマシン用にアーカイブをエクスポート/インポート。');
i18n_messages.set('stay_3', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>Pay attention:</strong> Do <em>not</em> delete your conversations on AI platforms if you still need them. ContextWizard stores the main content, not attachments or full raw data.');
lang_map.set('ja', '<strong>注意:</strong> まだ必要な会話をAIプラットフォーム上で<em>削除しない</em>でください。ContextWizardはメインコンテンツのみを保存し、添付ファイルや完全な生データは保存しません。');
i18n_messages.set('pay_attention_text', lang_map);
lang_map = new Map();
lang_map.set('en', 'Ready in minutes');
lang_map.set('ja', '数分で準備完了');
i18n_messages.set('ready_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Install the extension, pick which platforms to observe, and ContextWizard starts capturing right away—no API keys, no cloud accounts, zero configuration beyond toggling the platforms you care about.');
lang_map.set('ja', '拡張機能をインストールし、監視するプラットフォームを選ぶだけで、ContextWizardはすぐにキャプチャを開始します。APIキー不要、クラウドアカウント不要、関心のあるプラットフォームのトグル以外のコンフィグレーションはゼロ。');
i18n_messages.set('ready_lead', lang_map);
lang_map = new Map();
lang_map.set('en', 'Enable/disable per platform anytime.');
lang_map.set('ja', 'プラットフォームごとにいつでも有効/無効化可能。');
i18n_messages.set('ready_1', lang_map);
lang_map = new Map();
lang_map.set('en', 'Toggle recording indicator visibility.');
lang_map.set('ja', '録画インジケーターの表示切替。');
i18n_messages.set('ready_2', lang_map);
lang_map = new Map();
lang_map.set('en', 'Switch languages instantly.');
lang_map.set('ja', '即座に言語を切替。');
i18n_messages.set('ready_3', lang_map);
lang_map = new Map();
lang_map.set('en', 'Export JSON snapshots for backups.');
lang_map.set('ja', 'バックアップ用にJSONスナップショットをエクスポート。');
i18n_messages.set('ready_4', lang_map);
lang_map = new Map();
lang_map.set('en', 'Import archives when moving machines.');
lang_map.set('ja', 'マシン移行時にアーカイブをインポート。');
i18n_messages.set('ready_5', lang_map);
lang_map = new Map();
lang_map.set('en', 'Clear everything with one tap if needed.');
lang_map.set('ja', '必要に応じてワンタップですべてクリア。');
i18n_messages.set('ready_6', lang_map);
lang_map = new Map();
lang_map.set('en', 'Frequently Asked Questions');
lang_map.set('ja', 'よくある質問');
i18n_messages.set('faq_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'How to copy a long ChatGPT thread into Claude without formatting issues?');
lang_map.set('ja', 'フォーマットの問題なしに長いChatGPTスレッドをClaudeにコピーするには?');
i18n_messages.set('faq_1_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>To copy a long ChatGPT thread into Claude without markdown or UI formatting clutter, use ContextWizard\'s context copy feature.</strong> It automatically strips out platform-specific UI artifacts, extracts clean raw text transcripts from ChatGPT, and allows one-step copying, exporting, or transferring of full conversation contexts into Claude, Manus, Gemini, or other assistants. <a href="#thread-transfer-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a>');
lang_map.set('ja', '<strong>markdownやUIフォーマットの雑踏なしに長いChatGPTスレッドをClaudeにコピーするには、ContextWizardのコンテキストコピー機能を使用してください。</strong> プラットフォーム固有のUIアーティファクトを自動的に除去し、ChatGPTからクリーンな生テキスト文字起こしを抽出し、Claude、Manus、Gemini、その他のアシスタントへの完全な会話コンテキストのワンステップコピー、エクスポート、転送が可能です。 <a href="#thread-transfer-demo" style="color: #2563eb; text-decoration: underline;">&#8593; デモを見る</a>');
i18n_messages.set('faq_1_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'How do I copy page context and use it across AI platforms?');
lang_map.set('ja', 'ページコンテキストをコピーしてAIプラットフォーム全体で使用するには?');
i18n_messages.set('faq_2_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>ContextWizard\'s page context copy feature lets you capture content from any webpage and seamlessly paste it into ChatGPT, Claude, Gemini, or other AI assistants.</strong> It strips out unnecessary UI clutter, preserves the meaningful text structure, and lets you transfer context in one click — no more manual copy-paste or formatting cleanup. <a href="#page-context-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a>');
lang_map.set('ja', '<strong>ContextWizardのページコンテキストコピー機能により、任意のWebページからコンテンツをキャプチャし、ChatGPT、Claude、Gemini、その他のAIアシスタントにシームレスに貼り付けることができます。</strong> 不要なUIの雑踏を除去し、意味のあるテキスト構造を保持し、ワンクリックでコンテキストを転送。手動のコピペやフォーマット整理は不要に。 <a href="#page-context-demo" style="color: #2563eb; text-decoration: underline;">&#8593; デモを見る</a>');
i18n_messages.set('faq_2_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'What is the best way to search through multiple AI platform histories at once?');
lang_map.set('ja', '複数のAIプラットフォームの履歴を一度に検索する最良の方法は?');
i18n_messages.set('faq_3_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>The most efficient way to search through multiple AI platform histories at once is by using a local-first browser tool like ContextWizard.</strong> It builds a unified local index that allows full-text search across titles, summaries, and message bodies across 10+ major platforms (including ChatGPT, Claude, Gemini, Grok, DeepSeek, and Perplexity) simultaneously with granular platform filters.');
lang_map.set('ja', '<strong>複数のAIプラットフォームの履歴を一度に検索する最も効率的な方法は、ContextWizardのようなローカルファーストのブラウザツールを使用することです。</strong> 統一されたローカルインデックスを構築し、10以上の主要プラットフォーム(ChatGPT、Claude、Gemini、Grok、DeepSeek、Perplexityを含む)のタイトル、要約、メッセージ本文を粒度の細かいプラットフォームフィルターで同時全文検索が可能です。');
i18n_messages.set('faq_3_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'How to build a local knowledge base from AI chats safely?');
lang_map.set('ja', 'AIチャットから安全にローカルナレッジベースを構築するには?');
i18n_messages.set('faq_4_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>ContextWizard turns your daily browsing history into a secure, searchable local text database.</strong> By capturing real-time conversations using platform-specific selectors, it aggregates scattered insights into a unified workspace on your PC, enabling power users to build an offline second brain from their AI interactions.');
lang_map.set('ja', '<strong>ContextWizardは、毎日のブラウジング履歴を安全で検索可能なローカルテキストデータベースに変換します。</strong> プラットフォーム固有のセレクタを使用してリアルタイムの会話をキャプチャし、散在するインサイトをPC上の統一されたワークスペースに集約し、パワーユーザーがAIインタラクションからオフラインのセカンドブレインを構築できるようにします。');
i18n_messages.set('faq_4_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'How do I keep track of important conversations across different AI models?');
lang_map.set('ja', '異なるAIモデル全体の重要な会話を追跡するには?');
i18n_messages.set('faq_5_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>ContextWizard\'s cross-platform bookmark feature lets you save key moments across ChatGPT, Claude, and Gemini in a single place.</strong> It supports organizing bookmarks into custom groups with full instant-undo support, making it easy to jump back to any bookmarked conversation in its original web context with one click. <a href="#bookmark-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a>');
lang_map.set('ja', '<strong>ContextWizardのクロスプラットフォームブックマーク機能により、ChatGPT、Claude、Gemini全体の重要な会話を一箇所に保存できます。</strong> カスタムグループへの整理とフルインスタントアンドゥをサポートし、ワンクリックでブックマークした会話の元のWebコンテキストに戻るのが簡単に。 <a href="#bookmark-demo" style="color: #2563eb; text-decoration: underline;">&#8593; デモを見る</a>');
i18n_messages.set('faq_5_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'How can I safely reuse prompts without exposing sensitive data?');
lang_map.set('ja', '機密情報を露出せずに安全にプロンプトを再利用するには?');
i18n_messages.set('faq_6_q', lang_map);
lang_map = new Map();
lang_map.set('en', '<strong>The built-in Prompt Editor in ContextWizard allows you to manage reusable prompt templates while safeguarding your privacy through auto-redaction.</strong> You can define custom redaction rules that automatically replace sensitive information—such as API keys, passwords, and private tokens—with placeholders before sending the prompt to any AI platform.');
lang_map.set('ja', '<strong>ContextWizardの内蔵プロンプトエディターにより、自動秘匿化でプライバシーを保護しながら再利用可能なプロンプトテンプレートを管理できます。</strong> APIキーやパスワード、プライベートトークンなどの機密情報をプロンプトをAIプラットフォームに送信する前にプレースホルダーに自動的に置き換えるカスタム秘匿化ルールを定義できます。');
i18n_messages.set('faq_6_a', lang_map);
lang_map = new Map();
lang_map.set('en', 'Privacy Policy');
lang_map.set('ja', 'プライバシーポリシー');
i18n_messages.set('footer_privacy', lang_map);
lang_map = new Map();
lang_map.set('en', 'Contact');
lang_map.set('ja', 'お問い合わせ');
i18n_messages.set('footer_contact', lang_map);
lang_map = new Map();
lang_map.set('en', '© 2026 amiPro, LLC. All rights reserved.');
lang_map.set('ja', '© 2026 amiPro, LLC. All rights reserved.');
i18n_messages.set('footer_copy', lang_map);
lang_map = new Map();
lang_map.set('en', 'What is ContextWizard?');
lang_map.set('ja', 'ContextWizardとは?');
lang_map.set('zh-CN', '什么是 ContextWizard?');
i18n_messages.set('static_what_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ContextWizard is a free, local-first browser extension that automatically captures and organizes your AI conversations across 10+ platforms including ChatGPT, Claude, Gemini, Perplexity, Grok, DeepSeek, and Qwen. All data stays encrypted on your local machine — nothing is uploaded to any cloud server.');
lang_map.set('ja', 'ContextWizardは、ChatGPT、Claude、Gemini、Perplexity、Grok、DeepSeek、Qwenなど10以上のプラットフォームのAI会話を自動的にキャプチャ・整理する、無料のローカルファーストブラウザ拡張機能です。すべてのデータはローカルマシンに暗号化されたまま保持され、クラウドサーバーにアップロードされることはありません。');
lang_map.set('zh-CN', 'ContextWizard 是一款免费的本地优先浏览器扩展,可自动捕获和整理你在 ChatGPT、Claude、Gemini、Perplexity、Grok、DeepSeek、Qwen 等 10+ 平台上的 AI 对话。所有数据加密存储在本地,不会上传到任何云服务器。');
i18n_messages.set('static_what_desc', lang_map);
lang_map = new Map();
lang_map.set('en', '10+ Platforms');
lang_map.set('ja', '10以上のプラットフォーム');
lang_map.set('zh-CN', '10+ 平台');
i18n_messages.set('static_feat1_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'ChatGPT, Claude, Gemini, Copilot, Perplexity, HuggingChat, Poe, Grok, DeepSeek, Qwen — plus custom platforms.');
lang_map.set('ja', 'ChatGPT、Claude、Gemini、Copilot、Perplexity、HuggingChat、Poe、Grok、DeepSeek、Qwen — さらにカスタムプラットフォーム対応。');
lang_map.set('zh-CN', 'ChatGPT、Claude、Gemini、Copilot、Perplexity、HuggingChat、Poe、Grok、DeepSeek、Qwen — 还支持自定义平台。');
i18n_messages.set('static_feat1_desc', lang_map);
lang_map = new Map();
lang_map.set('en', 'Zero Configuration');
lang_map.set('ja', 'ゼロコンフィグレーション');
lang_map.set('zh-CN', '零配置');
i18n_messages.set('static_feat2_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'Install the extension, toggle the platforms you want, and ContextWizard starts capturing automatically. No API keys or accounts needed.');
lang_map.set('ja', '拡張機能をインストールし、有効にしたいプラットフォームを切り替えるだけで、ContextWizardが自動的にキャプチャを開始します。APIキーやアカウントは不要です。');
lang_map.set('zh-CN', '安装扩展,切换你想启用的平台,ContextWizard 即自动开始捕获。无需 API 密钥或账户。');
i18n_messages.set('static_feat2_desc', lang_map);
lang_map = new Map();
lang_map.set('en', '100% Private');
lang_map.set('ja', '100%プライベート');
lang_map.set('zh-CN', '100% 私密');
i18n_messages.set('static_feat3_title', lang_map);
lang_map = new Map();
lang_map.set('en', 'All conversations are encrypted and stored locally in your browser. GDPR compliant. No cloud uploads, no external servers.');
lang_map.set('ja', 'すべての会話は暗号化され、ブラウザ内にローカル保存されます。GDPR準拠。クラウドアップロードなし、外部サーバーなし。');
lang_map.set('zh-CN', '所有对话加密存储在浏览器本地。符合 GDPR,无云上传,无外部服务器。');
i18n_messages.set('static_feat3_desc', lang_map);
window.onload = async function() {
setI18NText(i18n_messages);
initRevealAnimations();
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
updateImages(getCurrentLanguage());
}
</script>
</head>
@@ -471,10 +868,6 @@
<div class="layout-page">
<!-- Navbar -->
<!-- / Navbar -->
<!-- Content wrapper -->
<div class="content-wrapper">
<!-- Content -->
@@ -483,15 +876,15 @@
<div class="hero__text" data-animate>
<span class="hero__badge"><i class="bx bx-bot"></i> ContextWizard</span>
<h1 class="hero__title">ContextWizard</h1>
<p style="font-size: 1.15rem; font-weight: 500; color: var(--text-bright, #f8fafc); line-height: 1.5; margin-bottom: 0.75rem;">The universal context layer for your AI chats. Automatically capture, search, and transfer knowledge across platforms.</p>
<p class="hero__lead">
<p id="hero_subtitle" style="font-size: 1.15rem; font-weight: 500; color: var(--text-bright, #f8fafc); line-height: 1.5; margin-bottom: 0.75rem;">The universal context layer for your AI chats. Automatically capture, search, and transfer knowledge across platforms.</p>
<p id="hero_lead" class="hero__lead">
Harness each assistant's strengths, one-click backup or migrate every thread, and start immediately with zero configuration.
</p>
<ul class="checklist" style="margin-top: 1.25rem;">
<li><i class="bx bx-check-circle"></i>All your data never leaves your PC</li>
<li><i class="bx bx-check-circle"></i>No API keys required</li>
<li><i class="bx bx-check-circle"></i>Automatic capture across your favorite AI chat platforms</li>
<li><i class="bx bx-check-circle"></i>Search, filter, and relaunch chats instantly</li>
<li id="check_1"><i class="bx bx-check-circle"></i>All your data never leaves your PC</li>
<li id="check_2"><i class="bx bx-check-circle"></i>No API keys required</li>
<li id="check_3"><i class="bx bx-check-circle"></i>Automatic capture across your favorite AI chat platforms</li>
<li id="check_4"><i class="bx bx-check-circle"></i>Search, filter, and relaunch chats instantly</li>
</ul>
<div style="margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 1rem;">
<a
@@ -501,7 +894,7 @@
target="_blank"
rel="noopener"
>
<i class="bx bxl-chrome me-1"></i>Install from Chrome Store
<i class="bx bxl-chrome me-1"></i><span id="btn_chrome_text">Install from Chrome Store</span>
</a>
<a
href="https://microsoftedge.microsoft.com/addons/detail/contextwizard/nknoacgaapoeboehlgelolgbifgcimli"
@@ -510,36 +903,55 @@
target="_blank"
rel="noopener"
>
<i class="bx bx-download me-1"></i>Install from Edge store
<i class="bx bx-download me-1"></i><span id="btn_edge_text">Install from Edge store</span>
</a>
<a href="https://www.youtube.com/watch?v=UDKbb1h-NMA" class="btn btn-outline-primary" style="min-width: 200px;" target="_blank">
<i class="bx bx-play-circle me-1"></i>Watch Video
<i class="bx bx-play-circle me-1"></i><span id="btn_video_text">Watch Video</span>
</a>
</div>
</div>
<div class="hero__media" data-animate>
<div class="hero__orb"></div>
<img src="contextwizard-files/screen-platforms-640-400.jpg" alt="ContextWizard platform overview screenshot" loading="lazy" />
<img id="hero-image" src="contextwizard-files/screen-platforms-640-400.jpg" alt="ContextWizard platform overview screenshot" loading="lazy" />
</div>
</section>
<section style="margin-top: 2rem; padding: 2rem; background: rgba(255,255,255,0.08); border-radius: 12px; border: 1px solid rgba(255,255,255,0.15);">
<h2 id="static_what_title" style="font-size: 1.5rem; font-weight: 600; color: #f8fafc; margin-bottom: 1rem;">What is ContextWizard?</h2>
<p id="static_what_desc" style="color: #cbd5e1; line-height: 1.7; margin-bottom: 1rem;">ContextWizard is a free, local-first browser extension that automatically captures and organizes your AI conversations across 10+ platforms including ChatGPT, Claude, Gemini, Perplexity, Grok, DeepSeek, and Qwen. All data stays encrypted on your local machine — nothing is uploaded to any cloud server.</p>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; margin-top: 1.5rem;">
<div style="padding: 1rem; background: rgba(255,255,255,0.06); border-radius: 8px;">
<strong id="static_feat1_title" style="color: #f8fafc;">10+ Platforms</strong>
<p id="static_feat1_desc" style="color: #94a3b8; margin: 0.25rem 0 0; font-size: 0.9rem;">ChatGPT, Claude, Gemini, Copilot, Perplexity, HuggingChat, Poe, Grok, DeepSeek, Qwen — plus custom platforms.</p>
</div>
<div style="padding: 1rem; background: rgba(255,255,255,0.06); border-radius: 8px;">
<strong id="static_feat2_title" style="color: #f8fafc;">Zero Configuration</strong>
<p id="static_feat2_desc" style="color: #94a3b8; margin: 0.25rem 0 0; font-size: 0.9rem;">Install the extension, toggle the platforms you want, and ContextWizard starts capturing automatically. No API keys or accounts needed.</p>
</div>
<div style="padding: 1rem; background: rgba(255,255,255,0.06); border-radius: 8px;">
<strong id="static_feat3_title" style="color: #f8fafc;">100% Private</strong>
<p id="static_feat3_desc" style="color: #94a3b8; margin: 0.25rem 0 0; font-size: 0.9rem;">All conversations are encrypted and stored locally in your browser. GDPR compliant. No cloud uploads, no external servers.</p>
</div>
</div>
</section>
<div class="alert alert-success data-callout reveal" role="alert" data-animate style="margin-top: 24px;">
<div style="display: flex; gap: 0.75rem; align-items: flex-start;">
<i class="bx bx-lock-alt bx-sm me-2" style="flex-shrink: 0; margin-top: 0.15rem;"></i>
<div>
<strong>Local-First &amp; Privacy-Centric Architecture</strong>
<strong id="callout_title">Local-First &amp; Privacy-Centric Architecture</strong>
<ul style="margin: 0.5rem 0 0; padding-left: 1.25rem;">
<li><strong>Zero Cloud Uploads:</strong> All captured AI chat logs, transcripts, and custom prompt templates are fully encrypted and saved strictly inside your browser's local storage (<code>chrome.storage.local</code>).</li>
<li><strong>No Cloud Account &amp; No API Keys Required:</strong> ContextWizard runs entirely out of the box via native DOM observation. It does not require any third-party registration or OpenAI/Anthropic/DeepSeek API keys.</li>
<li><strong>100% GDPR &amp; Privacy Compliant:</strong> Your confidential prompts, proprietary source code, and business context remain completely offline and never touch external synchronization servers.</li>
<li id="callout_1"><strong>Zero Cloud Uploads:</strong> All captured AI chat logs, transcripts, and custom prompt templates are fully encrypted and saved strictly inside your browser's local storage (<code>chrome.storage.local</code>).</li>
<li id="callout_2"><strong>No Cloud Account &amp; No API Keys Required:</strong> ContextWizard runs entirely out of the box via native DOM observation. It does not require any third-party registration or OpenAI/Anthropic/DeepSeek API keys.</li>
<li id="callout_3"><strong>100% GDPR &amp; Privacy Compliant:</strong> Your confidential prompts, proprietary source code, and business context remain completely offline and never touch external synchronization servers.</li>
</ul>
</div>
</div>
</div>
<section class="reveal" data-animate style="margin-top: 40px;">
<h2 class="section-heading">Why ContextWizard?</h2>
<p class="section-lead">
<h2 id="why_title" class="section-heading">Why ContextWizard?</h2>
<p id="why_lead" class="section-lead">
ContextWizard automatically captures and organizes your conversations across multiple AI assistants, making every insight searchable, portable, and ready to revisit.
</p>
</section>
@@ -548,11 +960,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">🤖</div>
<h3 class="card-title">Multi-Platform Support</h3>
<h3 id="mp_title" class="card-title">Multi-Platform Support</h3>
<ul>
<li><strong>10 built-in platforms</strong>: ChatGPT, Claude, Gemini, Copilot, Perplexity, HuggingChat, Poe, Grok, DeepSeek, Qwen.</li>
<li><strong>Custom platforms</strong>: Add any AI chat site via URL patterns.</li>
<li><strong>Automatic detection</strong> as soon as you land on supported hosts.</li>
<li id="mp_1"><strong>10 built-in platforms</strong>: ChatGPT, Claude, Gemini, Copilot, Perplexity, HuggingChat, Poe, Grok, DeepSeek, Qwen.</li>
<li id="mp_2"><strong>Custom platforms</strong>: Add any AI chat site via URL patterns.</li>
<li id="mp_3"><strong>Automatic detection</strong> as soon as you land on supported hosts.</li>
</ul>
</div>
</article>
@@ -560,11 +972,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">💾</div>
<h3 class="card-title">Smart Recording</h3>
<h3 id="sr_title" class="card-title">Smart Recording</h3>
<ul>
<li>Real-time capture using MutationObserver.</li>
<li>Platform-specific selectors for accurate transcripts.</li>
<li>Debounced saves, visual indicator, and URL-aware logic for clean history.</li>
<li id="sr_1">Real-time capture using MutationObserver.</li>
<li id="sr_2">Platform-specific selectors for accurate transcripts.</li>
<li id="sr_3">Debounced saves, visual indicator, and URL-aware logic for clean history.</li>
</ul>
</div>
</article>
@@ -572,11 +984,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">🔍</div>
<h3 class="card-title">Powerful Search</h3>
<h3 id="ps_title" class="card-title">Powerful Search</h3>
<ul>
<li>Full-text search across titles, summaries, and message bodies.</li>
<li>Platform filters plus smart ranking by recency and relevance.</li>
<li>Jump back into any conversation with one click.</li>
<li id="ps_1">Full-text search across titles, summaries, and message bodies.</li>
<li id="ps_2">Platform filters plus smart ranking by recency and relevance.</li>
<li id="ps_3">Jump back into any conversation with one click.</li>
</ul>
</div>
</article>
@@ -584,11 +996,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">📊</div>
<h3 class="card-title">Conversation Management</h3>
<h3 id="cm_title" class="card-title">Conversation Management</h3>
<ul>
<li>Unified list for every assistant you use.</li>
<li>Quick access, deletion, export, and import workflows.</li>
<li>Local storage ensures nothing syncs beyond your machine.</li>
<li id="cm_1">Unified list for every assistant you use.</li>
<li id="cm_2">Quick access, deletion, export, and import workflows.</li>
<li id="cm_3">Local storage ensures nothing syncs beyond your machine.</li>
</ul>
</div>
</article>
@@ -596,11 +1008,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">🌐</div>
<h3 class="card-title">Internationalization</h3>
<h3 id="i18n_title" class="card-title">Internationalization</h3>
<ul>
<li>Localized UI across 12 languages.</li>
<li>Automatic browser-language detection.</li>
<li>Fast language switching with persistent preferences.</li>
<li id="i18n_1">Localized UI across 12 languages.</li>
<li id="i18n_2">Automatic browser-language detection.</li>
<li id="i18n_3">Fast language switching with persistent preferences.</li>
</ul>
</div>
</article>
@@ -608,11 +1020,11 @@
<article class="card feature-card reveal" data-animate>
<div class="card-body">
<div class="feature-icon">⚙️</div>
<h3 class="card-title">Customization</h3>
<h3 id="cust_title" class="card-title">Customization</h3>
<ul>
<li>Enable/disable platforms individually.</li>
<li>Add custom URL patterns for new AI sites.</li>
<li>Manage data with stats, exports, imports, and clears.</li>
<li id="cust_1">Enable/disable platforms individually.</li>
<li id="cust_2">Add custom URL patterns for new AI sites.</li>
<li id="cust_3">Manage data with stats, exports, imports, and clears.</li>
</ul>
</div>
</article>
@@ -684,20 +1096,20 @@
<div class="row g-0 align-items-center">
<div class="col-md-6">
<div class="card-body">
<h3 class="card-title" style="margin-bottom: 1rem;">Stay coordinated across assistants</h3>
<p>
<h3 id="stay_title" class="card-title" style="margin-bottom: 1rem;">Stay coordinated across assistants</h3>
<p id="stay_lead">
Bring order to the chaos of juggling multiple AI assistants. ContextWizard keeps a unified list, lets you filter by platform, and opens any saved thread in-place with a single click.
</p>
<ul class="checklist" style="margin-top: 1rem;">
<li><i class="bx bx-check-circle"></i>Tag and color-code platforms for quick scanning.</li>
<li><i class="bx bx-check-circle"></i>Use summaries to remember why a chat mattered.</li>
<li><i class="bx bx-check-circle"></i>Export/import archives for backups or new machines.</li>
<li id="stay_1"><i class="bx bx-check-circle"></i>Tag and color-code platforms for quick scanning.</li>
<li id="stay_2"><i class="bx bx-check-circle"></i>Use summaries to remember why a chat mattered.</li>
<li id="stay_3"><i class="bx bx-check-circle"></i>Export/import archives for backups or new machines.</li>
</ul>
</div>
</div>
<div class="col-md-6">
<div class="card-body">
<img src="contextwizard-files/screen-search-640-400.jpg" alt="ContextWizard search UI" class="img-fluid" loading="lazy" style="border-radius: 1rem; box-shadow: 0 20px 60px rgba(15, 23, 42, 0.15);" />
<img id="search-image" src="contextwizard-files/screen-search-640-400.jpg" alt="ContextWizard search UI" class="img-fluid" loading="lazy" style="border-radius: 1rem; box-shadow: 0 20px 60px rgba(15, 23, 42, 0.15);" />
</div>
</div>
</div>
@@ -705,29 +1117,29 @@
<div class="alert pay-attention reveal" role="alert" data-animate style="margin-top: 24px;">
<i class="bx bx-info-circle bx-sm me-2"></i>
<strong>Pay attention:</strong> Do <em>not</em> delete your conversations on AI platforms if you still need them. ContextWizard stores the main content, not attachments or full raw data.
<span id="pay_attention_text"><strong>Pay attention:</strong> Do <em>not</em> delete your conversations on AI platforms if you still need them. ContextWizard stores the main content, not attachments or full raw data.</span>
</div>
<section class="card mb-5 mt-4 reveal" data-animate>
<div class="card-body">
<h3 class="card-title" style="margin-bottom: 1rem;">Ready in minutes</h3>
<p>
<h3 id="ready_title" class="card-title" style="margin-bottom: 1rem;">Ready in minutes</h3>
<p id="ready_lead">
Install the extension, pick which platforms to observe, and ContextWizard starts capturing right away—no API keys, no cloud accounts, zero configuration beyond toggling the platforms you care about.
</p>
<div class="checklist" style="margin-top: 1rem;">
<div class="row">
<div class="col-md-6">
<ul class="checklist">
<li><i class="bx bx-check-circle"></i>Enable/disable per platform anytime.</li>
<li><i class="bx bx-check-circle"></i>Toggle recording indicator visibility.</li>
<li><i class="bx bx-check-circle"></i>Switch languages instantly.</li>
<li id="ready_1"><i class="bx bx-check-circle"></i>Enable/disable per platform anytime.</li>
<li id="ready_2"><i class="bx bx-check-circle"></i>Toggle recording indicator visibility.</li>
<li id="ready_3"><i class="bx bx-check-circle"></i>Switch languages instantly.</li>
</ul>
</div>
<div class="col-md-6">
<ul class="checklist">
<li><i class="bx bx-check-circle"></i>Export JSON snapshots for backups.</li>
<li><i class="bx bx-check-circle"></i>Import archives when moving machines.</li>
<li><i class="bx bx-check-circle"></i>Clear everything with one tap if needed.</li>
<li id="ready_4"><i class="bx bx-check-circle"></i>Export JSON snapshots for backups.</li>
<li id="ready_5"><i class="bx bx-check-circle"></i>Import archives when moving machines.</li>
<li id="ready_6"><i class="bx bx-check-circle"></i>Clear everything with one tap if needed.</li>
</ul>
</div>
</div>
@@ -737,36 +1149,36 @@
<section class="card mb-5 reveal" data-animate>
<div class="card-body">
<h3 class="card-title" style="margin-bottom: 1.5rem;">Frequently Asked Questions</h3>
<h3 id="faq_title" class="card-title" style="margin-bottom: 1.5rem;">Frequently Asked Questions</h3>
<div id="faq-thread-transfer" class="faq-item" style="margin-bottom: 1.5rem;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How to copy a long ChatGPT thread into Claude without formatting issues?</h4>
<p style="margin-bottom: 0;"><strong>To copy a long ChatGPT thread into Claude without markdown or UI formatting clutter, use ContextWizard's context copy feature.</strong> It automatically strips out platform-specific UI artifacts, extracts clean raw text transcripts from ChatGPT, and allows one-step copying, exporting, or transferring of full conversation contexts into Claude, Manus, Gemini, or other assistants. <a href="#thread-transfer-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
<h4 id="faq_1_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How to copy a long ChatGPT thread into Claude without formatting issues?</h4>
<p id="faq_1_a" style="margin-bottom: 0;"><strong>To copy a long ChatGPT thread into Claude without markdown or UI formatting clutter, use ContextWizard's context copy feature.</strong> It automatically strips out platform-specific UI artifacts, extracts clean raw text transcripts from ChatGPT, and allows one-step copying, exporting, or transferring of full conversation contexts into Claude, Manus, Gemini, or other assistants. <a href="#thread-transfer-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
</div>
<div id="faq-page-context-copy" class="faq-item" style="margin-bottom: 1.5rem;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How do I copy page context and use it across AI platforms?</h4>
<p style="margin-bottom: 0;"><strong>ContextWizard's page context copy feature lets you capture content from any webpage and seamlessly paste it into ChatGPT, Claude, Gemini, or other AI assistants.</strong> It strips out unnecessary UI clutter, preserves the meaningful text structure, and lets you transfer context in one click — no more manual copy-paste or formatting cleanup. <a href="#page-context-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
<h4 id="faq_2_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How do I copy page context and use it across AI platforms?</h4>
<p id="faq_2_a" style="margin-bottom: 0;"><strong>ContextWizard's page context copy feature lets you capture content from any webpage and seamlessly paste it into ChatGPT, Claude, Gemini, or other AI assistants.</strong> It strips out unnecessary UI clutter, preserves the meaningful text structure, and lets you transfer context in one click — no more manual copy-paste or formatting cleanup. <a href="#page-context-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
</div>
<div class="faq-item" style="margin-bottom: 1.5rem;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">What is the best way to search through multiple AI platform histories at once?</h4>
<p style="margin-bottom: 0;"><strong>The most efficient way to search through multiple AI platform histories at once is by using a local-first browser tool like ContextWizard.</strong> It builds a unified local index that allows full-text search across titles, summaries, and message bodies across 10+ major platforms (including ChatGPT, Claude, Gemini, Grok, DeepSeek, and Perplexity) simultaneously with granular platform filters.</p>
<h4 id="faq_3_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">What is the best way to search through multiple AI platform histories at once?</h4>
<p id="faq_3_a" style="margin-bottom: 0;"><strong>The most efficient way to search through multiple AI platform histories at once is by using a local-first browser tool like ContextWizard.</strong> It builds a unified local index that allows full-text search across titles, summaries, and message bodies across 10+ major platforms (including ChatGPT, Claude, Gemini, Grok, DeepSeek, and Perplexity) simultaneously with granular platform filters.</p>
</div>
<div class="faq-item" style="margin-bottom: 1.5rem;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How to build a local knowledge base from AI chats safely?</h4>
<p style="margin-bottom: 0;"><strong>ContextWizard turns your daily browsing history into a secure, searchable local text database.</strong> By capturing real-time conversations using platform-specific selectors, it aggregates scattered insights into a unified workspace on your PC, enabling power users to build an offline second brain from their AI interactions.</p>
<h4 id="faq_4_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How to build a local knowledge base from AI chats safely?</h4>
<p id="faq_4_a" style="margin-bottom: 0;"><strong>ContextWizard turns your daily browsing history into a secure, searchable local text database.</strong> By capturing real-time conversations using platform-specific selectors, it aggregates scattered insights into a unified workspace on your PC, enabling power users to build an offline second brain from their AI interactions.</p>
</div>
<div id="faq-cross-platform-bookmarks" class="faq-item" style="margin-bottom: 0;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How do I keep track of important conversations across different AI models?</h4>
<p style="margin-bottom: 0;"><strong>ContextWizard's cross-platform bookmark feature lets you save key moments across ChatGPT, Claude, and Gemini in a single place.</strong> It supports organizing bookmarks into custom groups with full instant-undo support, making it easy to jump back to any bookmarked conversation in its original web context with one click. <a href="#bookmark-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
<h4 id="faq_5_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How do I keep track of important conversations across different AI models?</h4>
<p id="faq_5_a" style="margin-bottom: 0;"><strong>ContextWizard's cross-platform bookmark feature lets you save key moments across ChatGPT, Claude, and Gemini in a single place.</strong> It supports organizing bookmarks into custom groups with full instant-undo support, making it easy to jump back to any bookmarked conversation in its original web context with one click. <a href="#bookmark-demo" style="color: #2563eb; text-decoration: underline;">&#8593; Watch the demo</a></p>
</div>
<div class="faq-item" style="margin-bottom: 0; margin-top: 1.5rem;">
<h4 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How can I safely reuse prompts without exposing sensitive data?</h4>
<p style="margin-bottom: 0;"><strong>The built-in Prompt Editor in ContextWizard allows you to manage reusable prompt templates while safeguarding your privacy through auto-redaction.</strong> You can define custom redaction rules that automatically replace sensitive information—such as API keys, passwords, and private tokens—with placeholders before sending the prompt to any AI platform.</p>
<h4 id="faq_6_q" style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #1e293b;">How can I safely reuse prompts without exposing sensitive data?</h4>
<p id="faq_6_a" style="margin-bottom: 0;"><strong>The built-in Prompt Editor in ContextWizard allows you to manage reusable prompt templates while safeguarding your privacy through auto-redaction.</strong> You can define custom redaction rules that automatically replace sensitive information—such as API keys, passwords, and private tokens—with placeholders before sending the prompt to any AI platform.</p>
</div>
</div>
</section>
@@ -776,11 +1188,11 @@
<!-- Footer -->
<footer class="reveal" data-animate style="padding: 2rem 24px; border-top: 1px solid rgba(248, 250, 252, 0.1);">
<div class="d-flex flex-wrap justify-content-center gap-4" style="font-size: 0.9rem;">
<a href="contextwizard_privacy_policy.html" style="color: rgba(248, 250, 252, 0.7); text-decoration: none;">Privacy Policy</a>
<a id="footer_privacy" href="contextwizard_privacy_policy.html" style="color: rgba(248, 250, 252, 0.7); text-decoration: none;">Privacy Policy</a>
<a href="contextwizard_tokushoho.html" style="color: rgba(248, 250, 252, 0.7); text-decoration: none;">特定商取引法に基づく表記</a>
<a href="mailto:support@amipro.me" style="color: rgba(248, 250, 252, 0.7); text-decoration: none;">Contact</a>
<a id="footer_contact" href="mailto:support@amipro.me" style="color: rgba(248, 250, 252, 0.7); text-decoration: none;">Contact</a>
</div>
<p class="text-center mt-3" style="color: rgba(248, 250, 252, 0.5); font-size: 0.85rem; margin-bottom: 0;">
<p id="footer_copy" class="text-center mt-3" style="color: rgba(248, 250, 252, 0.5); font-size: 0.85rem; margin-bottom: 0;">
© 2026 amiPro, LLC. All rights reserved.
</p>
</footer>
Executable
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# 快速部署 HTML 和配置文件
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
SFTP_USER="${SFTP_USER:-witmatec}"
SFTP_HOST="${SFTP_HOST:-74.220.219.141}"
REMOTE_DIR="${REMOTE_DIR:-/home1/witmatec/public_html/amipro}"
echo "Deploying HTML files to $SFTP_USER@$SFTP_HOST:$REMOTE_DIR"
echo "You will be prompted for your password."
sftp "$SFTP_USER@$SFTP_HOST" << SFTP_COMMANDS
cd $REMOTE_DIR
mput *.html
mput llms.txt
mput sitemap.xml
mput robots.txt
put .htaccess
bye
SFTP_COMMANDS
echo "HTML files deployed. Run 'bash deploy-amipro.sh' for full deployment."
+202 -61
View File
@@ -93,301 +93,372 @@
const i18n_messages = new Map();
var lang_map = new Map();
lang_map.set("en-US", "amiPro - The easiest to integrate and manage Passkey cloud service");
lang_map.set("en", "amiPro - The easiest to integrate and manage Passkey cloud service");
lang_map.set("zh-CN", "amiPro - 最易集成、易管理的 Passkey 云服务");
lang_map.set("ja", "amiPro - 最も簡単に統合・管理できるパスキー・クラウド・サービス");
i18n_messages.set("label_welcome", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Management Portal");
lang_map.set("en", "Management Portal");
lang_map.set("zh-CN", "管理门户");
lang_map.set("ja", "管理ポータル");
i18n_messages.set("label_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact_cta", lang_map);
lang_map = new Map();
lang_map.set("en-US", "What is Passkey");
lang_map.set("en", "What is Passkey");
lang_map.set("zh-CN", "什么是Passkey");
lang_map.set("ja", "パスキー(Passkey)とは");
i18n_messages.set("title_what_passkey", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkeys replace passwords and provide faster, more accessible, and more secure website sign‑ins. Unlike passwords, passkeys are phishing‑resistant and more reliable. With support from major companies including Apple, Google, and NTT, 2023 marked the beginning of passkeys entering the consumer market.");
lang_map.set("en", "Passkeys replace passwords and provide faster, more accessible, and more secure website sign‑ins. Unlike passwords, passkeys are phishing‑resistant and more reliable. With support from major companies including Apple, Google, and NTT, 2023 marked the beginning of passkeys entering the consumer market.");
lang_map.set("zh-CN", "Passkey 取代密码,提供更快、更易用且更安全的网站登录。与密码不同,Passkey 稳定可靠并且可抵御网络钓鱼。在包括苹果、谷歌、NTT 等大型公司的支持下,2023 年成为 Passkey 进入消费者市场的元年。");
lang_map.set("ja", "パスキーはパスワードを置き換え、より高速で、よりアクセスしやすく<br>より安全なウェブサイトのサインインを提供します。パスワードとは異なり、<br>常に堅牢でフィッシングに耐性があります。<br>Apple、Google、NTTなどの大手企業のサポートを受けて、<br>2023年はPasskeyを一般消費者市場に導入する年です。");
i18n_messages.set("info_what_passkey", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey benefits");
lang_map.set("en", "Passkey benefits");
lang_map.set("zh-CN", "Passkey的优势");
lang_map.set("ja", "パスキーのメリット");
i18n_messages.set("title_passkey_merits", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkeys not only provide a more secure login method; they can also increase your website’s business value:<br>1. Faster sign‑in can <b>improve</b> conversion rates<br>2. No password resets can <b>reduce</b> support costs");
lang_map.set("en", "Passkeys not only provide a more secure login method; they can also increase your website’s business value:<br>1. Faster sign‑in can <b>improve</b> conversion rates<br>2. No password resets can <b>reduce</b> support costs");
lang_map.set("zh-CN", "Passkey 不仅提供更安全的登录方式,也能提升您网站的商业价值:<br>1、更快速的登录可<b>提高</b>转化率<br>2、无需找回密码可<b>降低</b>客服成本");
lang_map.set("ja", "パスキーは安全なログイン方法を提供するだけでなく、<br>Webサイトのビジネス価値の向上にもつながります。<br>1. より高速なログインはコンバージョン率の<b>向上</b>に寄与<br>2. パスワード再設定が不要なためサポートコストの<b>削減</b>につながります。");
i18n_messages.set("info_passkey_merits", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Merits");
lang_map.set("en", "Merits");
lang_map.set("zh-CN", "优势");
lang_map.set("ja", "メリット");
i18n_messages.set("label_merits", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Why amiPro: Standards compliance");
lang_map.set("en", "Why amiPro: Standards compliance");
lang_map.set("zh-CN", "amiPro 的优势:标准合规");
lang_map.set("ja", "amiProの強み:規格準拠");
i18n_messages.set("title_amipro_fido", lang_map);
lang_map = new Map();
lang_map.set("en-US", "amiPro is designed based on the FIDO standard and has passed the FIDO2 conformance test 100%.<br>From the browser to the SDK, everything aligns with the latest FIDO2 standard, making it safer and easier to maintain.<br>Meanwhile, amiPro provides extended features to enhance security and integration convenience.");
lang_map.set("en", "amiPro is designed based on the FIDO standard and has passed the FIDO2 conformance test 100%.<br>From the browser to the SDK, everything aligns with the latest FIDO2 standard, making it safer and easier to maintain.<br>Meanwhile, amiPro provides extended features to enhance security and integration convenience.");
lang_map.set("zh-CN", "amiPro基于FIDO标准设计,100%通过FIDO2兼容测试。<br>从浏览器到SDK全部统一至FIDO2最新标准,更安全更易维护。<br>同时提供扩展功能,增强安全性及集成便利性");
lang_map.set("ja", "amiProはFIDO規格に基づいて設計され、FIDO2互換性テストを100%パスしています<br>ブラウザから SDK に至るまで、すべてが最新の FIDO2 標準に統一されており、より安全で保守が容易です。<br>同時に、amiProはセキュリティと統合の互換性を高めるための拡張機能を提供します。");
i18n_messages.set("info_amipro_fido", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO conformance test");
lang_map.set("en", "FIDO conformance test");
lang_map.set("zh-CN", "FIDO兼容性测试");
lang_map.set("ja", "FIDO準拠性テスト");
i18n_messages.set("label_fido_video", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Why amiPro: Open source");
lang_map.set("en", "Why amiPro: Open source");
lang_map.set("zh-CN", "amiPro的优势:开源");
lang_map.set("ja", "amiProの強み:オープンソース");
i18n_messages.set("title_open_src", lang_map);
lang_map = new Map();
lang_map.set("en-US", "amiPro's core is completely open source, thus providing complete verifiability and security.<br>Not only the FIDO2 server, but also the iOS/Android SDK for App development are completely open source.");
lang_map.set("en", "amiPro's core is completely open source, thus providing complete verifiability and security.<br>Not only the FIDO2 server, but also the iOS/Android SDK for App development are completely open source.");
lang_map.set("zh-CN", "amiPro的核心完全永久开源,从而提供完全的可验证性和安全性。<br>不仅FIDO2服务器,App开发用iOS/Android SDK也完全开源。");
lang_map.set("ja", "amiPro のコアは完全な検証性とセキュリティを提供します。<br>Web開発用JS SDKやアプリ開発用の iOS / Android SDK は完全にオープンソースです。");
i18n_messages.set("info_open_src", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Open source project");
lang_map.set("en", "Open source project");
lang_map.set("zh-CN", "开源项目");
lang_map.set("ja", "オープンソースプロジェクト");
i18n_messages.set("label_open_src", lang_map);
lang_map = new Map();
lang_map.set("en-US", "How to integrate");
lang_map.set("en", "How to integrate");
lang_map.set("zh-CN", "集成方法");
lang_map.set("ja", "導入方法");
i18n_messages.set("title_howto", lang_map);
lang_map = new Map();
lang_map.set("en-US", "amiPro provides standards‑based interfaces and an easy‑to‑use JavaScript SDK for integration. From device registration and sign‑in to device reset management, everything can be implemented easily.<br>No need to modify your server backend—use front‑end JavaScript to integrate.<br>We also provide iOS/Android SDKs for app development.<br>Providing integration support (sales@amipro.me)");
lang_map.set("en", "amiPro provides standards‑based interfaces and an easy‑to‑use JavaScript SDK for integration. From device registration and sign‑in to device reset management, everything can be implemented easily.<br>No need to modify your server backend—use front‑end JavaScript to integrate.<br>We also provide iOS/Android SDKs for app development.<br>Providing integration support (sales@amipro.me)");
lang_map.set("zh-CN", "amiPro 提供基于标准的接口以及便于集成的 JavaScript SDK。从设备注册、登录到设备重置管理,都可以轻松实现。<br>无需修改您的服务器后端,仅使用前端 JavaScript 即可完成集成。<br>同时提供用于 App 开发的 iOS/Android SDK,便于集成。<br>提供导入支持(sales@amipro.me)");
lang_map.set("ja", "amiProは、統合のための標準的なインターフェイスと便利なJavaScript SDKを提供します。<br>デバイスの登録、ログインからデバイスのリセット管理まで、すべて簡単に実装できます。<br>サーバーのバックグラウンドを変更する必要はありません、<br>フロントエンド JavaScript を使用するだけで統合を実現できます。<br>同時に、App 開発用の iOS / Android SDK も提供しています。 導入サポートが必要な場合は<br> sales@amipro.me へメールでご連絡ください。");
i18n_messages.set("info_howto", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Integration Steps");
lang_map.set("en", "Integration Steps");
lang_map.set("zh-CN", "集成步骤");
lang_map.set("ja", "導入手順");
i18n_messages.set("label_integration", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Cost");
lang_map.set("en", "Cost");
lang_map.set("zh-CN", "费用");
lang_map.set("ja", "費用");
i18n_messages.set("title_howmuch", lang_map);
lang_map = new Map();
lang_map.set("en-US", "amiPro provides the highest cost performance billing model based on the number of <b>active users</b>. Regardless of the number of registered users, you only need to pay for per active user (users who log in at least once a month) per month or per authentication.<br>Provide discount plans for sites with a large number of active users.");
lang_map.set("en", "amiPro provides the highest cost performance billing model based on the number of <b>active users</b>. Regardless of the number of registered users, you only need to pay for per active user (users who log in at least once a month) per month or per authentication.<br>Provide discount plans for sites with a large number of active users.");
lang_map.set("zh-CN", "提供基于<b>活动用户数</b>的最高性价比的计费模式。与注册用户数无关,每月只需为每个活动用户(每月至少登录一次的用户)或者按认证次数支付费用。<br>对活动用户数较大的网站提供优惠方案。");
lang_map.set("ja", "<b>アクティブユーザー数</b>に基づいた最高のコストパフォーマンスの課金モデルを提供します。<br>登録ユーザー数に関係なく、毎月アクティブユーザー(毎月最低1回ログインするユーザー)或いは認証利用数ごとのお支払いとなります。<br>割引プランもご用意しております。");
i18n_messages.set("info_howmuch", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("en", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("zh-CN", "三个月免费试用<br>(免费注册管理门户后,所有功能免费试用三个月)<br> 无需信用卡");
lang_map.set("ja", "3ヶ月間の無料トライアル<br>(管理ポータルの無料登録後、すべての機能を3ヶ月間無料でお試しいただけます)<br> クレジットカードは不要です。");
i18n_messages.set("btn_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "amiPro LLC.");
lang_map.set("en", "amiPro LLC.");
lang_map.set("zh-CN", "amiPro LLC.");
lang_map.set("ja", "amiPro合同会社");
i18n_messages.set("company_name", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Established March 3, 2023");
lang_map.set("en", "Established March 3, 2023");
lang_map.set("zh-CN", "2023年3月3日成立");
lang_map.set("ja", "2023年3月3日設立");
i18n_messages.set("company_open", lang_map);
lang_map = new Map();
lang_map.set("en-US", "2F Kuwano Building, 6-23-4 Jingumae, Shibuya-ku, Tokyo 150-0001");
lang_map.set("en", "2F Kuwano Building, 6-23-4 Jingumae, Shibuya-ku, Tokyo 150-0001");
lang_map.set("zh-CN", "东京都涩谷区神宫前6-23-4桑野大厦2F 邮编 150-0001");
lang_map.set("ja", "〒150-0001 東京都渋谷区神宮前六丁目23番4号 桑野ビル2階");
i18n_messages.set("company_addr", lang_map);
lang_map = new Map();
lang_map.set("en-US", "More details");
lang_map.set("en", "More details");
lang_map.set("zh-CN", "更多详情");
lang_map.set("ja", "詳細");
i18n_messages.set("label_open_passkey", lang_map);
i18n_messages.set("top_msg", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO2: From $18.82 billion in 2024 to $60.34 billion in 2032");
lang_map.set("en", "FIDO2: From $18.82 billion in 2024 to $60.34 billion in 2032");
lang_map.set("zh-CN", "FIDO2:从 2024 年的 188.2 亿美元增至 2032 年的 603.4 亿美元");
lang_map.set("ja", "FIDO2: 2024年の188.2億米ドルから2032年には603.4億米ドルへ");
i18n_messages.set("top_msg", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey cloud platform");
lang_map.set("en", "Passkey cloud platform");
lang_map.set("ja", "パスキー・クラウド・プラットフォーム");
i18n_messages.set("hero_eyebrow", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO2 journeys people want to finish");
lang_map.set("en", "FIDO2 journeys people want to finish");
lang_map.set("ja", "最後までスムーズに完了できるFIDO2体験");
i18n_messages.set("hero_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Launch delightful, phishing-proof login experiences with a fully managed Passkey\nbackbone, open-source SDKs that drop into any stack in minutes.");
lang_map.set("en", "Launch delightful, phishing-proof login experiences with a fully managed Passkey\nbackbone, open-source SDKs that drop into any stack in minutes.");
lang_map.set("ja", "フルマネージドなPasskey基盤と、どんなスタックにも数分で組み込める\nオープンソースSDKで、心地よくフィッシング耐性のあるログイン体験を提供します。");
i18n_messages.set("hero_lead", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO2 certified");
lang_map.set("en", "FIDO2 certified");
lang_map.set("ja", "FIDO2認証済み");
i18n_messages.set("hero_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Core server + Open source SDK");
lang_map.set("en", "Core server + Open source SDK");
lang_map.set("ja", "コアサーバー+オープンソースSDK");
i18n_messages.set("hero_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Device recovery flows");
lang_map.set("en", "Device recovery flows");
lang_map.set("ja", "デバイス復旧フロー");
i18n_messages.set("hero_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO certified");
lang_map.set("en", "FIDO certified");
lang_map.set("ja", "FIDO認証");
i18n_messages.set("stat_label_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Fast onboarding");
lang_map.set("en", "Fast onboarding");
lang_map.set("ja", "迅速な導入");
i18n_messages.set("stat_label_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Platforms");
lang_map.set("en", "Platforms");
lang_map.set("ja", "対応プラットフォーム");
i18n_messages.set("stat_label_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey Ready");
lang_map.set("en", "Passkey Ready");
lang_map.set("ja", "Passkey対応");
i18n_messages.set("device_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Secure, phishing-resistant, privacy-first verification that works on every device.");
lang_map.set("en", "Secure, phishing-resistant, privacy-first verification that works on every device.");
lang_map.set("ja", "あらゆるデバイスで動作する、フィッシング耐性・プライバシー重視の安全な検証。");
i18n_messages.set("device_desc", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Face / Touch");
lang_map.set("en", "Face / Touch");
lang_map.set("ja", "Face / Touch");
i18n_messages.set("device_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Security keys");
lang_map.set("en", "Security keys");
lang_map.set("ja", "セキュリティキー");
i18n_messages.set("device_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Recovery links");
lang_map.set("en", "Recovery links");
lang_map.set("ja", "復旧リンク");
i18n_messages.set("device_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Instant integration");
lang_map.set("en", "Instant integration");
lang_map.set("ja", "すぐに導入");
i18n_messages.set("panel_title_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Add FIDO2 login with a few lines of JavaScript. No backend rewrites or new auth servers required.");
lang_map.set("en", "Add FIDO2 login with a few lines of JavaScript. No backend rewrites or new auth servers required.");
lang_map.set("ja", "数行のJavaScriptでFIDO2ログインを追加。バックエンド改修や新しい認証サーバーは不要です。");
i18n_messages.set("panel_desc_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Device lifecycle");
lang_map.set("en", "Device lifecycle");
lang_map.set("ja", "デバイス管理");
i18n_messages.set("panel_title_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Allow users to add, revoke, or recover devices with guided flows powered by amiPro APIs.");
lang_map.set("en", "Allow users to add, revoke, or recover devices with guided flows powered by amiPro APIs.");
lang_map.set("ja", "amiPro APIで、デバイスの追加・無効化・復旧をガイド付きフローで提供できます。");
i18n_messages.set("panel_desc_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Operational visibility");
lang_map.set("en", "Operational visibility");
lang_map.set("ja", "運用の可視化");
i18n_messages.set("panel_title_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Get analytics on adoption, fraud attempts, and top devices directly from the management portal.");
lang_map.set("en", "Get analytics on adoption, fraud attempts, and top devices directly from the management portal.");
lang_map.set("ja", "管理ポータルから、利用状況・不正兆候・主要デバイスを確認できます。");
i18n_messages.set("panel_desc_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Ready to launch your Passkey experience?");
lang_map.set("en", "Ready to launch your Passkey experience?");
lang_map.set("ja", "Passkey体験を始めませんか?");
i18n_messages.set("cta_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Spin up the portal, invite your team, and go live in days.");
lang_map.set("en", "Spin up the portal, invite your team, and go live in days.");
lang_map.set("ja", "ポータルを用意し、チームを招待して、数日で公開できます。");
i18n_messages.set("cta_desc", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Open portal");
lang_map.set("en", "Open portal");
lang_map.set("ja", "ポータルを開く");
i18n_messages.set("cta_btn_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "See integration guide");
lang_map.set("en", "See integration guide");
lang_map.set("ja", "導入ガイドを見る");
i18n_messages.set("cta_btn_integration", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Company");
lang_map.set("en", "Company");
lang_map.set("ja", "会社名");
i18n_messages.set("tbl_company", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Founded");
lang_map.set("en", "Founded");
lang_map.set("ja", "設立");
i18n_messages.set("tbl_founded", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Address");
lang_map.set("en", "Address");
lang_map.set("ja", "所在地");
i18n_messages.set("tbl_address", lang_map);
lang_map = new Map();
lang_map.set("en", "100%");
lang_map.set("ja", "100%");
i18n_messages.set("stat_value_1", lang_map);
lang_map = new Map();
lang_map.set("en", "15 minutes");
lang_map.set("ja", "15分");
i18n_messages.set("stat_value_2", lang_map);
lang_map = new Map();
lang_map.set("en", "All");
lang_map.set("ja", "すべて");
i18n_messages.set("stat_value_3", lang_map);
lang_map = new Map();
lang_map.set("en", "Why Choose amiPro Passkey Hub?");
lang_map.set("ja", "なぜamiPro Passkey Hubを選ぶのか?");
lang_map.set("zh-CN", "为什么选择 amiPro Passkey Hub?");
i18n_messages.set("static_why_title", lang_map);
lang_map = new Map();
lang_map.set("en", "100% FIDO2 Compliant");
lang_map.set("ja", "100% FIDO2準拠");
lang_map.set("zh-CN", "100% FIDO2 合规");
i18n_messages.set("static_f1_title", lang_map);
lang_map = new Map();
lang_map.set("en", "amiPro has passed the FIDO2 conformance test 100%. The entire stack — from browser to SDK — aligns with the latest FIDO2 standard.");
lang_map.set("ja", "amiProはFIDO2互換性テストを100%パスしています。ブラウザからSDKに至るまで、すべてが最新のFIDO2標準に統一されています。");
lang_map.set("zh-CN", "amiPro 100% 通过 FIDO2 兼容性测试。从浏览器到 SDK,全部统一至最新 FIDO2 标准。");
i18n_messages.set("static_f1_desc", lang_map);
lang_map = new Map();
lang_map.set("en", "Fully Open Source");
lang_map.set("ja", "完全オープンソース");
lang_map.set("zh-CN", "完全开源");
i18n_messages.set("static_f2_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Core FIDO2 server and all SDKs (JavaScript, iOS, Android) are completely open source for full verifiability and security transparency.");
lang_map.set("ja", "コアFIDO2サーバーとすべてのSDK(JavaScript、iOS、Android)は完全にオープンソースで、完全な検証性とセキュリティの透明性を提供します。");
lang_map.set("zh-CN", "核心 FIDO2 服务器和所有 SDK(JavaScript、iOS、Android)完全开源,提供完整的可验证性和安全透明度。");
i18n_messages.set("static_f2_desc", lang_map);
lang_map = new Map();
lang_map.set("en", "15-Minute Integration");
lang_map.set("ja", "15分で統合");
lang_map.set("zh-CN", "15 分钟集成");
i18n_messages.set("static_f3_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Add FIDO2 login with a few lines of JavaScript. No backend rewrites or new authentication servers required.");
lang_map.set("ja", "数行のJavaScriptでFIDO2ログインを追加。バックエンド改修や新しい認証サーバーは不要です。");
lang_map.set("zh-CN", "几行 JavaScript 即可添加 FIDO2 登录,无需修改后端或部署新认证服务器。");
i18n_messages.set("static_f3_desc", lang_map);
lang_map = new Map();
lang_map.set("en", "Active-User Pricing");
lang_map.set("ja", "アクティブユーザー課金");
lang_map.set("zh-CN", "按活跃用户计费");
i18n_messages.set("static_f4_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Pay only for active users (monthly or per authentication). 3-month free trial with no credit card required.");
lang_map.set("ja", "アクティブユーザー数のみ課金(月額または認証ごと)。クレジットカード不要の3ヶ月間無料トライアルあり。");
lang_map.set("zh-CN", "仅按活跃用户计费(月付或按次)。3 个月免费试用,无需信用卡。");
i18n_messages.set("static_f4_desc", lang_map);
window.onload = async function() {
setI18NText(i18n_messages)
initRevealAnimations()
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
@@ -407,6 +478,54 @@
"url": "https://amipro.me/fido2_top.html"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is a passkey?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A passkey is a FIDO2-based passwordless authentication credential that uses biometrics (fingerprint, face recognition) or hardware security keys to sign in to websites and apps. Passkeys are phishing-resistant, more secure than passwords, and provide a faster sign-in experience."
}
},
{
"@type": "Question",
"name": "How does amiPro Passkey Hub work?",
"acceptedAnswer": {
"@type": "Answer",
"text": "amiPro Passkey Hub provides a fully managed FIDO2-certified cloud service with open-source SDKs for JavaScript, iOS, and Android. Developers integrate passkey authentication by adding a few lines of JavaScript—no backend rewrites needed. The platform handles device registration, recovery, and analytics through a management portal."
}
},
{
"@type": "Question",
"name": "How much does amiPro Passkey Hub cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "amiPro uses an active-user-based billing model. You only pay for users who log in at least once per month, either per active user per month or per authentication. A 3-month free trial is available with no credit card required. Discount plans are available for high-volume sites."
}
},
{
"@type": "Question",
"name": "What FIDO2 compliance does amiPro have?",
"acceptedAnswer": {
"@type": "Answer",
"text": "amiPro has passed the FIDO2 conformance test 100%. The entire stack—from browser to SDK—aligns with the latest FIDO2 standard, ensuring maximum compatibility and security."
}
},
{
"@type": "Question",
"name": "Is amiPro's SDK open source?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. amiPro's core FIDO2 server and all SDKs (JavaScript for web, iOS, and Android for mobile apps) are completely open source, providing full verifiability and security transparency."
}
}
]
}
</script>
</head>
@@ -461,15 +580,15 @@
</div>
<div class="hero__stats" style="margin-top: 2rem;">
<div class="stat-card">
<strong>100%</strong>
<strong id="stat_value_1">100%</strong>
<span id="stat_label_1">FIDO certified</span>
</div>
<div class="stat-card">
<strong>15 minutes</strong>
<strong id="stat_value_2">15 minutes</strong>
<span id="stat_label_2">Fast onboarding</span>
</div>
<div class="stat-card">
<strong>All</strong>
<strong id="stat_value_3">All</strong>
<span id="stat_label_3">Platforms</span>
</div>
</div>
@@ -494,6 +613,28 @@
</div>
</section>
<section style="margin: 2rem 12px; padding: 2rem; background: #f0f9ff; border-radius: 12px; border-left: 4px solid #2563eb;">
<h2 id="static_why_title" style="font-size: 1.5rem; font-weight: 600; color: #0f172a; margin-bottom: 1rem;">Why Choose amiPro Passkey Hub?</h2>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; margin-top: 1rem;">
<div>
<h3 id="static_f1_title" style="font-size: 1.1rem; font-weight: 600; color: #1e40af; margin-bottom: 0.5rem;">100% FIDO2 Compliant</h3>
<p id="static_f1_desc" style="color: #475569; margin: 0;">amiPro has passed the FIDO2 conformance test 100%. The entire stack — from browser to SDK — aligns with the latest FIDO2 standard.</p>
</div>
<div>
<h3 id="static_f2_title" style="font-size: 1.1rem; font-weight: 600; color: #1e40af; margin-bottom: 0.5rem;">Fully Open Source</h3>
<p id="static_f2_desc" style="color: #475569; margin: 0;">Core FIDO2 server and all SDKs (JavaScript, iOS, Android) are completely open source for full verifiability and security transparency.</p>
</div>
<div>
<h3 id="static_f3_title" style="font-size: 1.1rem; font-weight: 600; color: #1e40af; margin-bottom: 0.5rem;">15-Minute Integration</h3>
<p id="static_f3_desc" style="color: #475569; margin: 0;">Add FIDO2 login with a few lines of JavaScript. No backend rewrites or new authentication servers required.</p>
</div>
<div>
<h3 id="static_f4_title" style="font-size: 1.1rem; font-weight: 600; color: #1e40af; margin-bottom: 0.5rem;">Active-User Pricing</h3>
<p id="static_f4_desc" style="color: #475569; margin: 0;">Pay only for active users (monthly or per authentication). 3-month free trial with no credit card required.</p>
</div>
</div>
</section>
<div class="row row-cols-1 row-cols-md-3 g-4 mb-5" style="margin: 12px;">
<div class="col" data-animate>
<div class="card h-100 glow-card">
@@ -509,7 +650,7 @@
</div>
<div class="col" data-animate>
<div class="card h-100 glow-card">
<img class="card-img-top" src="files/growup.jpg" alt="Growup">
<img class="card-img-top" src="files/growup.jpg" alt="Passkey adoption growth chart showing market expansion">
<div class="card-body">
<h5 class="card-title" id="title_passkey_merits">Passkey benefits</h5>
<p class="card-text" id="info_passkey_merits">
@@ -521,7 +662,7 @@
</div>
<div class="col" data-animate>
<div class="card h-100 glow-card">
<img class="card-img-top" src="files/fido.jpg" alt="amiPro Strength: fido">
<img class="card-img-top" src="files/fido.jpg" alt="FIDO2 certification compliance diagram">
<div class="card-body">
<h5 class="card-title" id="title_amipro_fido">Why amiPro: Standards compliance</h5>
<p class="card-text" id="info_amipro_fido">
@@ -533,7 +674,7 @@
</div>
<div class="col" data-animate>
<div class="card h-100 glow-card">
<img class="card-img-top" src="files/opensrc.jpg" alt="Open source">
<img class="card-img-top" src="files/opensrc.jpg" alt="Open source FIDO2 server and SDK code repository">
<div class="card-body">
<h5 class="card-title" id="title_open_src">Why amiPro: Open source</h5>
<p class="card-text" id="info_open_src">
@@ -545,7 +686,7 @@
</div>
<div class="col" data-animate>
<div class="card h-100 glow-card">
<img class="card-img-top" src="files/build.jpg" alt="how to">
<img class="card-img-top" src="files/build.jpg" alt="Passkey integration code snippet showing JavaScript SDK setup">
<div class="card-body">
<h5 class="card-title" id="title_howto">How to integrate</h5>
<p class="card-text" id="info_howto">
@@ -557,7 +698,7 @@
</div>
<div class="col" data-animate>
<div class="card h-100 glow-card">
<img class="card-img-top" src="files/howmuch.jpg" alt="How much">
<img class="card-img-top" src="files/howmuch.jpg" alt="Active user based pricing model overview">
<div class="card-body">
<h5 class="card-title" id="title_howmuch">Cost</h5>
<p class="card-text" id="info_howmuch">
+148 -4
View File
@@ -4,16 +4,60 @@
'use strict';
var _currentLang = null;
var _i18n_map = null;
function getCurrentLanguage() {
if (_currentLang) return _currentLang;
var stored = localStorage.getItem('amipro_lang');
if (stored) { _currentLang = stored; return stored; }
var browserLang = window.navigator.language || 'en';
if (browserLang.indexOf('ja') === 0) return 'ja';
return 'en';
}
function setLanguage(lang) {
_currentLang = lang;
localStorage.setItem('amipro_lang', lang);
document.documentElement.lang = lang;
if (_i18n_map) setI18NText(_i18n_map);
updateImages(lang);
var sel = document.getElementById('lang-selector');
if (sel) sel.value = lang;
}
function updateImages(lang) {
var heroImg = document.getElementById('hero-image');
var searchImg = document.getElementById('search-image');
if (heroImg) {
if (lang === 'ja') {
heroImg.src = 'contextwizard-files/cw-banner-jp.png';
} else {
heroImg.src = 'contextwizard-files/screen-platforms-640-400.jpg';
}
}
if (searchImg) {
if (lang === 'ja') {
searchImg.src = 'contextwizard-files/screen-search-640-400-jp.jpg';
} else {
searchImg.src = 'contextwizard-files/screen-search-640-400.jpg';
}
}
}
function setI18NText(i18n_map){
_i18n_map = i18n_map;
var lang = getCurrentLanguage();
for (const key of i18n_map.keys()) {
const elm = $("#"+key);
if(elm){
const lang = window.navigator.language;
var elem = i18n_map.get(key)
var msg = null
if(elem){
msg = elem.get(lang)
if(!msg && lang && lang.indexOf('-') > -1) msg = elem.get(lang.split('-')[0]);
if(!msg) msg = elem.get('en');
if(!msg) msg = elem.get('en-US');
}
if(!msg)msg = key+"-"+lang
@@ -24,12 +68,12 @@ function setI18NText(i18n_map){
}
function getI18NText(i18n_map, key){
const lang = window.navigator.language;
var lang = getCurrentLanguage();
var elem = i18n_map.get(key)
var msg = null
if(elem){
msg = elem.get(lang)
if(!msg && lang && lang.indexOf('-') > -1) msg = elem.get(lang.split('-')[0]);
if(!msg) msg = elem.get('en');
if(!msg) msg = elem.get('en-US');
}
if(!msg)msg = key+"-"+lang
@@ -37,6 +81,106 @@ function getI18NText(i18n_map, key){
return msg
}
function createLanguageSelector() {
var current = getCurrentLanguage();
var wrapper = document.createElement('div');
wrapper.className = 'lang-selector-wrapper lang-selector-floating';
wrapper.id = 'lang-selector-draggable';
wrapper.innerHTML = '<select id="lang-selector" class="lang-selector" onchange="setLanguage(this.value)">' +
'<option value="en"' + (current === 'en' ? ' selected' : '') + '>EN</option>' +
'<option value="ja"' + (current === 'ja' ? ' selected' : '') + '>JA</option>' +
'</select>';
var savedPos = localStorage.getItem('amipro_lang_pos');
if (savedPos) {
try {
var pos = JSON.parse(savedPos);
wrapper.style.left = pos.x + 'px';
wrapper.style.top = pos.y + 'px';
wrapper.style.right = 'auto';
} catch(e) {}
}
makeDraggable(wrapper);
return wrapper;
}
function makeDraggable(el) {
var isDragging = false;
var startX, startY, startLeft, startTop;
el.style.cursor = 'grab';
el.addEventListener('mousedown', function(e) {
if (e.target.tagName === 'SELECT') return;
isDragging = true;
startX = e.clientX;
startY = e.clientY;
startLeft = el.offsetLeft;
startTop = el.offsetTop;
el.style.cursor = 'grabbing';
el.style.right = 'auto';
e.preventDefault();
});
document.addEventListener('mousemove', function(e) {
if (!isDragging) return;
var dx = e.clientX - startX;
var dy = e.clientY - startY;
var newLeft = startLeft + dx;
var newTop = startTop + dy;
newLeft = Math.max(0, Math.min(newLeft, window.innerWidth - el.offsetWidth));
newTop = Math.max(0, Math.min(newTop, window.innerHeight - el.offsetHeight));
el.style.left = newLeft + 'px';
el.style.top = newTop + 'px';
});
document.addEventListener('mouseup', function() {
if (!isDragging) return;
isDragging = false;
el.style.cursor = 'grab';
localStorage.setItem('amipro_lang_pos', JSON.stringify({
x: el.offsetLeft,
y: el.offsetTop
}));
});
el.addEventListener('touchstart', function(e) {
if (e.target.tagName === 'SELECT') return;
isDragging = true;
startX = e.touches[0].clientX;
startY = e.touches[0].clientY;
startLeft = el.offsetLeft;
startTop = el.offsetTop;
el.style.right = 'auto';
}, { passive: true });
document.addEventListener('touchmove', function(e) {
if (!isDragging) return;
var dx = e.touches[0].clientX - startX;
var dy = e.touches[0].clientY - startY;
var newLeft = startLeft + dx;
var newTop = startTop + dy;
newLeft = Math.max(0, Math.min(newLeft, window.innerWidth - el.offsetWidth));
newTop = Math.max(0, Math.min(newTop, window.innerHeight - el.offsetHeight));
el.style.left = newLeft + 'px';
el.style.top = newTop + 'px';
}, { passive: true });
document.addEventListener('touchend', function() {
if (!isDragging) return;
isDragging = false;
localStorage.setItem('amipro_lang_pos', JSON.stringify({
x: el.offsetLeft,
y: el.offsetTop
}));
});
}
function initRevealAnimations(){
const animated = document.querySelectorAll('.reveal, [data-animate]');
if(!animated || animated.length === 0){
+51
View File
File diff suppressed because one or more lines are too long
+52
View File
@@ -400,3 +400,55 @@ body {
left: -38px;
}
}
.lang-selector-wrapper {
margin-left: 12px;
background: var(--bg-panel);
border: 1px solid var(--border-soft);
border-radius: 8px;
padding: 4px;
backdrop-filter: blur(16px);
display: inline-block;
}
.lang-selector-floating {
position: fixed;
top: 16px;
right: 16px;
z-index: 9999;
margin-left: 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transition: box-shadow 0.2s ease;
display: inline-block;
width: fit-content;
max-width: fit-content;
flex-shrink: 0;
white-space: nowrap;
}
.lang-selector-floating:hover {
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);
}
.lang-selector {
background: transparent;
border: 1px solid var(--border-soft);
border-radius: 8px;
color: var(--text-bright);
padding: 4px 8px;
font-size: 0.85rem;
font-weight: 600;
cursor: pointer;
outline: none;
appearance: none;
-webkit-appearance: none;
}
.lang-selector option {
background: #1e293b;
color: var(--text-bright);
}
.lang-selector:hover {
border-color: var(--brand-primary);
}
+50 -40
View File
@@ -140,192 +140,192 @@
const i18n_messages = new Map();
let lang_map = new Map();
lang_map.set('en-US', 'Privacy-first identity & AI products');
lang_map.set('en', 'Privacy-first identity & AI products');
lang_map.set('ja', 'プライバシー重視のID基盤&AIプロダクト');
i18n_messages.set('nav_tagline', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Contact sales');
lang_map.set('en', 'Contact sales');
lang_map.set('ja', 'お問い合わせ');
i18n_messages.set('nav_contact_sales', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'amiPro, LLC');
lang_map.set('en', 'amiPro, LLC');
lang_map.set('ja', 'amiPro, LLC');
i18n_messages.set('hero_eyebrow', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Secure passkey journeys and privacy tooling for modern teams.');
lang_map.set('en', 'Secure passkey journeys and privacy tooling for modern teams.');
lang_map.set('ja', '現代のチームのための、安全なパスキー体験とプライバシー基盤。');
i18n_messages.set('hero_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'We build production-ready products that make passwordless authentication effortless and\nensure every AI conversation stays under your control.');
lang_map.set('en', 'We build production-ready products that make passwordless authentication effortless and\nensure every AI conversation stays under your control.');
lang_map.set('ja', 'パスワードレス認証を手軽に導入でき、AI会話のデータも手元で管理できる――\n実運用に耐えるプロダクトを提供します。');
i18n_messages.set('hero_lead', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'FIDO2 certified');
lang_map.set('en', 'FIDO2 certified');
lang_map.set('ja', 'FIDO2認証');
i18n_messages.set('hero_chip_1', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Open source SDKs');
lang_map.set('en', 'Open source SDKs');
lang_map.set('ja', 'SDKはオープンソース');
i18n_messages.set('hero_chip_2', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Local-first privacy');
lang_map.set('en', 'Local-first privacy');
lang_map.set('ja', 'ローカルファースト・プライバシー');
i18n_messages.set('hero_chip_3', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Explore Passkey Platform');
lang_map.set('en', 'Explore Passkey Platform');
lang_map.set('ja', 'Passkeyプラットフォームを見る');
i18n_messages.set('hero_btn_passkey', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Discover ContextWizard');
lang_map.set('en', 'Discover ContextWizard');
lang_map.set('ja', 'ContextWizardを見る');
i18n_messages.set('hero_btn_contextwizard', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Built in Tokyo · Shipping globally');
lang_map.set('en', 'Built in Tokyo · Shipping globally');
lang_map.set('ja', 'Tokyo発 · 世界へ');
i18n_messages.set('hero_device_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Founded in 2023, amiPro delivers reliable identity infrastructure, open SDKs, and\nprivacy-first extensions that enterprises can audit and trust.');
lang_map.set('en', 'Founded in 2023, amiPro delivers reliable identity infrastructure, open SDKs, and\nprivacy-first extensions that enterprises can audit and trust.');
lang_map.set('ja', '2023年設立。企業が監査でき、信頼して使えるID基盤・オープンSDK・\nプライバシー重視の拡張機能を提供します。');
i18n_messages.set('hero_device_desc', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'FIDO2 server + SDKs (open source)');
lang_map.set('en', 'FIDO2 server + SDKs (open source)');
lang_map.set('ja', 'FIDO2サーバー+SDK(オープンソース)');
i18n_messages.set('hero_device_li_1', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Device lifecycle tooling');
lang_map.set('en', 'Device lifecycle tooling');
lang_map.set('ja', 'デバイス管理ツール');
i18n_messages.set('hero_device_li_2', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Local-first AI knowledge capture');
lang_map.set('en', 'Local-first AI knowledge capture');
lang_map.set('ja', 'ローカルでAIナレッジを蓄積');
i18n_messages.set('hero_device_li_3', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'What we build');
lang_map.set('en', 'What we build');
lang_map.set('ja', '提供プロダクト');
i18n_messages.set('section_build_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Two flagship products solve the hardest trust problems teams face today—passwordless authentication\nand safe AI adoption.');
lang_map.set('en', 'Two flagship products solve the hardest trust problems teams face today—passwordless authentication\nand safe AI adoption.');
lang_map.set('ja', '2つの主力プロダクトで、パスワードレス認証と安全なAI活用という\n「信頼」の課題を解決します。');
i18n_messages.set('section_build_desc', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Enterprise Passkeys');
lang_map.set('en', 'Enterprise Passkeys');
lang_map.set('ja', 'エンタープライズPasskeys');
i18n_messages.set('badge_passkeys', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'amiPro Passkey Cloud');
lang_map.set('en', 'amiPro Passkey Cloud');
lang_map.set('ja', 'amiPro Passkey Cloud');
i18n_messages.set('product_passkey_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Launch phishing-resistant login backed by our FIDO2-certified cloud, open server, and drop-in SDKs.\nManage registration, recovery, and analytics from one portal.');
lang_map.set('en', 'Launch phishing-resistant login backed by our FIDO2-certified cloud, open server, and drop-in SDKs.\nManage registration, recovery, and analytics from one portal.');
lang_map.set('ja', 'FIDO2認証済みクラウド、オープンサーバー、導入しやすいSDKで\nフィッシング耐性のあるログインを提供。登録・復旧・分析を1つのポータルで管理できます。');
i18n_messages.set('product_passkey_desc', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Go to Passkey hub →');
lang_map.set('en', 'Go to Passkey hub →');
lang_map.set('ja', 'Passkeyの詳細へ →');
i18n_messages.set('product_passkey_link', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'AI Conversation OS');
lang_map.set('en', 'AI Conversation OS');
lang_map.set('ja', 'AI会話のOS');
i18n_messages.set('badge_ai', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'ContextWizard');
lang_map.set('en', 'ContextWizard');
lang_map.set('ja', 'ContextWizard');
i18n_messages.set('product_cw_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Keep every AI conversation searchable, portable, and private. Automatically capture threads across assistants\nwith encryption that never leaves your machine.');
lang_map.set('en', 'Keep every AI conversation searchable, portable, and private. Automatically capture threads across assistants\nwith encryption that never leaves your machine.');
lang_map.set('ja', 'AI会話を検索可能・持ち運び可能・プライベートに。\n端末外に出ない暗号化で、複数アシスタントのスレッドを自動収集します。');
i18n_messages.set('product_cw_desc', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'See ContextWizard →');
lang_map.set('en', 'See ContextWizard →');
lang_map.set('ja', 'ContextWizardの詳細へ →');
i18n_messages.set('product_cw_link', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Built on verifiable foundations');
lang_map.set('en', 'Built on verifiable foundations');
lang_map.set('ja', '検証できる基盤の上に');
i18n_messages.set('section_foundation_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Open standards, published code, and transparent pricing keep vendors accountable. amiPro blends\nJapanese craftsmanship with global security best practices so you can ship faster without compromising trust.');
lang_map.set('en', 'Open standards, published code, and transparent pricing keep vendors accountable. amiPro blends\nJapanese craftsmanship with global security best practices so you can ship faster without compromising trust.');
lang_map.set('ja', 'オープン標準、公開されたコード、透明な価格。ベンダーの説明責任を支えます。\namiProは日本の丁寧なものづくりと世界のセキュリティベストプラクティスを融合し、\n信頼を損なわずにスピーディーな提供を実現します。');
i18n_messages.set('section_foundation_desc', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'FIDO2 Certified Stack');
lang_map.set('en', 'FIDO2 Certified Stack');
lang_map.set('ja', 'FIDO2認証スタック');
i18n_messages.set('value_1', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Open Source SDKs');
lang_map.set('en', 'Open Source SDKs');
lang_map.set('ja', 'SDKはオープンソース');
i18n_messages.set('value_2', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Local-first Privacy');
lang_map.set('en', 'Local-first Privacy');
lang_map.set('ja', 'ローカルファースト・プライバシー');
i18n_messages.set('value_3', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Enterprise Support');
lang_map.set('en', 'Enterprise Support');
lang_map.set('ja', 'エンタープライズサポート');
i18n_messages.set('value_4', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'Company quick facts');
lang_map.set('en', 'Company quick facts');
lang_map.set('ja', '会社概要');
i18n_messages.set('company_facts_title', lang_map);
lang_map = new Map();
lang_map.set('en-US', '<strong>Founded:</strong> March 3, 2023');
lang_map.set('en', '<strong>Founded:</strong> March 3, 2023');
lang_map.set('ja', '<strong>設立:</strong> 2023年3月3日');
i18n_messages.set('fact_founded', lang_map);
lang_map = new Map();
lang_map.set('en-US', '<strong>Location:</strong> 2F Kuwano Building, 6-23-4 Jingumae, Shibuya-ku, Tokyo 150-0001');
lang_map.set('en', '<strong>Location:</strong> 2F Kuwano Building, 6-23-4 Jingumae, Shibuya-ku, Tokyo 150-0001');
lang_map.set('ja', '<strong>所在地:</strong> 〒150-0001 東京都渋谷区神宮前6-23-4 桑野ビル2F');
i18n_messages.set('fact_location', lang_map);
lang_map = new Map();
lang_map.set('en-US', '<strong>Focus:</strong> FIDO2 Infrastructure · AI Privacy Tooling');
lang_map.set('en', '<strong>Focus:</strong> FIDO2 Infrastructure · AI Privacy Tooling');
lang_map.set('ja', '<strong>事業:</strong> FIDO2基盤 · AIプライバシーツール');
i18n_messages.set('fact_focus', lang_map);
lang_map = new Map();
lang_map.set('en-US', '<strong>Contact:</strong> <a href="mailto:sales@amipro.me">sales@amipro.me</a>');
lang_map.set('en', '<strong>Contact:</strong> <a href="mailto:sales@amipro.me">sales@amipro.me</a>');
lang_map.set('ja', '<strong>連絡先:</strong> <a href="mailto:sales@amipro.me">sales@amipro.me</a>');
i18n_messages.set('fact_contact', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'FIDO2 Platform');
lang_map.set('en', 'FIDO2 Platform');
lang_map.set('ja', 'FIDO2プラットフォーム');
i18n_messages.set('footer_fido2', lang_map);
lang_map = new Map();
lang_map.set('en-US', 'ContextWizard');
lang_map.set('en', 'ContextWizard');
lang_map.set('ja', 'ContextWizard');
i18n_messages.set('footer_cw', lang_map);
@@ -336,6 +336,9 @@
if (typeof initRevealAnimations === 'function') {
initRevealAnimations();
}
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
};
</script>
<script type="application/ld+json">
@@ -357,8 +360,15 @@
},
"email": "sales@amipro.me",
"sameAs": [
"https://www.linkedin.com/company/amipro"
]
"https://www.linkedin.com/company/amipro",
"https://github.com/amipro-llc",
"https://chromewebstore.google.com/detail/contextwizard/lmhnmmedgmnfggecdalkancllnekofnb"
],
"contactPoint": {
"@type": "ContactPoint",
"email": "sales@amipro.me",
"contactType": "sales"
}
}
</script>
</head>
+88 -31
View File
@@ -11,7 +11,14 @@
content="width=device-width, initial-scale=1.0"
/>
<title> Integration - amiPro </title>
<title>Passkey Integration Guide - 15-Minute Setup | amiPro</title>
<link rel="canonical" href="https://amipro.me/integration.html" />
<!-- Hreflang -->
<link rel="alternate" hreflang="en" href="https://amipro.me/integration.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/ja/integration.html" />
<link rel="alternate" hreflang="zh-CN" href="https://amipro.me/zh-CN/integration.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/integration.html" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-850DCHX9EJ"></script>
@@ -23,7 +30,39 @@
gtag('config', 'G-850DCHX9EJ');
</script>
<meta name="description" content="the easiest to integrate Passkey cloud service" />
<meta name="description" content="Step-by-step guide to integrate amiPro FIDO2 passkey authentication. Drop-in JavaScript SDK, device management, and session control in 15 minutes." />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:title" content="Passkey Integration Guide - 15-Minute Setup | amiPro" />
<meta property="og:description" content="Step-by-step guide to integrate amiPro FIDO2 passkey authentication. Drop-in JavaScript SDK, device management, and session control in 15 minutes." />
<meta property="og:url" content="https://amipro.me/integration.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/build.jpg" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Passkey Integration Guide - 15-Minute Setup | amiPro" />
<meta name="twitter:description" content="Step-by-step guide to integrate amiPro FIDO2 passkey authentication. Drop-in JavaScript SDK, device management, and session control in 15 minutes." />
<meta name="twitter:image" content="https://amipro.me/files/build.jpg" />
<!-- JSON-LD Article -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Passkey Integration Guide - 15-Minute Setup",
"description": "Step-by-step guide to integrate amiPro FIDO2 passkey authentication. Drop-in JavaScript SDK, device management, and session control in 15 minutes.",
"url": "https://amipro.me/integration.html",
"publisher": {
"@type": "Organization",
"name": "amiPro",
"url": "https://amipro.me"
},
"image": "https://amipro.me/files/build.jpg",
"mainEntityOfPage": "https://amipro.me/integration.html"
}
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
@@ -75,164 +114,182 @@
const i18n_messages = new Map();
var lang_map = new Map();
lang_map.set("en-US", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("en", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("zh-CN", "amiPro - 最易集成的Passkey云服务");
lang_map.set("ja", "amiPro - 最も簡単に統合できるパスキー・クラウド・サービス");
i18n_messages.set("label_welcome", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Sample site");
lang_map.set("en", "Sample site");
lang_map.set("zh-CN", "示例网站");
lang_map.set("ja", "サンプルサイト");
i18n_messages.set("label_sample", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact_cta", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("en", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("zh-CN", "三个月免费试用<br>(免费注册管理门户后,所有功能免费试用三个月)<br> 无需信用卡");
lang_map.set("ja", "3ヶ月間の無料トライアル<br>(管理ポータルの無料登録後、すべての機能を3ヶ月間無料でお試しいただけます)<br> クレジットカードは不要です。");
i18n_messages.set("btn_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "How to integrate");
lang_map.set("en", "How to integrate");
lang_map.set("zh-CN", "如何集成");
lang_map.set("ja", "統合方法");
i18n_messages.set("label_integartion_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step1: Open sample site");
lang_map.set("en", "Step1: Open sample site");
lang_map.set("zh-CN", "步骤1: 打开示例网站");
lang_map.set("ja", "ステップ1: サンプルサイトを開く");
i18n_messages.set("btn_step1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Click the following link to enter the sample website. In the following instructions you will need to refer to the source code of the sample website. <br><a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>");
lang_map.set("en", "Click the following link to enter the sample website. In the following instructions you will need to refer to the source code of the sample website. <br><a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>");
lang_map.set("zh-CN", "点击以下链接,进入示例网站。在以下的说明中您将需要参考示例网站的源代码。<br><a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>");
lang_map.set("ja", "以下のリンクをクリックして、サンプルサイトに入ってください。以下の説明では、サンプルサイトのソースコードを参照する必要があります。<br><a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>");
i18n_messages.set("info_top_step1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step2: Login page integration");
lang_map.set("en", "Step2: Login page integration");
lang_map.set("zh-CN", "步骤2: 登录页面集成");
lang_map.set("ja", "ステップ2: ログインページの統合");
i18n_messages.set("btn_step2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Reference the sample site to introduce the amiPro JavaScript SDK and call the Passkey login integration API with UI.");
lang_map.set("en", "Reference the sample site to introduce the amiPro JavaScript SDK and call the Passkey login integration API with UI.");
lang_map.set("zh-CN", "参考示例网站,在登录页面引入amiPro JavaScript SDK,并调用带UI的 Passkey 登录集成API。");
lang_map.set("ja", "サンプルサイトを参考にして、amiPro JavaScript SDK を導入し、UI付きのパスキー・ログイン統合 API を呼び出します。");
i18n_messages.set("info_top_step2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step3: Build devices management page");
lang_map.set("en", "Step3: Build devices management page");
lang_map.set("zh-CN", "步骤3: 构建设备管理页面");
lang_map.set("ja", "ステップ3: デバイス管理ページの構築");
i18n_messages.set("btn_step3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Refer to the example website, include the amiPro JavaScript SDK on the appropriate page after login, and call the device management integration API with UI.");
lang_map.set("en", "Refer to the example website, include the amiPro JavaScript SDK on the appropriate page after login, and call the device management integration API with UI.");
lang_map.set("zh-CN", "参考示例网站,在登录后的适当页面引入amiPro JavaScript SDK,并调用带UI的设备管理集成API。");
lang_map.set("ja", "サンプルサイトを参考にして、ログイン後の適切なページにamiPro JavaScript SDKを導入し、UI付きのデバイス管理統合APIを呼び出します。");
i18n_messages.set("info_top_step3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step4: Session management");
lang_map.set("en", "Step4: Session management");
lang_map.set("zh-CN", "步骤4: 会话管理");
lang_map.set("ja", "ステップ4: セッション管理");
i18n_messages.set("btn_step4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "There are two methods of session management:<br>Method 1. Use amiPro's validSession API to manage sessions. Refer to the setSessionStatus function in <a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>. <br>Method 2: Use your website's original session management, just call amiPro's logoutFido2UserSession function in your website's original session timeout processing.");
lang_map.set("en", "There are two methods of session management:<br>Method 1. Use amiPro's validSession API to manage sessions. Refer to the setSessionStatus function in <a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>. <br>Method 2: Use your website's original session management, just call amiPro's logoutFido2UserSession function in your website's original session timeout processing.");
lang_map.set("zh-CN", "会话管理有两种方式:<br>方式1、使用amiPro的validSession API 管理会话。参考<a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>中的setSessionStatus函数。<br>方式2、使用您的网站原有的会话管理,只需在您的网站原有的会话超时的处理中调用amiPro的logoutFido2UserSession函数。");
lang_map.set("ja", "セッション管理は2つ方法があります:<br>方法 1: amiPro の validSession API を使用してセッションを管理します。<a href='https://sample.amipro.me/modal-demo.html' target='_blank'>https://sample.amipro.me/modal-demo.html</a>にあるsetSessionStatus関数を参考してください。 <br>方法 2: Web サイトの既存のセッション管理を使用します。Web サイトの既存のセッションのタイムアウト処理の中に、 amiPro の logoutFido2UserSession 関数を呼び出すだけで管理出来ます。");
i18n_messages.set("info_top_step4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step5: Management Portal registration");
lang_map.set("en", "Step5: Management Portal registration");
lang_map.set("zh-CN", "步骤5: 管理门户注册");
lang_map.set("ja", "ステップ5: 管理ポータル登録");
i18n_messages.set("btn_step5", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Use your email address to register amiPro management portal for free:<br>1. Please use the PC and other devices you plan to manage amiPro and open the following link with your browser. <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. In the management portal, enter your email address and click the [Create Account/Add new device] link. <br>3. Use the same browser to open the link in the email you received and add the device<br>4. Click [Go to top page] and use the added device [Passkey Login].<br><img src='files/portal_reg_en.jpg' width=50%>");
lang_map.set("en", "Use your email address to register amiPro management portal for free:<br>1. Please use the PC and other devices you plan to manage amiPro and open the following link with your browser. <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. In the management portal, enter your email address and click the [Create Account/Add new device] link. <br>3. Use the same browser to open the link in the email you received and add the device<br>4. Click [Go to top page] and use the added device [Passkey Login].<br><img src='files/portal_reg_en.jpg' width=50%>");
lang_map.set("zh-CN", "使用您的邮件地址免费注册amiPro管理门户: <br>1、请用您准备管理amiPro的PC等设备及其浏览器打开以下链接。<br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2、在管理门户中,输入您的邮件地址并点击【创建新账号或添加新设备】链接。<br>3、使用相同的浏览器打开您收到的邮件中的链接并添加设备<br>4、点击【去首页】,使用添加的设备【Passkey登录】进入管理门户。<br><img src='files/portal_reg_jp.jpg' width=50%>");
lang_map.set("ja", "電子メール アドレスを使用して、amiPro 管理ポータルに無料でサインアップします: <br>1. amiPro を管理する予定の PC およびその他のデバイスを使用し、ブラウザで次のリンクを開いてください。 <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. 管理ポータルで、電子メール アドレスを入力し、[アカウントを作成・新しいデバイスを追加] リンクをクリックしてください。 <br>3. 受信した電子メールにあるURLを同じブラウザで開いてデバイスを追加してください。<br>4. [トップページへ] をクリックして、登録したデバイスで[パスキーでログイン]でログインして、トップページへ。<br><img src='files/portal_reg_jp.jpg' width=50%>");
i18n_messages.set("info_top_step5", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step6: FIDO2 server settings");
lang_map.set("en", "Step6: FIDO2 server settings");
lang_map.set("zh-CN", "步骤6: FIDO2服务器设置");
lang_map.set("ja", "ステップ6: FIDO2 サーバー設定");
i18n_messages.set("btn_step6", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Advanced Custom Deployment");
lang_map.set("en", "Advanced Custom Deployment");
lang_map.set("zh-CN", "深入定制部署");
lang_map.set("ja", "高度なカスタムデプロイメント");
i18n_messages.set("label_custom_deploy_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Web Component integration, custom UI, and backend API integration for advanced deployment options");
lang_map.set("en", "Web Component integration, custom UI, and backend API integration for advanced deployment options");
lang_map.set("zh-CN", "Web Component 集成、自定义 UI 和后端 API 集成等高级部署选项");
lang_map.set("ja", "高度なデプロイメントオプションについては、Web Component統合、カスタムUI、バックエンドAPI統合");
i18n_messages.set("label_custom_deploy_desc", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Advanced Custom Deployment →");
lang_map.set("en", "Advanced Custom Deployment →");
lang_map.set("zh-CN", "深入定制部署 →");
lang_map.set("ja", "高度なカスタムデプロイメント →");
i18n_messages.set("btn_custom_deploy", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Click [Settings] on the Portal left menu, and then click [Add] on the right page. Enter your website domain name (the port number cannot be included), and note that your website needs to use the HTTPS protocol. <br>【[Device Registration Page] is a link to the page where device management was integrated in step 3. <br>Other settings can be left as default. Click [Submit] to complete the settings.<br><img src='files/portal_conf_en.jpg' width=80%>");
lang_map.set("en", "Click [Settings] on the Portal left menu, and then click [Add] on the right page. Enter your website domain name (the port number cannot be included), and note that your website needs to use the HTTPS protocol. <br>【[Device Registration Page] is a link to the page where device management was integrated in step 3. <br>Other settings can be left as default. Click [Submit] to complete the settings.<br><img src='files/portal_conf_en.jpg' width=80%>");
lang_map.set("zh-CN", "点击管理门户左侧菜单中的【设定】,之后点击右侧页面中的【添加】。输入您的网站域名(不能包含端口号),注意您的网站需要使用HTTPS协议。<br>【[设备注册页面] 是在步骤 3 中集成设备管理功能的页面链接。<br>其他设置可以保留默认值。最后需要点击【提 交】完成设定。<br><img src='files/portal_conf_jp.jpg' width=80%>");
lang_map.set("ja", "管理ポータル左メニューの[設定]をクリックし、右ページの[追加]をクリックしてください。 Web サイトのドメイン名を入力します (ポート番号は含めることはできません)。Web サイトでは HTTPS プロトコルを使用する必要があることに注意してください。 <br>【デバイス登録ページ】は手順3でデバイス管理を統合したページへのリンクです。<br>そのたの設定はデフォルトでよい、最後は送信をクリックして設定完了<br><img src='files/portal_conf_jp.jpg' width=80%>");
i18n_messages.set("info_top_step6", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Ship Passkeys in 15 Minutes");
lang_map.set("en", "Ship Passkeys in 15 Minutes");
lang_map.set("zh-CN", "在15分钟内部署Passkey");
lang_map.set("ja", "15分でパスキーを導入");
i18n_messages.set("hero_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Follow the production-proven playbook: explore the sample site, drop in the JavaScript SDK, fine-tune device management, and configure the amiPro portal for your domains.");
lang_map.set("en", "Follow the production-proven playbook: explore the sample site, drop in the JavaScript SDK, fine-tune device management, and configure the amiPro portal for your domains.");
lang_map.set("zh-CN", "遵循已在生产中验证的流程:查看示例站点,嵌入 JavaScript SDK,微调设备管理,并为您的域配置 amiPro 门户。");
lang_map.set("ja", "本番で実績のある手順に従ってください: サンプルサイトを確認し、JavaScript SDK を導入し、デバイス管理を調整し、amiPro ポータルをドメインに対して設定します。");
i18n_messages.set("hero_lead", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Browser + App SDK");
lang_map.set("en", "Browser + App SDK");
lang_map.set("zh-CN", "浏览器 + 应用 SDK");
lang_map.set("ja", "ブラウザ + アプリ SDK");
i18n_messages.set("hero_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Recovery-ready");
lang_map.set("en", "Recovery-ready");
lang_map.set("zh-CN", "支持恢复");
lang_map.set("ja", "リカバリ対応");
i18n_messages.set("hero_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Session control");
lang_map.set("en", "Session control");
lang_map.set("zh-CN", "会话控制");
lang_map.set("ja", "セッション制御");
i18n_messages.set("hero_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en", "Need white-glove integration help?");
lang_map.set("ja", "手厚いインテグレーションサポートが必要ですか?");
i18n_messages.set("cta_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Share your stack and we will tailor the SDK sample for you.");
lang_map.set("ja", "お使いのスタックをお教えください。SDKサンプルをカスタマイズいたします。");
i18n_messages.set("cta_desc", lang_map);
lang_map = new Map();
lang_map.set("en", "Talk to us");
lang_map.set("ja", "お問い合わせ");
i18n_messages.set("cta_btn", lang_map);
window.onload = async function() {
setI18NText(i18n_messages)
initRevealAnimations()
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
@@ -331,10 +388,10 @@
<div class="cta-banner" data-animate>
<div>
<h4>Need white-glove integration help?</h4>
<p style="margin: 0; color: var(--text-muted);">Share your stack and we will tailor the SDK sample for you.</p>
<h4 id="cta_title">Need white-glove integration help?</h4>
<p style="margin: 0; color: var(--text-muted);" id="cta_desc">Share your stack and we will tailor the SDK sample for you.</p>
</div>
<a href="mailto:sales@amipro.me?subject=amiPro%20integration" class="btn btn-primary">Talk to us</a>
<a href="mailto:sales@amipro.me?subject=amiPro%20integration" class="btn btn-primary" id="cta_btn">Talk to us</a>
</div>
<!-- / Content -->
+88 -29
View File
@@ -11,7 +11,50 @@
content="width=device-width, initial-scale=1.0"
/>
<title> Integration - amiPro </title>
<title>Advanced Passkey Integration - Web Component &amp; Backend API | amiPro</title>
<link rel="canonical" href="https://amipro.me/integration_api.html" />
<link rel="alternate" hreflang="en" href="https://amipro.me/integration_api.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/ja/integration_api.html" />
<link rel="alternate" hreflang="zh-CN" href="https://amipro.me/zh-CN/integration_api.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/integration_api.html" />
<meta name="description" content="Advanced FIDO2 passkey integration: Web Component embedding, custom UI, backend API integration, and session management for enterprise deployments." />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:title" content="Advanced Passkey Integration - Web Component &amp; Backend API | amiPro" />
<meta property="og:description" content="Advanced FIDO2 passkey integration: Web Component embedding, custom UI, backend API integration, and session management for enterprise deployments." />
<meta property="og:url" content="https://amipro.me/integration_api.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/build.jpg" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="ja_JP" />
<meta property="og:locale:alternate" content="zh_CN" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Advanced Passkey Integration - Web Component &amp; Backend API | amiPro" />
<meta name="twitter:description" content="Advanced FIDO2 passkey integration: Web Component embedding, custom UI, backend API integration, and session management for enterprise deployments." />
<meta name="twitter:image" content="https://amipro.me/files/build.jpg" />
<!-- JSON-LD Article Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Advanced Passkey Integration - Web Component & Backend API",
"description": "Advanced FIDO2 passkey integration: Web Component embedding, custom UI, backend API integration, and session management for enterprise deployments.",
"url": "https://amipro.me/integration_api.html",
"publisher": {
"@type": "Organization",
"name": "amiPro",
"url": "https://amipro.me"
},
"image": "https://amipro.me/files/build.jpg",
"inLanguage": ["en", "ja", "zh-CN"]
}
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-850DCHX9EJ"></script>
@@ -23,8 +66,6 @@
gtag('config', 'G-850DCHX9EJ');
</script>
<meta name="description" content="the easiest to integrate Passkey cloud service" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
@@ -75,61 +116,61 @@
const i18n_messages = new Map();
var lang_map = new Map();
lang_map.set("en-US", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("en", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("zh-CN", "amiPro - 最易集成的Passkey云服务");
lang_map.set("ja", "amiPro - 最も簡単に統合できるパスキー・クラウド・サービス");
i18n_messages.set("label_welcome", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Sample site");
lang_map.set("en", "Sample site");
lang_map.set("zh-CN", "示例网站");
lang_map.set("ja", "サンプルサイト");
i18n_messages.set("label_sample", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact_cta", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("en", "Three month free trial<br>(After free registration of the management portal, all functions are free to try for three months)<br>No credit card required.");
lang_map.set("zh-CN", "三个月免费试用<br>(免费注册管理门户后,所有功能免费试用三个月)<br> 无需信用卡");
lang_map.set("ja", "3ヶ月間の無料トライアル<br>(管理ポータルの無料登録後、すべての機能を3ヶ月間無料でお試しいただけます)<br> クレジットカードは不要です。");
i18n_messages.set("btn_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "How to integrate");
lang_map.set("en", "How to integrate");
lang_map.set("zh-CN", "如何集成");
lang_map.set("ja", "統合方法");
i18n_messages.set("label_integartion_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step1: Open sample site");
lang_map.set("en", "Step1: Open sample site");
lang_map.set("zh-CN", "步骤1: 打开示例网站");
lang_map.set("ja", "ステップ1: サンプルサイトを開く");
i18n_messages.set("btn_step1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Click the following link to enter the sample website, enter any user name and password, and log in to the website. In the following instructions you will need to refer to the source code of the sample website. <br><a href='https://sample.amipro.me/' target='_blank'>https://sample.amipro.me</a>");
lang_map.set("en", "Click the following link to enter the sample website, enter any user name and password, and log in to the website. In the following instructions you will need to refer to the source code of the sample website. <br><a href='https://sample.amipro.me/' target='_blank'>https://sample.amipro.me</a>");
lang_map.set("zh-CN", "点击以下链接,进入示例网站,输入任意用户名和密码,登录网站。在以下的说明中您将需要参考示例网站的源代码。<br><a href='https://sample.amipro.me/' target='_blank'>https://sample.amipro.me</a>");
lang_map.set("ja", "以下のリンクをクリックして、サンプルサイトに入り、任意のユーザー名とパスワードを入力して、サイトにログインしてください。以下の説明では、サンプルサイトのソースコードを参照する必要があります。<br><a href='https://sample.amipro.me/' target='_blank'>https://sample.amipro.me</a>");
i18n_messages.set("info_top_step1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step2: Login page integration");
lang_map.set("en", "Step2: Login page integration");
lang_map.set("zh-CN", "步骤2: 登录页面集成");
lang_map.set("ja", "ステップ2: ログインページの統合");
i18n_messages.set("btn_step2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Use the amiPro JavaScript SDK to add passkey sign-in to your website's login page. <br>1. Download the amiPro SDK. <br><a href='https://sample.amipro.me/files/dfido2-lib.js' target='_blank'>dfido2-lib.js</a><br><a href='https://sample.amipro.me/files/amipro_utils.js' target='_blank'>amipro_utils.js</a><br>"+
lang_map.set("en", "Use the amiPro JavaScript SDK to add passkey sign-in to your website's login page. <br>1. Download the amiPro SDK. <br><a href='https://sample.amipro.me/files/dfido2-lib.js' target='_blank'>dfido2-lib.js</a><br><a href='https://sample.amipro.me/files/amipro_utils.js' target='_blank'>amipro_utils.js</a><br>"+
"2. In the head section, import the SDK with script tags specifying src.<br>3. Refer to the window.onload code in the sample site's head and add passkey login to your website's login page.<br><a href='https://sample.amipro.me/login.html' target='_blank'>https://sample.amipro.me/login.html</a>");
lang_map.set("zh-CN", "使用 amiPro JavaScript SDK 为网站登录页面集成 Passkey 登录。<br>1. 下载 amiPro SDK。<br><a href='https://sample.amipro.me/files/dfido2-lib.js' target='_blank'>dfido2-lib.js</a><br><a href='https://sample.amipro.me/files/amipro_utils.js' target='_blank'>amipro_utils.js</a><br>"+
"2. 在head部分使用带 src 的 script 标签引入 SDK。<br>3. 参考示例站点head中 window.onload 周边的代码,将 Passkey 登录集成到网站的登录页面。<br><a href='https://sample.amipro.me/login.html' target='_blank'>https://sample.amipro.me/login.html</a>");
@@ -138,86 +179,104 @@
i18n_messages.set("info_top_step2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step3: Build devices management page");
lang_map.set("en", "Step3: Build devices management page");
lang_map.set("zh-CN", "步骤3: 构建设备管理页面");
lang_map.set("ja", "ステップ3: デバイス管理ページの構築");
i18n_messages.set("btn_step3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "The device management page provides two functions:<br>1. When the user loses or replaces a device such as a registered mobile phone, use the recovery link generated by the management portal to replace the device. <br>2. Users add and delete registered devices. <br>Please refer to the source code of the sample site to integrate the device management page into your website. <br><a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a><br> The code surrounding reg_session_id is the recovery link processing code.");
lang_map.set("en", "The device management page provides two functions:<br>1. When the user loses or replaces a device such as a registered mobile phone, use the recovery link generated by the management portal to replace the device. <br>2. Users add and delete registered devices. <br>Please refer to the source code of the sample site to integrate the device management page into your website. <br><a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a><br> The code surrounding reg_session_id is the recovery link processing code.");
lang_map.set("zh-CN", "设备管理页面提供两大功能:<br>1、当用户丢失或更换注册过的手机等设备时,使用管理门户生成的恢复链接替换设备。<br>2、用户追加以及删除注册的设备。<br>请参考示例站点的源代码,将设备管理页面集成到网站。<br><a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a><br>其中reg_session_id周边的代码为恢复链接处理代码。");
lang_map.set("ja", "デバイス管理ページは2つ機能があります:<br>1. ユーザーが登録済みの携帯電話などのデバイスを紛失または交換した場合、管理ポータルによって生成されたリカバリー・リンクを使用してデバイスを更新する機能。 <br>2. ユーザーはデバイスを追加および削除する機能。 <br>デバイス管理ページを Web サイトに統合するには、サンプル サイトのソース コードを参照してください。 <br><a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a><br>この中に reg_session_id 周辺のコードはリカバリ・リンクの処理コードです。");
i18n_messages.set("info_top_step3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step4: Session management");
lang_map.set("en", "Step4: Session management");
lang_map.set("zh-CN", "步骤4: 会话管理");
lang_map.set("ja", "ステップ4: セッション管理");
i18n_messages.set("btn_step4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "There are two methods of session management:<br>Method 1. Use amiPro's validSession API to manage sessions. Refer to the setSessionStatus function in <a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a>. <br>Method 2: Use your website's original session management, just call amiPro's logoutFido2UserSession function in your website's original session timeout processing.");
lang_map.set("en", "There are two methods of session management:<br>Method 1. Use amiPro's validSession API to manage sessions. Refer to the setSessionStatus function in <a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a>. <br>Method 2: Use your website's original session management, just call amiPro's logoutFido2UserSession function in your website's original session timeout processing.");
lang_map.set("zh-CN", "会话管理有两种方式:<br>方式1、使用amiPro的validSession API 管理会话。参考<a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a>中的setSessionStatus函数。<br>方式2、使用您的网站原有的会话管理,只需在您的网站原有的会话超时的处理中调用amiPro的logoutFido2UserSession函数。");
lang_map.set("ja", "セッション管理は2つ方法があります:<br>方法 1: amiPro の validSession API を使用してセッションを管理します。<a href='https://sample.amipro.me/devices.html' target='_blank'>https://sample.amipro.me/devices.html</a>にあるsetSessionStatus関数を参考してください。 <br>方法 2: Web サイトの既存のセッション管理を使用します。Web サイトの既存のセッションのタイムアウト処理の中に、 amiPro の logoutFido2UserSession 関数を呼び出すだけで管理出来ます。");
i18n_messages.set("info_top_step4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step5: Management Portal registration");
lang_map.set("en", "Step5: Management Portal registration");
lang_map.set("zh-CN", "步骤5: 管理门户注册");
lang_map.set("ja", "ステップ5: 管理ポータル登録");
i18n_messages.set("btn_step5", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Use your email address to register amiPro management portal for free:<br>1. Please use the PC and other devices you plan to manage amiPro and open the following link with your browser. <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. In the management portal, enter your email address and click the [Create Account/Add new device] link. <br>3. Use the same browser to open the link in the email you received and add the device<br>4. Click [Go to top page] and use the added device [Passkey Login].<br><img src='files/portal_reg_en.jpg' width=50%>");
lang_map.set("en", "Use your email address to register amiPro management portal for free:<br>1. Please use the PC and other devices you plan to manage amiPro and open the following link with your browser. <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. In the management portal, enter your email address and click the [Create Account/Add new device] link. <br>3. Use the same browser to open the link in the email you received and add the device<br>4. Click [Go to top page] and use the added device [Passkey Login].<br><img src='files/portal_reg_en.jpg' width=50%>");
lang_map.set("zh-CN", "使用您的邮件地址免费注册amiPro管理门户: <br>1、请用您准备管理amiPro的PC等设备及其浏览器打开以下链接。<br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2、在管理门户中,输入您的邮件地址并点击【创建新账号或添加新设备】链接。<br>3、使用相同的浏览器打开您收到的邮件中的链接并添加设备<br>4、点击【去首页】,使用添加的设备【Passkey登录】进入管理门户。<br><img src='files/portal_reg_jp.jpg' width=50%>");
lang_map.set("ja", "電子メール アドレスを使用して、amiPro 管理ポータルに無料でサインアップします: <br>1. amiPro を管理する予定の PC およびその他のデバイスを使用し、ブラウザで次のリンクを開いてください。 <br><a href='https://portal.amipro.me/'>https://portal.amipro.me</a><br>2. 管理ポータルで、電子メール アドレスを入力し、[アカウントを作成・新しいデバイスを追加] リンクをクリックしてください。 <br>3. 受信した電子メールにあるURLを同じブラウザで開いてデバイスを追加してください。<br>4. [トップページへ] をクリックして、登録したデバイスで[パスキーでログイン]でログインして、トップページへ。<br><img src='files/portal_reg_jp.jpg' width=50%>");
i18n_messages.set("info_top_step5", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Step6: FIDO2 server settings");
lang_map.set("en", "Step6: FIDO2 server settings");
lang_map.set("zh-CN", "步骤6: FIDO2服务器设置");
lang_map.set("ja", "ステップ6: FIDO2 サーバー設定");
i18n_messages.set("btn_step6", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Click [Settings] on the Portal left menu, and then click [Add] on the right page. Enter your website domain name (the port number cannot be included), and note that your website needs to use the HTTPS protocol. <br>【Device registration page】is the link to the device management page built by step 3.<br>Click [Submit] to complete the settings.<br><img src='files/portal_conf_en.jpg' width=80%>");
lang_map.set("en", "Click [Settings] on the Portal left menu, and then click [Add] on the right page. Enter your website domain name (the port number cannot be included), and note that your website needs to use the HTTPS protocol. <br>【Device registration page】is the link to the device management page built by step 3.<br>Click [Submit] to complete the settings.<br><img src='files/portal_conf_en.jpg' width=80%>");
lang_map.set("zh-CN", "点击管理门户左侧菜单中的【设定】,之后点击右侧页面中的【添加】。输入您的网站域名(不能包含端口号),注意您的网站需要使用HTTPS协议。<br>【设备注册页面】为步骤3构建的设备管理页面的链接。<br>最后需要点击【提 交】完成设定。<br><img src='files/portal_conf_jp.jpg' width=80%>");
lang_map.set("ja", "管理ポータル左メニューの[設定]をクリックし、右ページの[追加]をクリックしてください。 Web サイトのドメイン名を入力します (ポート番号は含めることはできません)。Web サイトでは HTTPS プロトコルを使用する必要があることに注意してください。 <br>【デバイス登録ページ】は手順3で作成したデバイス管理ページへのリンクです。<br>最後は送信をクリックして設定完了<br><img src='files/portal_conf_jp.jpg' width=80%>");
i18n_messages.set("info_top_step6", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Deeply customize and deploy Passkey");
lang_map.set("en", "Deeply customize and deploy Passkey");
lang_map.set("zh-CN", "更加深入定制部署Passkey");
lang_map.set("ja", "さらにカスタマイズしてパスキーを展開");
i18n_messages.set("hero_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Follow the production-proven playbook: explore the sample site, drop in the JavaScript SDK, fine-tune device management, and configure the amiPro portal for your domains.");
lang_map.set("en", "Follow the production-proven playbook: explore the sample site, drop in the JavaScript SDK, fine-tune device management, and configure the amiPro portal for your domains.");
lang_map.set("zh-CN", "遵循已在生产中验证的流程:查看示例站点,嵌入 JavaScript SDK,微调设备管理,并为您的域配置 amiPro 门户。");
lang_map.set("ja", "本番で実績のある手順に従ってください: サンプルサイトを確認し、JavaScript SDK を導入し、デバイス管理を調整し、amiPro ポータルをドメインに対して設定します。");
i18n_messages.set("hero_lead", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Browser + App SDK");
lang_map.set("en", "Browser + App SDK");
lang_map.set("zh-CN", "浏览器 + 应用 SDK");
lang_map.set("ja", "ブラウザ + アプリ SDK");
i18n_messages.set("hero_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Recovery-ready");
lang_map.set("en", "Recovery-ready");
lang_map.set("zh-CN", "支持恢复");
lang_map.set("ja", "リカバリ対応");
i18n_messages.set("hero_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Session control");
lang_map.set("en", "Session control");
lang_map.set("zh-CN", "会话控制");
lang_map.set("ja", "セッション制御");
i18n_messages.set("hero_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en", "Need white-glove integration help?");
lang_map.set("ja", "手厚いインテグレーションサポートが必要ですか?");
i18n_messages.set("cta_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Share your stack and we will tailor the SDK sample for you.");
lang_map.set("ja", "お使いのスタックをお教えください。SDKサンプルをカスタマイズいたします。");
i18n_messages.set("cta_desc", lang_map);
lang_map = new Map();
lang_map.set("en", "Talk to us");
lang_map.set("ja", "お問い合わせ");
i18n_messages.set("cta_btn", lang_map);
window.onload = async function() {
setI18NText(i18n_messages)
initRevealAnimations()
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
@@ -310,10 +369,10 @@
<div class="cta-banner" data-animate>
<div>
<h4>Need white-glove integration help?</h4>
<p style="margin: 0; color: var(--text-muted);">Share your stack and we will tailor the SDK sample for you.</p>
<h4 id="cta_title">Need white-glove integration help?</h4>
<p style="margin: 0; color: var(--text-muted);" id="cta_desc">Share your stack and we will tailor the SDK sample for you.</p>
</div>
<a href="mailto:sales@amipro.me?subject=amiPro%20integration" class="btn btn-primary">Talk to us</a>
<a href="mailto:sales@amipro.me?subject=amiPro%20integration" class="btn btn-primary" id="cta_btn">Talk to us</a>
</div>
<!-- / Content -->
+10 -6
View File
@@ -1,25 +1,29 @@
# amiPro
> amiPro, LLC builds trustworthy passkey infrastructure and privacy-first AI tooling. Founded in 2023, based in Tokyo, Japan.
> amiPro, LLC builds trustworthy passkey infrastructure and privacy-first AI tooling. Founded in 2023, based in Tokyo, Japan. We provide FIDO2-certified passwordless authentication and local-first AI conversation management.
## Products
- [Passkey Hub](https://amipro.me/fido2_top.html): FIDO2-certified passwordless authentication cloud with open-source server, drop-in SDKs (JavaScript, iOS, Android), and a management portal for registration, recovery, and analytics.
- [ContextWizard](https://amipro.me/contextwizard_top.html): Local-first browser extension that captures, organizes, and encrypts AI conversations across 10+ platforms including ChatGPT, Claude, Gemini, and Perplexity.
- [Passkey Hub](https://amipro.me/fido2_top.html): FIDO2-certified passwordless authentication cloud with open-source server, drop-in SDKs (JavaScript, iOS, Android), and a management portal for registration, recovery, and analytics. Pricing is per active user per month.
- [ContextWizard](https://amipro.me/contextwizard_top.html): Local-first browser extension that captures, organizes, and encrypts AI conversations across 10+ platforms including ChatGPT, Claude, Gemini, and Perplexity. Free and open-source.
## Documentation
- [Passkey Integration Guide](https://amipro.me/integration.html): Technical documentation for integrating FIDO2 passkey authentication.
- [Passkey Overview](https://amipro.me/passkey.html): What passkeys are and how they work.
- [Portal](https://portal.amipro.me/): Management dashboard for passkey deployment and analytics.
- [Passkey Integration Guide](https://amipro.me/integration.html): Step-by-step guide to integrate FIDO2 passkey authentication using the JavaScript SDK.
- [Advanced Integration](https://amipro.me/integration_api.html): Web Component integration, custom UI, and backend API integration for enterprise deployments.
- [Passkey Overview](https://amipro.me/passkey.html): What passkeys are, how FIDO2 works, and why they matter for security.
- [Passkey Benefits](https://amipro.me/merits.html): How passkey authentication improves conversion rates, reduces support costs, and prevents phishing.
- [Portal](https://portal.amipro.me/): Management dashboard for passkey deployment, analytics, and device management.
- [Sample Implementation](https://sample.amipro.me/): Live demo of passkey authentication flow.
## Company
- [Homepage](https://amipro.me/): Company overview, product lineup, and contact information.
- Contact: sales@amipro.me
- Location: Shibuya-ku, Tokyo, Japan
## Optional
- [ContextWizard on Chrome Web Store](https://chromewebstore.google.com/detail/contextwizard/lmhnmmedgmnfggecdalkancllnekofnb): Install the ContextWizard Chrome extension.
- [ContextWizard on Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/contextwizard/nknoacgaapoeboehlgelolgbifgcimli): Install the ContextWizard Edge extension.
- [ContextWizard Privacy Policy](https://amipro.me/contextwizard_privacy_policy.html): Privacy policy for ContextWizard extension.
+158 -21
View File
@@ -11,7 +11,87 @@
content="width=device-width, initial-scale=1.0"
/>
<title> Passkeys - amiPro </title>
<title>Passkey Benefits - Security, Conversion & Cost Savings | amiPro</title>
<link rel="canonical" href="https://amipro.me/merits.html" />
<link rel="alternate" hreflang="en" href="https://amipro.me/merits.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/ja/merits.html" />
<link rel="alternate" hreflang="zh-CN" href="https://amipro.me/zh-CN/merits.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/merits.html" />
<meta name="description" content="Passkey authentication reduces phishing by 99.9%, boosts conversion rates, and cuts support costs by 75%. Learn how amiPro's FIDO2-certified platform delivers measurable ROI." />
<meta property="og:type" content="website" />
<meta property="og:title" content="Passkey Benefits - Security, Conversion & Cost Savings | amiPro" />
<meta property="og:description" content="Passkey authentication reduces phishing by 99.9%, boosts conversion rates, and cuts support costs by 75%. Learn how amiPro's FIDO2-certified platform delivers measurable ROI." />
<meta property="og:url" content="https://amipro.me/merits.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/YubicoResearch.jpg" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Passkey Benefits - Security, Conversion & Cost Savings | amiPro" />
<meta name="twitter:description" content="Passkey authentication reduces phishing by 99.9%, boosts conversion rates, and cuts support costs by 75%. Learn how amiPro's FIDO2-certified platform delivers measurable ROI." />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Passkey Benefits - Security, Conversion & Cost Savings",
"description": "Passkey authentication reduces phishing by 99.9%, boosts conversion rates, and cuts support costs by 75%. Learn how amiPro's FIDO2-certified platform delivers measurable ROI.",
"url": "https://amipro.me/merits.html",
"datePublished": "2025-01-01T00:00:00Z",
"dateModified": "2025-06-21T00:00:00Z",
"author": {
"@type": "Person",
"name": "amiPro Engineering"
},
"publisher": {
"@type": "Organization",
"name": "amiPro"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does passkey authentication reduce phishing?",
"acceptedAnswer": {
"@type": "Answer",
"text": "According to industry research, passkey authentication reduces phishing and credential theft by 99.9%. Passkeys are bound to the legitimate website domain, making them inherently resistant to phishing attacks that target passwords."
}
},
{
"@type": "Question",
"name": "What is the ROI of implementing passkeys?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Research shows a 203% ROI over 3 years for passkey implementation. Benefits include reduced phishing incidents, lower help desk costs (75% reduction in password reset tickets by year 3), and improved conversion rates from faster sign-ins."
}
},
{
"@type": "Question",
"name": "How do passkeys improve website conversion rates?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Passkeys improve conversion rates by eliminating password friction. Users sign in with a single biometric gesture (fingerprint or face) instead of typing passwords. This reduces sign-in abandonment and creates a smoother user experience, particularly on mobile devices."
}
},
{
"@type": "Question",
"name": "How much can passkeys reduce support costs?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Passkeys can reduce help desk support costs by up to 75% by year 3. Since passkeys eliminate password resets—one of the most common support requests—organizations see significant reductions in support ticket volume and associated costs."
}
}
]
}
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-850DCHX9EJ"></script>
@@ -23,7 +103,7 @@
gtag('config', 'G-850DCHX9EJ');
</script>
<meta name="description" content="the easiest to integrate Passkey cloud service" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
@@ -75,37 +155,37 @@
const i18n_messages = new Map();
var lang_map = new Map();
lang_map.set("en-US", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("en", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("zh-CN", "amiPro - 最易集成的Passkey云服务");
lang_map.set("ja", "amiPro - 最も簡単に統合できるパスキー・クラウド・サービス");
i18n_messages.set("label_welcome", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Management Portal");
lang_map.set("en", "Management Portal");
lang_map.set("zh-CN", "管理门户");
lang_map.set("ja", "管理ポータル");
i18n_messages.set("label_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us(sales@amipro.me)");
lang_map.set("en", "Contact us(sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us(sales@amipro.me)");
lang_map.set("en", "Contact us(sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact_cta", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Higher security");
lang_map.set("en", "Higher security");
lang_map.set("zh-CN", "更高的安全性");
lang_map.set("ja", "より高いセキュリティ");
i18n_messages.set("info_title_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey authentication provides higher security than password-based authentication through stronger authentication methods, risk elimination, and phishing attack prevention.<br>* <b>Stronger authentication methods</b>: Passwords are subject to the risk of being guessed or stolen by others. In contrast, Passkey authentication uses stronger authentication factors such as biometrics (fingerprint, face recognition) or hardware keys (security keys, smart cards), which can better protect users' personal information from unauthorized access.<br>"+
lang_map.set("en", "Passkey authentication provides higher security than password-based authentication through stronger authentication methods, risk elimination, and phishing attack prevention.<br>* <b>Stronger authentication methods</b>: Passwords are subject to the risk of being guessed or stolen by others. In contrast, Passkey authentication uses stronger authentication factors such as biometrics (fingerprint, face recognition) or hardware keys (security keys, smart cards), which can better protect users' personal information from unauthorized access.<br>"+
"* <b>Elimination of password risks</b>: Passwords need to be selected and managed by users. However, in many cases, users do not choose strong passwords and tend to use the same password for multiple services. This exposes the risk that if a password is leaked, many accounts may be compromised. Passkey authentication eliminates such risks.<br>"+
"* <b>Countermeasures against phishing</b>: Phishing attacks are fraudulent methods that attempt to obtain passwords from users using fake websites or emails. With Passkey authentication, users do not need to enter passwords to authenticate, so they are less likely to be targeted by phishing attacks.");
lang_map.set("zh-CN", "Passkey认证通过更强的认证方式、风险排除、防止钓鱼攻击等,提供比基于密码的认证更高的安全性。<br>* <b>更强的认证方式</b>:密码容易被他人猜测或盗取。相比之下,Passkey认证使用生物特征(指纹、面部识别)或硬件密钥(安全密钥、智能卡)等更强的认证因素,可以更好地保护用户的个人信息免受未经授权的访问。<br>"+
@@ -117,13 +197,13 @@
i18n_messages.set("info_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Increase website value");
lang_map.set("en", "Increase website value");
lang_map.set("zh-CN", "网站价值的提高");
lang_map.set("ja", "ウェブサイトの価値向上");
i18n_messages.set("info_title_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey authentication can increase the value of a website through factors such as convenience, security, account protection, and user satisfaction.<br>* <b>Improved convenience</b>: Passkey authentication eliminates the hassle of users remembering or entering passwords. Instead, authentication can be done with simple means such as biometrics (fingerprint, face recognition) or hardware keys (security keys, smart cards). This improves the user experience and increases the convenience of the website.<br>"+
lang_map.set("en", "Passkey authentication can increase the value of a website through factors such as convenience, security, account protection, and user satisfaction.<br>* <b>Improved convenience</b>: Passkey authentication eliminates the hassle of users remembering or entering passwords. Instead, authentication can be done with simple means such as biometrics (fingerprint, face recognition) or hardware keys (security keys, smart cards). This improves the user experience and increases the convenience of the website.<br>"+
"* <b>Enhanced security</b>: Passkey authentication enhances the security of a website by using stronger authentication factors. Biometrics and hardware keys are more complex and less likely to be stolen than passwords, and are also resistant to phishing attacks. This improves the security level of the website and increases user trust.<br>"+
"* <b>Account protection</b>: Passkey authentication eliminates the risks associated with passwords (use of weak passwords, reuse, leakage, etc.). This enhances the protection of user accounts and reduces the risk of unauthorized access and data leakage.<br>"+
"* <b>Improved user satisfaction</b>: Passkey authentication eliminates the hassle of managing passwords and resetting forgotten passwords. Users can easily and securely access the website, reducing stress and frustration. This improves user satisfaction and may increase user loyalty and frequency of use of the website.");
@@ -138,13 +218,13 @@
i18n_messages.set("info_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Reduce operating costs");
lang_map.set("en", "Reduce operating costs");
lang_map.set("zh-CN", "降低运营成本");
lang_map.set("ja", "運用コストの低減");
i18n_messages.set("info_title_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey authentication can reduce operating costs through factors such as reduced password reset, reduced security incidents, and simplified security management.<br>* <b>Reduced password reset</b>: With Passkey authentication, users do not need to remember or reset passwords. This reduces the number of password reset requests and responses to user support, which may reduce operating costs.<br>"+
lang_map.set("en", "Passkey authentication can reduce operating costs through factors such as reduced password reset, reduced security incidents, and simplified security management.<br>* <b>Reduced password reset</b>: With Passkey authentication, users do not need to remember or reset passwords. This reduces the number of password reset requests and responses to user support, which may reduce operating costs.<br>"+
"* <b>Reduced security incidents</b>: Password-based authentication has risks such as the use or reuse of weak passwords and password leakage. This increases the likelihood of security incidents such as unauthorized access and data leakage. Passkey authentication reduces these risks, which may reduce operating costs associated with security incidents.<br>"+
"* <b>Simplified security management</b>: Passkey authentication reduces tasks related to password management and storage. Passwords require encryption and secure storage, and it is recommended to regularly manage and change password policies. In contrast, Passkey authentication uses simpler security elements (biometrics or hardware keys), which may simplify security management.");
lang_map.set("zh-CN", "Passkey认证可以通过减少密码重置、减少安全事件和简化安全管理等因素来降低运营成本。<br>* <b>减少密码重置</b>:Passkey认证不需要用户记住或重置密码。这减少了密码重置请求和对用户支持的响应,可能会降低运营成本。<br>"+
@@ -156,59 +236,73 @@
i18n_messages.set("info_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Effect analysis");
lang_map.set("en", "Effect analysis");
lang_map.set("zh-CN", "效果分析");
lang_map.set("ja", "効果分析");
i18n_messages.set("info_title_4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "According to the research of a leading company in the industry, Passkey is:<br>* Reduced phishing and credential theft:<b>99.9</b>%<br>* ROI over 3 years:<b>203</b>%<br>* Reduction of help desk tickets in the 3rd year:<b>75</b>%");
lang_map.set("en", "According to the research of a leading company in the industry, Passkey is:<br>* Reduced phishing and credential theft:<b>99.9</b>%<br>* ROI over 3 years:<b>203</b>%<br>* Reduction of help desk tickets in the 3rd year:<b>75</b>%");
lang_map.set("zh-CN", "根据业界领先公司的研究,Passkey是:<br>* 减少网络钓鱼和凭证盗窃:<b>99.9</b>%<br>* 3年内的投资回报率:<b>203</b>%<br>* 第3年的帮助台票据减少:<b>75</b>%");
lang_map.set("ja", "業界大手のリサーチより、パスキーは:<br>* フィッシングや認証情報の盗難の減少:<b>99.9</b>%<br>* 3 年後のROI:<b>203</b>%<br>* 3 年目のヘルプデスク チケットの削減:<b>75</b>%");
i18n_messages.set("info_4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey impact");
lang_map.set("en", "Passkey impact");
lang_map.set("zh-CN", "Passkey 影响");
lang_map.set("ja", "Passkey の影響");
i18n_messages.set("hero_eyebrow", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Security your customers can feel");
lang_map.set("en", "Security your customers can feel");
lang_map.set("zh-CN", "客户能感受到的安全性");
lang_map.set("ja", "顧客が実感できるセキュリティ");
i18n_messages.set("hero_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Reduce phishing to near zero, lift conversion, and slash support load with amiPro's enterprise-grade Passkey platform.");
lang_map.set("en", "Reduce phishing to near zero, lift conversion, and slash support load with amiPro's enterprise-grade Passkey platform.");
lang_map.set("zh-CN", "将钓鱼攻击降至接近零,提高转化率,并通过 amiPro 企业级 Passkey 平台大幅减少支持负担。");
lang_map.set("ja", "amiPro のエンタープライズ向けパスキープラットフォームでフィッシングをほぼゼロに抑え、コンバージョンを高め、サポート負荷を削減します。");
i18n_messages.set("hero_lead", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Higher trust");
lang_map.set("en", "Higher trust");
lang_map.set("zh-CN", "更高的信任");
lang_map.set("ja", "より高い信頼");
i18n_messages.set("hero_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Happier customers");
lang_map.set("en", "Happier customers");
lang_map.set("zh-CN", "更满意的客户");
lang_map.set("ja", "顧客満足度の向上");
i18n_messages.set("hero_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Lower costs");
lang_map.set("en", "Lower costs");
lang_map.set("zh-CN", "更低的成本");
lang_map.set("ja", "コスト削減");
i18n_messages.set("hero_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en", "Portal");
lang_map.set("ja", "ポータル");
i18n_messages.set("btn_portal", lang_map);
lang_map = new Map();
lang_map.set("en", "Passkey vs Password: Security Comparison");
lang_map.set("ja", "パスキー vs パスワード:セキュリティ比較");
lang_map.set("zh-CN", "Passkey 与密码:安全对比");
i18n_messages.set("static_title", lang_map);
window.onload = async function() {
setI18NText(i18n_messages)
var video = document.getElementById('video');
video.src = "files/amiProSampleSite01-JP.mp4";
initRevealAnimations()
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
@@ -275,6 +369,49 @@
</div>
</section>
<section style="margin-top: 3rem; padding: 2rem; background: #f8f9fa; border-radius: 12px;">
<h2 id="static_title" style="font-size: 1.5rem; font-weight: 600; color: #0f172a; margin-bottom: 1rem;">Passkey vs Password: Security Comparison</h2>
<div style="overflow-x: auto;">
<table style="width: 100%; border-collapse: collapse; font-size: 0.95rem;">
<thead>
<tr style="background: #e2e8f0;">
<th style="padding: 0.75rem; text-align: left; border: 1px solid #cbd5e1;">Feature</th>
<th style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1;">Password</th>
<th style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1;">Passkey</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 0.75rem; border: 1px solid #cbd5e1;">Phishing resistance</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #dc2626;">Vulnerable</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #16a34a;">Resistant (99.9% reduction)</td>
</tr>
<tr style="background: #f8fafc;">
<td style="padding: 0.75rem; border: 1px solid #cbd5e1;">Credential theft risk</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #dc2626;">High (shared secret)</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #16a34a;">None (public-key crypto)</td>
</tr>
<tr>
<td style="padding: 0.75rem; border: 1px solid #cbd5e1;">Sign-in speed</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1;">Slow (typing)</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #16a34a;">Fast (biometric gesture)</td>
</tr>
<tr style="background: #f8fafc;">
<td style="padding: 0.75rem; border: 1px solid #cbd5e1;">Password reset burden</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #dc2626;">75% of support tickets</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #16a34a;">Zero resets needed</td>
</tr>
<tr>
<td style="padding: 0.75rem; border: 1px solid #cbd5e1;">User experience</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1;">Friction (remembering)</td>
<td style="padding: 0.75rem; text-align: center; border: 1px solid #cbd5e1; color: #16a34a;">Seamless (one tap)</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-top: 1rem; font-size: 0.85rem; color: #64748b;">Source: FIDO Alliance, Google Security Research, amiPro internal data</p>
</section>
<section class="info-panels" style="margin-top: 3rem;">
<article class="info-panel" data-animate>
<h4 id="info_title_1">define</h4>
@@ -291,7 +428,7 @@
<article class="info-panel" data-animate>
<h4 id="info_title_4">define</h4>
<p id="info_4">define</p>
<img src="files/YubicoResearch.jpg" alt="Yubico Research" style="width: 100%; border-radius: 16px; margin-top: 1rem;">
<img src="files/YubicoResearch.jpg" alt="Yubico research statistics showing 99.9% phishing reduction, 203% ROI, and 75% support cost reduction with passkey authentication" style="width: 100%; border-radius: 16px; margin-top: 1rem;">
</article>
</section>
</div>
+140 -21
View File
@@ -11,7 +11,14 @@
content="width=device-width, initial-scale=1.0"
/>
<title> Passkeys - amiPro </title>
<title>What Are Passkeys? FIDO2 Authentication Guide | amiPro</title>
<link rel="canonical" href="https://amipro.me/passkey.html" />
<link rel="alternate" hreflang="en" href="https://amipro.me/passkey.html" />
<link rel="alternate" hreflang="ja" href="https://amipro.me/passkey.html" />
<link rel="alternate" hreflang="zh-CN" href="https://amipro.me/passkey.html" />
<link rel="alternate" hreflang="x-default" href="https://amipro.me/passkey.html" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-850DCHX9EJ"></script>
@@ -23,7 +30,81 @@
gtag('config', 'G-850DCHX9EJ');
</script>
<meta name="description" content="the easiest to integrate Passkey cloud service" />
<meta name="description" content="Passkeys are passwordless authentication credentials using biometrics or security keys. Learn how FIDO2 passkeys prevent phishing and improve login UX." />
<meta property="og:type" content="website" />
<meta property="og:title" content="What Are Passkeys? FIDO2 Authentication Guide | amiPro" />
<meta property="og:description" content="Passkeys are passwordless authentication credentials using biometrics or security keys. Learn how FIDO2 passkeys prevent phishing and improve login UX." />
<meta property="og:url" content="https://amipro.me/passkey.html" />
<meta property="og:site_name" content="amiPro" />
<meta property="og:image" content="https://amipro.me/files/passkeys.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="What Are Passkeys? FIDO2 Authentication Guide | amiPro" />
<meta name="twitter:description" content="Passkeys are passwordless authentication credentials using biometrics or security keys. Learn how FIDO2 passkeys prevent phishing and improve login UX." />
<meta name="twitter:image" content="https://amipro.me/files/passkeys.jpg" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "What Are Passkeys? FIDO2 Authentication Guide",
"description": "Passkeys are passwordless authentication credentials using biometrics or security keys. Learn how FIDO2 passkeys prevent phishing and improve login UX.",
"url": "https://amipro.me/passkey.html",
"image": "https://amipro.me/files/passkeys.jpg",
"author": {
"@type": "Person",
"name": "amiPro Team"
},
"publisher": {
"@type": "Organization",
"name": "amiPro",
"url": "https://amipro.me"
},
"datePublished": "2024-01-01",
"dateModified": "2025-01-01"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is a passkey?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A passkey is a FIDO2-based passwordless authentication credential that replaces passwords. It uses biometrics (fingerprint, face recognition) or hardware security keys to sign in to websites and apps. Passkeys are phishing-resistant, more secure than passwords, and provide a faster sign-in experience."
}
},
{
"@type": "Question",
"name": "How do passkeys work?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Passkeys work in three steps: (1) The user registers a device by authenticating with biometrics or a security key. (2) A cryptographic key pair is created—the private key stays on the device, the public key goes to the server. (3) On subsequent logins, the user authenticates with biometrics to unlock the private key, which signs a challenge from the server."
}
},
{
"@type": "Question",
"name": "Are passkeys more secure than passwords?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Passkeys are bound to the legitimate website domain, making them inherently resistant to phishing. They use public-key cryptography instead of shared secrets, so server breaches don't expose user credentials. Biometric authentication adds an additional layer of security."
}
},
{
"@type": "Question",
"name": "Which companies support passkeys?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Major companies supporting passkeys include Google, Apple, Microsoft, Amazon, PayPal, GitHub, and many more. Apple, Google, and NTT have been key contributors to the FIDO2 standard. The FIDO2 market is projected to grow from $18.82 billion in 2024 to $60.34 billion in 2032."
}
}
]
}
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="files/favicon.ico" />
@@ -75,116 +156,136 @@
const i18n_messages = new Map();
var lang_map = new Map();
lang_map.set("en-US", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("en", "amiPro - The easiest-to-integrate Passkey cloud service");
lang_map.set("zh-CN", "amiPro - 最易集成的Passkey云服务");
lang_map.set("ja", "amiPro - 最も簡単に統合できるパスキー・クラウド・サービス");
i18n_messages.set("label_welcome", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Management Portal");
lang_map.set("en", "Management Portal");
lang_map.set("zh-CN", "管理门户");
lang_map.set("ja", "管理ポータル");
i18n_messages.set("label_portal", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Contact us (sales@amipro.me)");
lang_map.set("en", "Contact us (sales@amipro.me)");
lang_map.set("zh-CN", "联系我们(sales@amipro.me)");
lang_map.set("ja", "お問い合わせ(sales@amipro.me)");
i18n_messages.set("title_contact_cta", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey definition");
lang_map.set("en", "Passkey definition");
lang_map.set("zh-CN", "Passkey 的定义");
lang_map.set("ja", "パスキーの定義");
i18n_messages.set("info_title_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "A passkey is a method of user authentication that eliminates the need for usernames and passwords. It also helps prevent security lapses and attacks.<br><a href='https://en.wikipedia.org/wiki/Passkey_(authentication)' target='_blank'>Wikipedia</a>");
lang_map.set("en", "A passkey is a method of user authentication that eliminates the need for usernames and passwords. It also helps prevent security lapses and attacks.<br><a href='https://en.wikipedia.org/wiki/Passkey_(authentication)' target='_blank'>Wikipedia</a>");
lang_map.set("zh-CN", "Passkey(通行密钥)是一种无需用户名和密码的用户身份验证方式,同时有助于防止安全漏洞和攻击。<br><a href='https://en.wikipedia.org/wiki/Passkey_(authentication)' target='_blank'>Wikipedia</a>");
lang_map.set("ja", "パスキー(Passkeys, Passkey Authentication)は、パスワードに代わるより安全、迅速かつ使いやすい、パスワードレス認証に用いられる方式です。<br><a href='https://ja.wikipedia.org/wiki/パスキー' target='_blank'>Wikipedia</a>");
i18n_messages.set("info_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey basics");
lang_map.set("en", "Passkey basics");
lang_map.set("zh-CN", "Passkey 的基本用法");
lang_map.set("ja", "パスキーの基本的な使い方");
i18n_messages.set("info_title_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "1. (Optional) If users already have an account with a user ID and password, they first sign in to the website<br>2. Register an authentication device using face or fingerprint<br>3. Next time, sign in with face or fingerprint—no password needed");
lang_map.set("en", "1. (Optional) If users already have an account with a user ID and password, they first sign in to the website<br>2. Register an authentication device using face or fingerprint<br>3. Next time, sign in with face or fingerprint—no password needed");
lang_map.set("zh-CN", "1、(可选)已使用用户ID和密码注册的用户先登录网站<br>2、使用面部或指纹注册认证设备<br>3、下次登录时仅需进行面部或指纹认证即可进入网站");
lang_map.set("ja", "1(任意):ユーザーIDとパスワードで登録済みのユーザーは、まずサイトにログインします<br>2 顔認証または指紋認証で認証デバイスを登録します<br>3 次回以降は顔認証または指紋認証だけでログインできます");
i18n_messages.set("info_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey case studies");
lang_map.set("en", "Passkey case studies");
lang_map.set("zh-CN", "Passkey 的引入案例");
lang_map.set("ja", "パスキーの導入事例");
i18n_messages.set("info_title_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "<b>Google</b>:<a href='https://wired.jp/article/google-passkey-password-replacement/' target='_blank'>Google is fully introducing the authentication method \"Passkey\"</a><br><b>Mercari</b>:<a href='https://about.mercari.com/press/news/articles/20230414_passkeys/' target='_blank'>Flea market app \"Mercari\" supports biometric authentication \"Passkey\" that does not require a password</a><br><b>Docomo</b>:<a href='https://www.bcnretail.com/market/detail/20221018_300507.html' target='_blank'>d Account to introduce new authentication methods for web authentication and passkeys for login</a>");
lang_map.set("en", "<b>Google</b>:<a href='https://wired.jp/article/google-passkey-password-replacement/' target='_blank'>Google is fully introducing the authentication method \"Passkey\"</a><br><b>Mercari</b>:<a href='https://about.mercari.com/press/news/articles/20230414_passkeys/' target='_blank'>Flea market app \"Mercari\" supports biometric authentication \"Passkey\" that does not require a password</a><br><b>Docomo</b>:<a href='https://www.bcnretail.com/market/detail/20221018_300507.html' target='_blank'>d Account to introduce new authentication methods for web authentication and passkeys for login</a>");
lang_map.set("zh-CN", "<b>Google</b>:<a href='https://wired.jp/article/google-passkey-password-replacement/' target='_blank'>谷歌正式推出“Passkey”认证方式</a><br><b>Mercari</b>:<a href='https://about.mercari.com/press/news/articles/20230414_passkeys/' target='_blank'>跳蚤市场应用“Mercari”支持无需密码的生物识别认证“Passkey”</a><br><b>Docomo</b>:<a href='https://www.bcnretail.com/market/detail/20221018_300507.html' target='_blank'>d Account将引入Web认证和Passkey的新认证方式以登录</a>");
lang_map.set("ja", "<b>Google</b>:<a href='https://wired.jp/article/google-passkey-password-replacement/' target='_blank'>認証方式「パスキー」をグーグルが本格導入</a><br><b>メルカリ</b>:<a href='https://about.mercari.com/press/news/articles/20230414_passkeys/' target='_blank'>フリマアプリ「メルカリ」、パスワード不要な生体認証「パスキー」に対応</a><br><b>ドコモ</b>:<a href='https://www.bcnretail.com/market/detail/20221018_300507.html' target='_blank'>dアカウントのログインにWeb認証とパスキーによる新たな認証手段を導入へ</a>");
i18n_messages.set("info_3", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey system architecture");
lang_map.set("en", "Passkey system architecture");
lang_map.set("zh-CN", "Passkey 的系统架构");
lang_map.set("ja", "パスキーのシステムアーキテクチャ");
i18n_messages.set("info_title_4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "A: Mobile device browser <br>B: Computer browser <br>C: Mobile device App (App embeds amiPro SDK) <br>D: Your website <br>E: amiPro cloud service<br><br>1. The browser downloads the amiPro JavaScript SDK from your website (App does not need this step)<br>2. The browser and App call the amiPro cloud service through the SDK for authentication<br>3. amiPro returns the authentication result to your server<br><img src='files/amipro_sys.jpg' style='width: 80%;'>");
lang_map.set("en", "A: Mobile device browser <br>B: Computer browser <br>C: Mobile device App (App embeds amiPro SDK) <br>D: Your website <br>E: amiPro cloud service<br><br>1. The browser downloads the amiPro JavaScript SDK from your website (App does not need this step)<br>2. The browser and App call the amiPro cloud service through the SDK for authentication<br>3. amiPro returns the authentication result to your server<br><img src='files/amipro_sys.jpg' style='width: 80%;'>");
lang_map.set("zh-CN", "A:移动设备浏览器 <br>B:电脑浏览器 <br>C:移动设备App(App嵌入amiPro SDK) <br>D:您的网站 <br>E:amiPro云服务<br><br>1、浏览器从您的网站下载amiPro JavaScript SDK(App无需此步骤)<br>2、浏览器及App通过SDK调用amiPro云服务进行认证<br>3、amiPro将认证结果返回给您的服务器<img src='files/amipro_sys.jpg' style='width: 80%;'>");
lang_map.set("ja", "A:モバイルデバイスブラウザ<br>B:コンピュータブラウザ<br>C:モバイルデバイスアプリ(AppにamiPro SDKを埋め込む)<br>D:あなたのウェブサイト E:amiProクラウド・サービス<br><br>1、ブラウザはあなたのウェブサイトからamiPro JavaScript SDKをダウンロードします(Appはこのステップは必要ありません)<br>2、ブラウザとアプリはSDKを介してamiProクラウド・サービスを呼び出して認証します<br>3、amiProは認証結果をあなたのサーバーに返します<br><img src='files/amipro_sys.jpg' style='width: 80%;'>");
i18n_messages.set("info_4", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Passkey essentials");
lang_map.set("en", "Passkey essentials");
lang_map.set("zh-CN", "Passkey essentials");
lang_map.set("ja", "Passkey essentials");
i18n_messages.set("hero_eyebrow", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Everything teams need to understand Passkeys");
lang_map.set("en", "Everything teams need to understand Passkeys");
lang_map.set("zh-CN", "团队理解 Passkey 所需的一切");
lang_map.set("ja", "チームがパスキーを理解するために必要なすべて");
i18n_messages.set("hero_title", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Share the fundamentals with product, security, and CX partners using this at-a-glance passkey briefing powered by amiPro research.");
lang_map.set("en", "Share the fundamentals with product, security, and CX partners using this at-a-glance passkey briefing powered by amiPro research.");
lang_map.set("zh-CN", "使用由 amiPro 研究提供的一览式 Passkey 简报,与产品、安全和客户体验伙伴共享基础知识。");
lang_map.set("ja", "amiPro のリサーチによる一目でわかるパスキー解説を使用して、プロダクト、セキュリティ、CX のパートナーと基礎を共有します。");
i18n_messages.set("hero_lead", lang_map);
lang_map = new Map();
lang_map.set("en-US", "FIDO2 ready");
lang_map.set("en", "FIDO2 ready");
lang_map.set("zh-CN", "FIDO2 准备就绪");
lang_map.set("ja", "FIDO2 対応");
i18n_messages.set("hero_chip_1", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Phishing resistant");
lang_map.set("en", "Phishing resistant");
lang_map.set("zh-CN", "抵御钓鱼");
lang_map.set("ja", "フィッシング耐性");
i18n_messages.set("hero_chip_2", lang_map);
lang_map = new Map();
lang_map.set("en-US", "Device agnostic");
lang_map.set("en", "Device agnostic");
lang_map.set("zh-CN", "设备无关");
lang_map.set("ja", "デバイス非依存");
i18n_messages.set("hero_chip_3", lang_map);
lang_map = new Map();
lang_map.set("en", "See benefits");
lang_map.set("ja", "メリットを見る");
i18n_messages.set("label_merits", lang_map);
lang_map = new Map();
lang_map.set("en", "How Passkeys Work: Step by Step");
lang_map.set("ja", "パスキーの仕組み: ステップバイステップ");
lang_map.set("zh-CN", "Passkey 工作原理:分步详解");
i18n_messages.set("static_howto_title", lang_map);
lang_map = new Map();
lang_map.set("en", "Passkey Benefits for Businesses");
lang_map.set("ja", "ビジネスのためのパスキーのメリット");
lang_map.set("zh-CN", "Passkey 为企业带来的收益");
i18n_messages.set("static_benefits_title", lang_map);
window.onload = async function() {
setI18NText(i18n_messages)
initRevealAnimations()
if (typeof createLanguageSelector === 'function') {
document.body.appendChild(createLanguageSelector());
}
}
</script>
@@ -244,11 +345,29 @@
</div>
<div class="hero__media" data-animate>
<div class="hero__device">
<img src="files/passkeys.jpg" alt="Passkey devices">
<img src="files/passkeys.jpg" alt="Various passkey authentication devices including smartphones, laptops, and security keys">
</div>
</div>
</section>
<section style="margin-top: 3rem; padding: 2rem; background: #f8f9fa; border-radius: 12px;">
<h2 id="static_howto_title" style="font-size: 1.5rem; font-weight: 600; color: #0f172a; margin-bottom: 1rem;">How Passkeys Work: Step by Step</h2>
<ol style="padding-left: 1.5rem; color: #334155; line-height: 1.8;">
<li><strong>Registration:</strong> The user registers a passkey by authenticating with biometrics (fingerprint or face recognition) or a hardware security key on their device.</li>
<li><strong>Key pair creation:</strong> A cryptographic key pair is generated. The private key stays securely on the user device; the public key is sent to the website server.</li>
<li><strong>Authentication:</strong> On subsequent logins, the user authenticates with biometrics to unlock the private key, which signs a cryptographic challenge from the server.</li>
<li><strong>Verification:</strong> The server verifies the signature using the public key and grants access — no password ever transmitted.</li>
</ol>
<h2 id="static_benefits_title" style="font-size: 1.5rem; font-weight: 600; color: #0f172a; margin-top: 2rem; margin-bottom: 1rem;">Passkey Benefits for Businesses</h2>
<ul style="padding-left: 1.5rem; color: #334155; line-height: 1.8;">
<li><strong>99.9% phishing reduction:</strong> Passkeys are bound to the legitimate website domain, making phishing attacks ineffective.</li>
<li><strong>203% ROI over 3 years:</strong> Reduced security incidents, lower support costs, and improved conversion rates deliver measurable returns.</li>
<li><strong>75% fewer support tickets:</strong> Eliminating password resets dramatically reduces help desk burden by year three.</li>
<li><strong>Faster sign-ins:</strong> Biometric authentication is quicker than typing passwords, reducing login abandonment.</li>
</ul>
<p style="margin-top: 1rem; font-size: 0.85rem; color: #64748b;">amiPro Passkey Hub provides FIDO2-certified infrastructure with open-source SDKs for JavaScript, iOS, and Android.</p>
</section>
<section class="info-panels" style="margin-top: 3rem;">
<article class="info-panel" data-animate>
<h4 id="info_title_1">define</h4>