diff --git a/website/docs/faq.md b/website/docs/faq.md index ebf62b96d..85b369f41 100644 --- a/website/docs/faq.md +++ b/website/docs/faq.md @@ -98,7 +98,7 @@ OpenScreen is a free, MIT-licensed screen recorder and video editor for Windows, |---|---| | Website | [getopenscreen.com](https://getopenscreen.com/) | | Source code, releases and issues | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | Original project, archived and read-only | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/docs/installation.md b/website/docs/installation.md index 55f638909..eb26e827a 100644 --- a/website/docs/installation.md +++ b/website/docs/installation.md @@ -51,7 +51,7 @@ Those builds were not signed with a Developer ID certificate, and macOS ties Scr ## Windows -**Recommended: Microsoft Store.** [Get OpenScreen from the Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5), or install the same package from a terminal: +**Recommended: Microsoft Store.** [Get OpenScreen from the Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website), or install the same package from a terminal: ```powershell winget install --source msstore OpenScreen diff --git a/website/docs/intro.md b/website/docs/intro.md index 4b1e52929..041ef6b5f 100644 --- a/website/docs/intro.md +++ b/website/docs/intro.md @@ -55,7 +55,7 @@ Recording, editing, transcription, captions, and export need no account and keep |---|---| | **Website** | [getopenscreen.com](https://getopenscreen.com/) | | **Source code, releases, issues** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## Status of this site diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index ee792e6d8..c21c52351 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -407,6 +407,9 @@ export default async function createConfig(): Promise { }, }, + // Audience and download measurement (PostHog, cookieless). + clientModules: ["./src/analytics.ts"], + headTags: [ { tagName: "link", diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md index f42d0d2a9..baf062914 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ Unter [Installation](./installation.md) stehen die Schritte für jede Plattform. |---|---| | Website | [getopenscreen.com](https://getopenscreen.com/) | | Quellcode, Releases und Issues | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | Originalprojekt, archiviert und schreibgeschützt | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/de/docusaurus-plugin-content-docs/current/installation.md index 2dd35f5a3..619529145 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ Diese Builds waren nicht mit einem Developer-ID-Zertifikat signiert, und macOS b ## Windows {#windows} -**Empfohlen: Microsoft Store.** [Hol dir OpenScreen im Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) oder installiere dasselbe Paket im Terminal: +**Empfohlen: Microsoft Store.** [Hol dir OpenScreen im Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) oder installiere dasselbe Paket im Terminal: ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/de/docusaurus-plugin-content-docs/current/intro.md index 4bc615df7..f844717ab 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ Aufnahme, Bearbeitung, Transkription, Untertitel und Export brauchen kein Konto |---|---| | **Website** | [getopenscreen.com](https://getopenscreen.com/) | | **Quellcode, Releases, Issues** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## Stand dieser Website {#status-of-this-site} diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md index 41d5a216f..e55cd9c3f 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ En [Instalación](./installation.md) están los pasos para cada plataforma. |---|---| | Sitio web | [getopenscreen.com](https://getopenscreen.com/) | | Código fuente, versiones e incidencias | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | Proyecto original, archivado y de solo lectura | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/es/docusaurus-plugin-content-docs/current/installation.md index c3b302c83..7d39949d0 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ Esas compilaciones no estaban firmadas con un certificado Developer ID, y macOS ## Windows {#windows} -**Recomendado: Microsoft Store.** [Obtén OpenScreen en Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5), o instala el mismo paquete desde una terminal: +**Recomendado: Microsoft Store.** [Obtén OpenScreen en Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website), o instala el mismo paquete desde una terminal: ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/es/docusaurus-plugin-content-docs/current/intro.md index b6b31e633..b8a2e3f0c 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ La grabación, la edición, la transcripción, los subtítulos y la exportación |---|---| | **Sitio web** | [getopenscreen.com](https://getopenscreen.com/) | | **Código fuente, versiones, incidencias** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## Estado de este sitio {#status-of-this-site} diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md index e52884f36..fe48dd40e 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ La page [Installation](./installation.md) donne les étapes pour chaque platefor |---|---| | Site web | [getopenscreen.com](https://getopenscreen.com/) | | Code source, versions et tickets | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | Projet d'origine, archivé et en lecture seule | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/installation.md index 7882eb3a8..cde629644 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ Ces versions n'étaient pas signées avec un certificat Developer ID, et macOS l ## Windows {#windows} -**Recommandé : Microsoft Store.** [Obtenez OpenScreen sur le Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5), ou installez le même paquet depuis un terminal : +**Recommandé : Microsoft Store.** [Obtenez OpenScreen sur le Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website), ou installez le même paquet depuis un terminal : ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/intro.md index a924f16a2..09c30069a 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ L'enregistrement, le montage, la transcription, les sous-titres et l'export ne d |---|---| | **Site web** | [getopenscreen.com](https://getopenscreen.com/) | | **Code source, versions, tickets** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## État de ce site {#status-of-this-site} diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md index 8de7a978b..bc3faf7f7 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ OpenScreen は、Windows、macOS、Linux に対応した、MIT ライセンス |---|---| | ウェブサイト | [getopenscreen.com](https://getopenscreen.com/) | | ソースコード、リリース、Issue | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | 元のプロジェクト(アーカイブ済み、読み取り専用) | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/installation.md index 5d18a9567..c36448654 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ Windows では [Microsoft Store](#windows) からのインストールをおす ## Windows {#windows} -**推奨:Microsoft Store。** [Microsoft Store で OpenScreen を入手する](https://apps.microsoft.com/detail/9MXQ1HQJL5G5)か、ターミナルから同じパッケージをインストールします。 +**推奨:Microsoft Store。** [Microsoft Store で OpenScreen を入手する](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website)か、ターミナルから同じパッケージをインストールします。 ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/intro.md index 64fcf8980..c5521af4c 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ OpenScreen は頻繁にリリースされます。リリースの間に、`.open |---|---| | **ウェブサイト** | [getopenscreen.com](https://getopenscreen.com/) | | **ソースコード、リリース、Issue** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## このサイトの状況 {#status-of-this-site} diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md index 36711b5a0..4f7ef7e8b 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ A [Instalação](./installation.md) traz os passos para cada plataforma. |---|---| | Site | [getopenscreen.com](https://getopenscreen.com/) | | Código-fonte, versões e issues | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | Projeto original, arquivado e somente leitura | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/installation.md index 46a2b2f0d..ef6312f05 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ Esses builds não eram assinados com um certificado Developer ID, e o macOS vinc ## Windows {#windows} -**Recomendado: Microsoft Store.** [Obtenha o OpenScreen na Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) ou instale o mesmo pacote pelo terminal: +**Recomendado: Microsoft Store.** [Obtenha o OpenScreen na Microsoft Store](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) ou instale o mesmo pacote pelo terminal: ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md index fdf27ca33..af2294881 100644 --- a/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ Gravação, edição, transcrição, legendas e exportação não exigem conta e |---|---| | **Site** | [getopenscreen.com](https://getopenscreen.com/) | | **Código-fonte, versões, issues** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## Status deste site {#status-of-this-site} diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md index 67fadf4ce..dc0a42142 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ OpenScreen 是一款免费的录屏与视频剪辑软件,采用 MIT 许可证 |---|---| | 网站 | [getopenscreen.com](https://getopenscreen.com/) | | 源代码、版本发布和 Issue | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | 原项目,已归档,只读 | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/installation.md index 290059f25..2881e80ea 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ keywords: ## Windows {#windows} -**推荐:Microsoft Store**。[从 Microsoft Store 获取 OpenScreen](https://apps.microsoft.com/detail/9MXQ1HQJL5G5),或在终端中安装同一个安装包: +**推荐:Microsoft Store**。[从 Microsoft Store 获取 OpenScreen](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website),或在终端中安装同一个安装包: ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/intro.md index 26b670e01..ec25951cb 100644 --- a/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/zh-CN/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ OpenScreen 发布频繁。在两个版本之间,`.openscreen` 项目格式和 |---|---| | **网站** | [getopenscreen.com](https://getopenscreen.com/) | | **源代码、版本发布、Issue** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## 本站现状 {#status-of-this-site} diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md index 0869e86bd..4d044fc91 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md +++ b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/faq.md @@ -98,7 +98,7 @@ OpenScreen 是一款採用 MIT 授權的免費螢幕錄影與影片剪輯軟體 |---|---| | 網站 | [getopenscreen.com](https://getopenscreen.com/) | | 原始碼、版本與問題回報 | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| Microsoft Store | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | Discord | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | | 原始專案(已封存,唯讀) | [github.com/siddharthvaddem/openscreen](https://github.com/siddharthvaddem/openscreen) | diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/installation.md b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/installation.md index e2f257a06..30132b7d5 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/installation.md +++ b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/installation.md @@ -51,7 +51,7 @@ keywords: ## Windows {#windows} -**建議:Microsoft Store。** [從 Microsoft Store 取得 OpenScreen](https://apps.microsoft.com/detail/9MXQ1HQJL5G5),或從終端機安裝同一個套件: +**建議:Microsoft Store。** [從 Microsoft Store 取得 OpenScreen](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website),或從終端機安裝同一個套件: ```powershell winget install --source msstore OpenScreen diff --git a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/intro.md b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/intro.md index b23a3804a..de45316c3 100644 --- a/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/intro.md +++ b/website/i18n/zh-TW/docusaurus-plugin-content-docs/current/intro.md @@ -55,7 +55,7 @@ OpenScreen 發布頻繁。在兩個版本之間,`.openscreen` 專案格式與 |---|---| | **網站** | [getopenscreen.com](https://getopenscreen.com/) | | **原始碼、版本、問題回報** | [github.com/getopenscreen/openscreen](https://github.com/getopenscreen/openscreen) | -| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5) | +| **Microsoft Store** | [apps.microsoft.com/detail/9MXQ1HQJL5G5](https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website) | | **Discord** | [getopenscreen.com/discord](https://getopenscreen.com/discord/) | ## 本網站的狀態 {#status-of-this-site} diff --git a/website/package-lock.json b/website/package-lock.json index 99e29127c..4cf26245a 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -16,6 +16,7 @@ "@mdx-js/react": "^3.1.0", "clsx": "^2.1.1", "lucide-react": "^1.23.0", + "posthog-js": "~1.435.1", "prism-react-renderer": "^2.4.1", "react": "^18.3.1", "react-dom": "^18.3.1" @@ -5579,6 +5580,31 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@posthog/browser-common": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@posthog/browser-common/-/browser-common-0.9.4.tgz", + "integrity": "sha512-QlG0WZFG9iTp9cmXTypB4cgnxBAD3GImrj9AwmA84uh8uy5vIVgVLjoTTdOAW29XL+kh/eLn/5ZtBQt2JQfR+w==", + "license": "MIT", + "dependencies": { + "@posthog/core": "^1.57.4", + "@posthog/types": "^1.415.2" + } + }, + "node_modules/@posthog/core": { + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.59.0.tgz", + "integrity": "sha512-KRq26v5fXYnwV5wqTAXzPyQLCrBzzhK78QRl7UyEaPFZ4RPmVo1pBObRDbK350ah+8hTfQPanu5mM8c4CaSn5g==", + "license": "MIT", + "dependencies": { + "@posthog/types": "^1.416.0" + } + }, + "node_modules/@posthog/types": { + "version": "1.416.0", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.416.0.tgz", + "integrity": "sha512-0/9+02s/0uDyrH4G/qUg1yyl6gXUg8Uuxw/PlDad3KLzo9FFS9zS/kAQaEshx/saVGupj1aAy/4EUBxWisBogw==", + "license": "MIT" + }, "node_modules/@rspack/binding": { "version": "1.7.12", "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.12.tgz", @@ -6871,6 +6897,13 @@ "@types/node": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -9274,6 +9307,15 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/domutils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", @@ -9976,6 +10018,12 @@ "node": ">=0.4.0" } }, + "node_modules/fflate": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.9.tgz", + "integrity": "sha512-zdxgIEddhfsyCaWpJ2SdXEP8ZMrKJ6+5jl4OupODcywU0IhRk6gdXuVGcPICyfx2H97hVK7xmJtRLPjkxAX8Vw==", + "license": "MIT" + }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -16678,6 +16726,54 @@ "postcss": "^8.4.31" } }, + "node_modules/posthog-js": { + "version": "1.435.9", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.435.9.tgz", + "integrity": "sha512-Ic0zS5eGWlo/0oEnWc46iL0DD/zlkPPjM5HkrTWCGHis8wqioU1nwBAwfFnqz+u5WMNeRlVX+4IbPEtOmT5NEw==", + "license": "(Apache-2.0 AND MIT)", + "dependencies": { + "@posthog/browser-common": "^0.9.1", + "@posthog/core": "^1.55.3", + "@posthog/types": "^1.413.0", + "core-js": "^3.49.0", + "dompurify": "^3.4.13", + "fflate": "^0.4.8", + "preact": "^10.29.3", + "query-selector-shadow-dom": "^1.0.1", + "web-vitals": "^6.2.1", + "web-vitals-soft-navs": "npm:web-vitals@6.2.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/preact": { + "version": "10.29.8", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", + "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact-render-to-string": ">=5" + }, + "peerDependenciesMeta": { + "preact-render-to-string": { + "optional": true + } + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -16845,6 +16941,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-selector-shadow-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -19510,6 +19612,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-vitals": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-6.2.3.tgz", + "integrity": "sha512-Dmy+vdO1UPMqXiAtZSNayhl4f794Bxfd94W4HIj2HlYtczEQfEOon969memlcpcHrTuOKLa5baFjX7WbgmOq+A==", + "license": "Apache-2.0" + }, + "node_modules/web-vitals-soft-navs": { + "name": "web-vitals", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-6.2.1.tgz", + "integrity": "sha512-rLcLXA2sx6+9dE88NHFubwTtGxpK4yYBLj6qHPdFoCaLr0cXGb4efOqtKLlm4loGA4OEKHIQKMKzZkKyOh5ctw==", + "license": "Apache-2.0" + }, "node_modules/webpack": { "version": "5.107.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz", diff --git a/website/package.json b/website/package.json index 01d46f3a4..5018a1e35 100644 --- a/website/package.json +++ b/website/package.json @@ -26,6 +26,7 @@ "@mdx-js/react": "^3.1.0", "clsx": "^2.1.1", "lucide-react": "^1.23.0", + "posthog-js": "~1.435.1", "prism-react-renderer": "^2.4.1", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/website/src/analytics.ts b/website/src/analytics.ts new file mode 100644 index 000000000..e8cdd44f1 --- /dev/null +++ b/website/src/analytics.ts @@ -0,0 +1,29 @@ +import { downloadClick } from "./lib/download-target"; + +// A project token is public by design: it can only send events, not read them. +const POSTHOG_TOKEN = "phc_zhJDJHBBRDAJBwSb7zf2JuQ59v6RwBN96ZksM2y4oq8C"; + +// The live domain only, so neither `npm run dev`, a local `serve` nor a preview +// deployment counts. posthog-js is fetched as its own chunk, after hydration has +// started, so it never holds up the first paint. +if (typeof window !== "undefined" && window.location.hostname === "getopenscreen.com") { + void import("posthog-js").then(({ default: posthog }) => { + posthog.init(POSTHOG_TOKEN, { + api_host: "https://eu.i.posthog.com", + defaults: "2026-08-30", + // Nothing stored in the browser, so no consent banner. PostHog counts + // visitors with a daily hash it computes server-side, which needs + // "Cookieless server hash mode" on in the project settings. + cookieless_mode: "always", + person_profiles: "never", + }); + // One listener for every download link on the site: the landing page's + // button, /download/'s cards and any page that links a release asset. + document.addEventListener("click", (event) => { + const link = event.target instanceof Element ? event.target.closest("a") : null; + const download = link ? downloadClick(link.href) : null; + // sendBeacon survives the navigation a Store or fallback link starts. + if (download) posthog.capture("download_clicked", download, { transport: "sendBeacon" }); + }); + }); +} diff --git a/website/src/lib/download-target.test.ts b/website/src/lib/download-target.test.ts index 2a5c2076c..e940ac28c 100644 --- a/website/src/lib/download-target.test.ts +++ b/website/src/lib/download-target.test.ts @@ -4,8 +4,10 @@ import { test } from "node:test"; import { browserDownloadTarget, directDownloadUrl, + downloadClick, downloadTarget, STORE_INSTALLER_URL, + STORE_URL, } from "./download-target.ts"; test("Windows goes directly to the official Store installer without release metadata", () => { @@ -149,3 +151,18 @@ test("architecture detection asks for one hint and tolerates refusal and hidden ); assert.deepEqual(refused, { os: "macos", kind: null }); }); + +test("a download click names the asset kind and the release, and other links are not downloads", () => { + const base = "https://github.com/getopenscreen/openscreen/releases/download/v2.0.0"; + assert.deepEqual(downloadClick(`${base}/Openscreen-mac-arm64.dmg`), { + kind: "macArm", + version: "v2.0.0", + file: "Openscreen-mac-arm64.dmg", + }); + assert.equal(downloadClick(`${base}/Openscreen-Setup-arm64.exe`)?.kind, "other"); + assert.equal(downloadClick(STORE_INSTALLER_URL)?.kind, "store"); + assert.equal(downloadClick("https://github.com/getopenscreen/openscreen/releases/latest"), null); + assert.equal(downloadClick(STORE_URL), null); + assert.equal(downloadClick("https://github.com/someone/else/releases/download/v1/x.dmg"), null); + assert.equal(downloadClick(`https://example.com/?next=${base}/Openscreen-mac-arm64.dmg`), null); +}); diff --git a/website/src/lib/download-target.ts b/website/src/lib/download-target.ts index 8cbfec07d..5518c8aaf 100644 --- a/website/src/lib/download-target.ts +++ b/website/src/lib/download-target.ts @@ -1,8 +1,10 @@ -import { type AssetKind, findAsset, type LatestRelease } from "./release.ts"; +import { ASSET_PATTERNS, type AssetKind, findAsset, type LatestRelease } from "./release.ts"; -export const STORE_URL = "https://apps.microsoft.com/detail/9MXQ1HQJL5G5"; -// The endpoint used by Microsoft's own Store badge in direct-install mode. -export const STORE_INSTALLER_URL = "https://get.microsoft.com/installer/download/9MXQ1HQJL5G5"; +// `cid` makes the site its own campaign in Partner Center's Acquisitions report. +export const STORE_URL = "https://apps.microsoft.com/detail/9MXQ1HQJL5G5?cid=website"; +// The endpoint and query Microsoft's own Store badge uses in direct-install mode. +export const STORE_INSTALLER_URL = + "https://get.microsoft.com/installer/download/9MXQ1HQJL5G5?referrer=appbadge&cid=website"; export type DownloadTarget = { os: "macos" | "windows" | "linux" | null; @@ -108,3 +110,30 @@ export function directDownloadUrl(target: DownloadTarget, release: LatestRelease if (target.os === "windows") return STORE_INSTALLER_URL; return target.kind ? (findAsset(release, target.kind)?.url ?? null) : null; } + +export type DownloadClick = { + kind: AssetKind | "store" | "other"; + version: string | null; + file: string | null; +}; + +const RELEASE_ASSET_PATH = /^\/getopenscreen\/openscreen\/releases\/download\/([^/]+)\/([^/]+)$/; + +/** What a link downloads, for the analytics event, or null when it downloads nothing: an + * OpenScreen release asset on github.com, or the Store installer. */ +export function downloadClick(href: string): DownloadClick | null { + if (href.startsWith(STORE_INSTALLER_URL)) return { kind: "store", version: null, file: null }; + let url: URL; + try { + url = new URL(href); + } catch { + return null; + } + const match = url.hostname === "github.com" ? RELEASE_ASSET_PATH.exec(url.pathname) : null; + if (!match) return null; + const file = decodeURIComponent(match[2]); + const kind = (Object.keys(ASSET_PATTERNS) as AssetKind[]).find((k) => + ASSET_PATTERNS[k].test(file), + ); + return { kind: kind ?? "other", version: match[1], file }; +}