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
This commit is contained in:
qingjie.du
2026-06-21 12:22:24 +09:00
parent e93b48345c
commit 506989660b
7 changed files with 1005 additions and 185 deletions

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', 'ContextWizardamiPro, 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>
@@ -162,13 +572,9 @@
<!-- Layout wrapper -->
<div class="layout-wrapper layout-content-navbar">
<div class="layout-container">
<!-- Layout container -->
<div class="layout-page">
<!-- Navbar -->
<!-- / Navbar -->
<!-- Layout container -->
<div class="layout-page">
<!-- Navbar -->
<!-- Content wrapper -->
<div class="content-wrapper">
@@ -176,29 +582,29 @@
<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">Localfirst</span>
<span class="hero-chip">Chrome Manifest V3</span>
<span class="hero-chip">GDPR & CCPA aligned</span>
<span id="chip_local" class="hero-chip">Localfirst</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 doesnt move) inside the extension and how to stay in control.
</p>
<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 extensions 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 conversations 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 Chromes 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 Chromes 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. Childrens Privacy</h3>
<h3 id="section_10_title" class="card-title" style="margin: 0;">10. Childrens 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>