feat: update integration guides and add new CMS integrations for Craft CMS, Statamic, TYPO3, Kirby, Grav, and Umbraco

This commit is contained in:
Usman Baig
2026-02-07 01:14:02 +01:00
parent a074ba7dd9
commit fe6a0b9ebd
2 changed files with 1381 additions and 2 deletions

View File

@@ -4,7 +4,7 @@
* Each guide is keyed by the integration slug and rendered on the * Each guide is keyed by the integration slug and rendered on the
* `/integrations/[slug]` page. * `/integrations/[slug]` page.
* *
* * 50 guides across 7 categories. * * 75 guides across 7 categories.
*/ */
import { type ReactNode } from 'react' import { type ReactNode } from 'react'
@@ -2623,6 +2623,964 @@ export default defineConfig({
</p> </p>
</> </>
), ),
/* ────────────────────────────────────────────────────────────────────────────
* 51. Craft CMS
* ──────────────────────────────────────────────────────────────────────────── */
'craftcms': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Craft CMS site by editing your Twig layout template.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Layout</h3>
<p>
Edit your main Twig layout template at{' '}
<code>templates/_layout.twig</code> and add the Pulse script inside the{' '}
<code>&lt;head&gt;</code> section.
</p>
<CodeBlock filename="templates/_layout.twig">{`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title>{{ siteName }}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://craftcms.com/docs/5.x/system/elements.html" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Craft CMS docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 52. Statamic
* ──────────────────────────────────────────────────────────────────────────── */
'statamic': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Statamic is a Laravel-based CMS. Add Pulse to your Antlers or Blade
layout.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Layout</h3>
<p>
Edit your Antlers layout at{' '}
<code>resources/views/layout.antlers.html</code> and add the Pulse
script inside the <code>&lt;head&gt;</code> section.
</p>
<CodeBlock filename="resources/views/layout.antlers.html">{`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title>{{ title }}</title>
</head>
<body>
{{ template_content }}
</body>
</html>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://statamic.dev/views" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Statamic views docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 53. TYPO3
* ──────────────────────────────────────────────────────────────────────────── */
'typo3': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your TYPO3 site via TypoScript setup.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via TypoScript</h3>
<p>
Add the following to your <code>setup.typoscript</code> file to inject
the Pulse script into the page header.
</p>
<CodeBlock filename="setup.typoscript">{`page.headerData.999 = TEXT
page.headerData.999.value = <script defer data-domain="your-site.com" src="https://pulse.ciphera.net/script.js"></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
TypoScript reference
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 54. Kirby
* ──────────────────────────────────────────────────────────────────────────── */
'kirby': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Kirby site via a PHP snippet.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Header Snippet</h3>
<p>
Edit <code>site/snippets/header.php</code> or{' '}
<code>site/templates/default.php</code> and add the Pulse script before
the closing <code>&lt;/head&gt;</code> tag.
</p>
<CodeBlock filename="site/snippets/header.php">{`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title><?= $page->title() ?></title>
</head>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://getkirby.com/docs/guide/templates/snippets" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Kirby snippets docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 55. Grav
* ──────────────────────────────────────────────────────────────────────────── */
'grav': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Grav site via Twig templates.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Base Template</h3>
<p>
Edit your theme&apos;s base template at{' '}
<code>templates/partials/base.html.twig</code> and add the Pulse script
inside the head block.
</p>
<CodeBlock filename="templates/partials/base.html.twig">{`<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title>{{ page.title }}</title>
{% endblock %}
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://learn.getgrav.org/17/themes/twig-primer" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Grav Twig docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 56. Umbraco
* ──────────────────────────────────────────────────────────────────────────── */
'umbraco': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Umbraco site via a Razor layout view.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Layout</h3>
<p>
Edit <code>Views/Shared/_Layout.cshtml</code> and add the Pulse script
before the closing <code>&lt;/head&gt;</code> tag. Use an environment
tag guard to only load in production.
</p>
<CodeBlock filename="Views/Shared/_Layout.cshtml">{`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<environment include="Production">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
</environment>
<title>@ViewData["Title"]</title>
</head>
<body>
@RenderBody()
</body>
</html>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://docs.umbraco.com/umbraco-cms/fundamentals/design/templates" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Umbraco templates docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 57. Storyblok
* ──────────────────────────────────────────────────────────────────────────── */
'storyblok': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Storyblok is a headless CMS add Pulse to the frontend that renders
your Storyblok content.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add Pulse to Your Frontend</h3>
<p>
Since Storyblok is a headless CMS, the analytics script goes in your
frontend framework. Follow the guide for your framework:
</p>
<ul>
<li><a href="/integrations/nextjs" className="text-brand-orange hover:underline">Next.js</a></li>
<li><a href="/integrations/nuxt" className="text-brand-orange hover:underline">Nuxt</a></li>
<li><a href="/integrations/gatsby" className="text-brand-orange hover:underline">Gatsby</a></li>
<li><a href="/integrations/astro" className="text-brand-orange hover:underline">Astro</a></li>
<li><a href="/integrations/svelte" className="text-brand-orange hover:underline">SvelteKit</a></li>
</ul>
<p>
For more details, see the{' '}
<a href="https://www.storyblok.com/docs/guide/introduction" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Storyblok docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 58. Prismic
* ──────────────────────────────────────────────────────────────────────────── */
'prismic': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Prismic is a headless CMS add Pulse to the frontend that displays
your Prismic content.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add Pulse to Your Frontend</h3>
<p>
Since Prismic is a headless CMS, the analytics script goes in your
frontend framework. Follow the guide for your framework:
</p>
<ul>
<li><a href="/integrations/nextjs" className="text-brand-orange hover:underline">Next.js</a></li>
<li><a href="/integrations/nuxt" className="text-brand-orange hover:underline">Nuxt</a></li>
<li><a href="/integrations/gatsby" className="text-brand-orange hover:underline">Gatsby</a></li>
<li><a href="/integrations/astro" className="text-brand-orange hover:underline">Astro</a></li>
<li><a href="/integrations/svelte" className="text-brand-orange hover:underline">SvelteKit</a></li>
</ul>
<p>
For more details, see the{' '}
<a href="https://prismic.io/docs" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Prismic docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 59. Shopware
* ──────────────────────────────────────────────────────────────────────────── */
'shopware': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Shopware 6 store via theme template.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Theme</h3>
<p>
Edit{' '}
<code>Resources/views/storefront/layout/meta.html.twig</code> in your
theme and add the Pulse script in the <code>base_header</code> block.
</p>
<CodeBlock filename="Resources/views/storefront/layout/meta.html.twig">{`{% sw_extends '@Storefront/storefront/layout/meta.html.twig' %}
{% block base_header %}
{{ parent() }}
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
{% endblock %}`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://developer.shopware.com/docs/guides/plugins/themes/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Shopware themes docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 60. Magento / Adobe Commerce
* ──────────────────────────────────────────────────────────────────────────── */
'magento': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Magento / Adobe Commerce store via layout XML.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Method 1: Layout XML</h3>
<p>
Add the Pulse script to your theme&apos;s layout XML at{' '}
<code>app/design/frontend/YOUR_THEME/default/Magento_Theme/layout/default_head_blocks.xml</code>.
</p>
<CodeBlock filename="default_head_blocks.xml">{`<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<script src="https://pulse.ciphera.net/script.js"
src_type="url"
defer="true" />
</head>
</page>`}</CodeBlock>
<h3>Method 2: Admin Panel</h3>
<p>
Go to <strong>Content &rarr; Design &rarr; Configuration &rarr; HTML
Head &rarr; Scripts and Style Sheets</strong> and paste the Pulse
script.
</p>
<CodeBlock filename="Admin → HTML Head">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://developer.adobe.com/commerce/frontend-core/guide/layouts/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Magento layout docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 61. Bubble
* ──────────────────────────────────────────────────────────────────────────── */
'bubble': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Bubble app via the SEO / Meta tags section.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Settings</h3>
<p>
Go to <strong>Settings &rarr; SEO / Metatags &rarr; Script/meta tags in
header</strong> and paste the Pulse script.
</p>
<CodeBlock filename="Bubble → SEO / Metatags → Header">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://manual.bubble.io/help-guides/getting-started/application-settings" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Bubble settings docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 62. Discourse
* ──────────────────────────────────────────────────────────────────────────── */
'discourse': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Discourse forum via admin customization.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Theme Customization</h3>
<p>
Go to <strong>Admin &rarr; Customize &rarr; Themes &rarr; Edit
CSS/HTML</strong> and add the Pulse script in the{' '}
<code>&lt;/head&gt;</code> section.
</p>
<CodeBlock filename="Discourse → Theme → </head>">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://meta.discourse.org/t/developer-s-guide-to-discourse-themes/93648" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Discourse themes guide
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 63. HubSpot
* ──────────────────────────────────────────────────────────────────────────── */
'hubspot': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your HubSpot-hosted pages via site settings.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Site Settings</h3>
<p>
Go to <strong>Settings &rarr; Website &rarr; Pages &rarr; Site Header
HTML</strong> and paste the Pulse script.
</p>
<CodeBlock filename="HubSpot → Site Header HTML">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
Works for HubSpot CMS Free, Starter, Pro, and Enterprise.
</p>
<p>
For more details, see the{' '}
<a href="https://knowledge.hubspot.com/website-pages/add-code-snippets-to-the-head-and-footer-html-of-your-pages" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
HubSpot header code docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 64. Substack
* ──────────────────────────────────────────────────────────────────────────── */
'substack': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Substack supports custom domains. Add Pulse tracking for your custom
domain.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Track Your Substack via a Custom Domain</h3>
<p>
Substack doesn&apos;t allow custom scripts directly. You can track your
Substack via your custom domain by configuring Pulse to track the custom
domain.
</p>
<ol>
<li>Set up your custom domain in Substack.</li>
<li>Add your custom domain in the Pulse dashboard.</li>
<li>Pulse will automatically track page views on your custom domain.</li>
</ol>
<p>
For more details, see the{' '}
<a href="https://support.substack.com/hc/en-us/articles/360037645932-How-do-I-set-up-a-custom-domain-" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Substack custom domain docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 65. Linktree
* ──────────────────────────────────────────────────────────────────────────── */
'linktree': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Linktree page via custom code (Business plan
required).
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Custom Meta Tags</h3>
<p>
Go to <strong>Settings &rarr; SEO &rarr; Custom Meta Tags</strong> and
add the Pulse script to the head.
</p>
<CodeBlock filename="Linktree → SEO → Head">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
<strong>Note:</strong> Requires Linktree Business or Enterprise plan.
</p>
<p>
For more details, see{' '}
<a href="https://linktr.ee/s/business/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Linktree Business
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 66. Weebly
* ──────────────────────────────────────────────────────────────────────────── */
'weebly': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Weebly site via the header code settings.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via SEO Settings</h3>
<p>
Go to <strong>Settings &rarr; SEO &rarr; Header Code</strong> and paste
the Pulse script.
</p>
<CodeBlock filename="Weebly → SEO → Header Code">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://www.weebly.com/app/help/us/en/topics/descriptions-and-keywords" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Weebly SEO docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 67. GitBook
* ──────────────────────────────────────────────────────────────────────────── */
'gitbook': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your GitBook documentation site.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Custom Scripts</h3>
<p>
GitBook supports custom header integrations. Go to{' '}
<strong>Space settings &rarr; Integrations &rarr; Custom
scripts</strong> and add the Pulse script.
</p>
<CodeBlock filename="GitBook → Custom Scripts">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://docs.gitbook.com/published-documentation/customization/space-customization" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
GitBook customization docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 68. Gridsome
* ──────────────────────────────────────────────────────────────────────────── */
'gridsome': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Gridsome site via the HTML template or a plugin.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Method 1: HTML Template</h3>
<p>
Edit <code>src/index.html</code> and add the Pulse script to the head
section.
</p>
<CodeBlock filename="src/index.html">{`<!DOCTYPE html>
<html \${htmlAttrs}>
<head>
\${head}
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
</head>
<body \${bodyAttrs}>
\${app}
</body>
</html>`}</CodeBlock>
<h3>Method 2: Server Configuration</h3>
<p>
Use <code>gridsome.server.js</code> to inject the script
programmatically.
</p>
<CodeBlock filename="gridsome.server.js">{`module.exports = function (api) {
api.afterBuild(({ queue }) => {
// Script injection logic
})
}`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://gridsome.org/docs/head/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Gridsome head management docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 69. Read the Docs
* ──────────────────────────────────────────────────────────────────────────── */
'readthedocs': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Read the Docs documentation.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Sphinx Configuration</h3>
<p>
Create a custom template override. In your Sphinx{' '}
<code>conf.py</code>, add the Pulse script as a JavaScript file.
</p>
<CodeBlock filename="conf.py">{`html_js_files = [
('https://pulse.ciphera.net/script.js', {'defer': 'defer', 'data-domain': 'your-site.com'}),
]`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://docs.readthedocs.io/en/stable/guides/adding-custom-css.html" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Read the Docs customization
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 70. Sphinx
* ──────────────────────────────────────────────────────────────────────────── */
'sphinx': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Sphinx documentation via <code>conf.py</code>.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Configuration</h3>
<p>
In your <code>conf.py</code>, add the Pulse script using{' '}
<code>html_js_files</code>.
</p>
<CodeBlock filename="conf.py">{`html_js_files = [
('https://pulse.ciphera.net/script.js', {'defer': 'defer', 'data-domain': 'your-site.com'}),
]`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_js_files" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Sphinx html_js_files docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 71. ReadMe
* ──────────────────────────────────────────────────────────────────────────── */
'readme': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your ReadMe API documentation portal.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script via Custom JavaScript</h3>
<p>
Go to <strong>Project Settings &rarr; Custom JavaScript</strong> and
paste the Pulse script.
</p>
<CodeBlock filename="ReadMe → Custom JavaScript">{`<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://docs.readme.com/main/docs/custom-javascript" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
ReadMe custom JavaScript docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 72. Flutter Web
* ──────────────────────────────────────────────────────────────────────────── */
'flutter': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your Flutter web application via{' '}
<code>web/index.html</code>.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your HTML Template</h3>
<p>
Edit <code>web/index.html</code> in your Flutter project and add the
Pulse script to the <code>&lt;head&gt;</code> section.
</p>
<CodeBlock filename="web/index.html">{`<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title>My Flutter App</title>
</head>
<body>
<script src="main.dart.js" type="application/javascript"></script>
</body>
</html>`}</CodeBlock>
<p>
<strong>Note:</strong> This only applies to Flutter Web. For Flutter
mobile apps, Pulse tracks web views only.
</p>
<p>
For more details, see the{' '}
<a href="https://docs.flutter.dev/platform-integration/web/building" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Flutter Web docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 73. Render
* ──────────────────────────────────────────────────────────────────────────── */
'render': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse via your framework setup. Render deploys framework projects.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Follow Your Framework&apos;s Guide</h3>
<p>
The analytics script goes in your source code, not in Render&apos;s
dashboard. Follow your framework&apos;s integration guide:
</p>
<ul>
<li><a href="/integrations/nextjs" className="text-brand-orange hover:underline">Next.js</a></li>
<li><a href="/integrations/astro" className="text-brand-orange hover:underline">Astro</a></li>
<li><a href="/integrations/remix" className="text-brand-orange hover:underline">Remix</a></li>
<li><a href="/integrations/gatsby" className="text-brand-orange hover:underline">Gatsby</a></li>
<li><a href="/integrations/eleventy" className="text-brand-orange hover:underline">Eleventy</a></li>
</ul>
<p>
For more details, see the{' '}
<a href="https://docs.render.com/deploy-an-app" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Render deployment docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 74. Firebase Hosting
* ──────────────────────────────────────────────────────────────────────────── */
'firebase': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to sites deployed on Firebase Hosting.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add the Pulse Script to Your Source Code</h3>
<p>
Follow your framework&apos;s integration guide. The analytics script
goes in your source code. Firebase Hosting serves static files, so add
the script to your <code>index.html</code> or framework layout.
</p>
<CodeBlock filename="public/index.html">{`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script
defer
data-domain="your-site.com"
src="https://pulse.ciphera.net/script.js"
></script>
<title>My App</title>
</head>
<body>
<div id="app"></div>
</body>
</html>`}</CodeBlock>
<p>
For more details, see the{' '}
<a href="https://firebase.google.com/docs/hosting" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
Firebase Hosting docs
</a>.
</p>
</>
),
/* ────────────────────────────────────────────────────────────────────────────
* 75. AMP
* ──────────────────────────────────────────────────────────────────────────── */
'amp': (
<>
<p className="lead text-xl text-neutral-600 dark:text-neutral-400">
Add Pulse to your AMP pages using the <code>amp-analytics</code>{' '}
component.
</p>
<hr className="my-8 border-neutral-200 dark:border-neutral-800" />
<h3>Add Pulse via amp-analytics</h3>
<p>
AMP pages have restrictions on JavaScript. The{' '}
<code>amp-analytics</code> component is the standard way to add
analytics. Add the following to your AMP page.
</p>
<CodeBlock filename="amp-page.html">{`<amp-analytics>
<script type="application/json">
{
"requests": {
"pageview": "https://pulse.ciphera.net/api/event"
},
"triggers": {
"trackPageview": {
"on": "visible",
"request": "pageview",
"extraUrlParams": {
"domain": "your-site.com",
"name": "pageview",
"url": "\${canonicalUrl}"
}
}
}
}
</script>
</amp-analytics>`}</CodeBlock>
<p>
<strong>Note:</strong> AMP pages have restrictions on JavaScript. The{' '}
<code>amp-analytics</code> component is the standard way to add
analytics.
</p>
<p>
For more details, see the{' '}
<a href="https://amp.dev/documentation/components/amp-analytics/" target="_blank" rel="noopener noreferrer" className="text-brand-orange hover:underline">
amp-analytics docs
</a>.
</p>
</>
),
} }
// * ─── Public API ───────────────────────────────────────────────────────────── // * ─── Public API ─────────────────────────────────────────────────────────────

View File

@@ -5,7 +5,7 @@
* ! SVG paths sourced from simple-icons (https://simpleicons.org). * ! SVG paths sourced from simple-icons (https://simpleicons.org).
* ! All icons use a 24×24 viewBox. * ! All icons use a 24×24 viewBox.
* *
* * 50 integrations across 7 categories. * * 75 integrations across 7 categories.
*/ */
import { type ReactNode } from 'react' import { type ReactNode } from 'react'
@@ -891,6 +891,427 @@ export const integrations: Integration[] = [
'Add Pulse analytics to your GitHub Pages site. Works with Jekyll, Hugo, or plain HTML.', 'Add Pulse analytics to your GitHub Pages site. Works with Jekyll, Hugo, or plain HTML.',
relatedIds: ['jekyll', 'hugo', 'netlify'], relatedIds: ['jekyll', 'hugo', 'netlify'],
}, },
// * ─── CMS & Blogging (continued) ──────────────────────────────────────────
{
id: 'craftcms',
name: 'Craft CMS',
description: 'Add Pulse to your Craft CMS site with a simple template tag.',
category: 'cms',
brandColor: '#E5422B',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#E5422B' }}>
<path d="M21.474 0H2.526A2.516 2.516 0 0 0 0 2.526v18.948A2.516 2.516 0 0 0 2.526 24h18.948A2.534 2.534 0 0 0 24 21.474V2.526A2.516 2.516 0 0 0 21.474 0m-9.516 14.625c.786 0 1.628-.31 2.442-1.039l1.123 1.291c-1.18.955-2.527 1.488-3.874 1.488-2.667 0-4.35-1.769-3.958-4.267.393-2.498 2.667-4.266 5.334-4.266 1.29 0 2.498.505 3.34 1.431l-1.572 1.291c-.45-.59-1.207-.982-2.05-.982-1.6 0-2.834 1.039-3.087 2.526-.224 1.488.674 2.527 2.302 2.527" />
</svg>
),
officialUrl: 'https://craftcms.com/docs',
seoDescription:
'Add Pulse analytics to your Craft CMS site via Twig templates. Simple installation.',
relatedIds: ['wordpress', 'statamic', 'drupal'],
},
{
id: 'statamic',
name: 'Statamic',
description: 'Integrate Pulse with your Statamic site via Antlers templates.',
category: 'cms',
brandColor: '#FF269E',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#FF269E' }}>
<path d="M19.78 21.639c1.754 0 2.398-.756 2.398-2.607v-3.62c0-1.722.837-2.704 1.641-3.17.242-.145.242-.483 0-.644-.836-.531-1.64-1.642-1.64-3.122v-3.54c0-1.996-.548-2.575-2.302-2.575H4.123c-1.754 0-2.301.58-2.301 2.575v3.556c0 1.48-.805 2.59-1.641 3.122a.377.377 0 0 0 0 .643c.804.451 1.64 1.433 1.64 3.17v3.605c0 1.85.645 2.607 2.399 2.607zm-7.82-3.299c-1.883 0-3.25-.563-4.522-1.673a.891.891 0 0 1-.29-.676.83.83 0 0 1 .193-.563l.403-.515c.193-.242.402-.354.643-.354.274 0 .531.112.805.29a5.331 5.331 0 0 0 2.993.884c.885 0 1.593-.37 1.593-1.126 0-1.963-6.533-.885-6.533-5.294 0-2.366 1.93-3.685 4.441-3.685 1.77 0 3.074.515 4.04 1.126.24.161.402.483.402.805 0 .193-.049.37-.161.53l-.29.435c-.21.29-.45.435-.756.435-.21 0-.435-.08-.676-.193a5.07 5.07 0 0 0-2.398-.564c-.95 0-1.513.515-1.513 1.046 0 2.012 6.534.918 6.534 5.198 0 2.414-1.947 3.894-4.908 3.894z" />
</svg>
),
officialUrl: 'https://statamic.dev/docs',
seoDescription:
'Add Pulse analytics to your Statamic site. Antlers template integration.',
relatedIds: ['craftcms', 'laravel', 'wordpress'],
},
{
id: 'typo3',
name: 'TYPO3',
description: 'Add Pulse to your TYPO3 site via TypoScript or Fluid templates.',
category: 'cms',
brandColor: '#FF8700',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#FF8700' }}>
<path d="M18.08 16.539c-.356.105-.64.144-1.012.144-3.048 0-7.524-10.652-7.524-14.197 0-1.305.31-1.74.745-2.114C6.56.808 2.082 2.177.651 3.917c-.31.436-.497 1.12-.497 1.99C.154 11.442 6.06 24 10.228 24c1.928 0 5.178-3.168 7.852-7.46M16.134 0c3.855 0 7.713.622 7.713 2.798 0 4.415-2.8 9.765-4.23 9.765-2.549 0-5.72-7.09-5.72-10.635C13.897.31 14.518 0 16.134 0" />
</svg>
),
officialUrl: 'https://docs.typo3.org',
seoDescription:
'Add Pulse analytics to your TYPO3 CMS site. TypoScript and Fluid template integration.',
relatedIds: ['wordpress', 'drupal', 'joomla'],
},
{
id: 'kirby',
name: 'Kirby',
description: 'Add Pulse to your Kirby site via PHP snippets.',
category: 'cms',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M16.571 12l-2.857 1.48v.234h2.857V16H7.43v-2.286h2.857v-.25L7.429 12V9.143L12 11.598l4.571-2.455M12 0l10.286 5.999V18L12 24 1.714 18.001V6zM2.857 6.682v10.636L12 22.651l9.143-5.333V6.682L12 1.349Z" />
</svg>
),
officialUrl: 'https://getkirby.com/docs',
seoDescription:
'Add Pulse analytics to your Kirby CMS site. Simple PHP snippet integration.',
relatedIds: ['craftcms', 'statamic', 'grav'],
},
{
id: 'grav',
name: 'Grav',
description: 'Add Pulse to your Grav site via Twig templates.',
category: 'cms',
brandColor: '#221E1F',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm6.489 13.965c-1.251-.825-1.965-1.523-2.589-2.777-.427.859-1.421 2.135-3.098 3.139-.84 2.61-4.823 7.605-6.113 6.885-.381-.195-.452-.48-.367-.765.093-.704 1.566-2.34 1.566-2.34s.029.345.494 1.065c-.629-1.936 1.021-4.305 1.456-5.131.689-.209.734-1.095.734-1.095.046-1.364-.569-2.34-1.155-2.94.421.525.556 1.306.57 2.025v.255c-.029.601-.21 1.41-.585 1.41v.016c-.39-.016-.885.074-1.319.21l-.961.239s.51-.015.78.226c-.314.51-1.005 1.125-1.771 1.484-1.109.525-1.439-.51-.869-1.17.135-.165.285-.3.404-.404-.09-.09-.135-.21-.149-.36-.075-.345-.045-.78.45-1.485.09-.149.21-.3.345-.449l.015-.016.016-.015v-.015c.029-.046.074-.076.104-.12.57-.585 1.485-1.2 2.911-1.74 1.694-2.49 2.309-2.956 2.309-2.956.181-.179.511-.419.615-.479-.87-1.515-1.049-3.646-.824-4.215-.03.03-.046.06-.061.105.09-.195.135-.255.225-.36.24-.27 1.035-.42 1.336.18.15.315.18.735.18 1.035-.645-.029-1.215.69-1.215.69s.524-.24 1.186-.255c0 0 .179.164.389.449-.284.556-.779 1.725-.42 2.971.061.24.15.45.256.629.015.016.015.016.015.031l.03.029c.585.886 1.649.976 1.649.976-.495-.24-.915-.646-1.169-1.125-.136-.255-.227-.48-.271-.646-.285-1.08.135-1.725.375-2.145.54-.84 1.544-1.351 2.609-1.23 1.5.165 2.581 1.53 2.399 3.03-.104.915-.659 1.681-1.409 2.085.181.494-.015 1.08-.015 1.08.449.57.479.9.465 1.215-.585-.09-1.141.301-1.141.301s1.111-.256 1.756.314c.42.449.704.87.869 1.17.24.435 1.35.465 1.229 1.23-.135.779-.989.779-2.31-.09l.074-.151zm-4.824-4.61c-.22-.219-.574-.219-.795 0l-.465.468c-.222.21-.222.57 0 .796l.51.51c.222.225.577.21.795 0l.47-.466c.221-.225.221-.585 0-.794l-.515-.525v.011zm-2.205-.186c-.14.14-.14.368 0 .511.141.138.368.138.51 0 .14-.143.14-.371 0-.511-.142-.141-.369-.141-.51 0zm1.269-.252c.142-.139.142-.366 0-.51-.141-.138-.367-.138-.51 0-.139.144-.139.371 0 .51.142.142.369.142.51 0zm5.385-1.304c.591-1.131-.247-1.791-.825-2.332-.924-.87-1.846-1.245-2.9-.029-1.052 1.199-.383 2.609.58 3.284.96.69 2.535.226 3.135-.915l.01-.008zm-1.595-.463c-.372-.445.322-1.252.757-.77.8.89-.387 1.216-.757.77z" />
</svg>
),
officialUrl: 'https://learn.getgrav.org',
seoDescription:
'Add Pulse analytics to your Grav flat-file CMS. Twig template integration.',
relatedIds: ['kirby', 'craftcms', 'hugo'],
},
{
id: 'umbraco',
name: 'Umbraco',
description: 'Add Pulse to your Umbraco site via Razor views.',
category: 'cms',
brandColor: '#3544B1',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#3544B1' }}>
<path d="M0 11.982A12 12 0 1 1 12 24 12 12 0 0 1 0 11.982zm11.756 4.11a11.856 11.856 0 0 1-2.773-.25 2.12 2.12 0 0 1-1.514-1.218q-.41-.943-.396-2.895a18.419 18.419 0 0 1 .127-2.04q.118-.988.236-1.629l.082-.425a.201.201 0 0 0 0-.038.244.244 0 0 0-.201-.236l-1.544-.246H5.74a.243.243 0 0 0-.235.189 6.517 6.517 0 0 0-.089.409c-.088.455-.17.9-.26 1.548a19.99 19.99 0 0 0-.176 2.12 11.165 11.165 0 0 0 0 1.486q.05 1.977.675 3.155.626 1.179 2.106 1.695 1.482.517 4.135.506h.22q2.655.01 4.134-.506 1.478-.518 2.1-1.695.623-1.178.678-3.147a11.165 11.165 0 0 0 0-1.485 19.99 19.99 0 0 0-.176-2.121 30.014 30.014 0 0 0-.26-1.548 6.724 6.724 0 0 0-.088-.41.243.243 0 0 0-.236-.188h-.04l-1.548.242a.236.236 0 0 0-.203.236.201.201 0 0 0 0 .037l.081.426q.118.643.236 1.63a18.709 18.709 0 0 1 .126 2.039q.019 1.95-.396 2.892a2.12 2.12 0 0 1-1.502 1.22 11.82 11.82 0 0 1-2.769.247Z" />
</svg>
),
officialUrl: 'https://docs.umbraco.com',
seoDescription:
'Add Pulse analytics to your Umbraco CMS site. Razor view integration for .NET.',
relatedIds: ['wordpress', 'drupal', 'typo3'],
},
{
id: 'storyblok',
name: 'Storyblok',
description: 'Add Pulse to the frontend of your Storyblok-powered site.',
category: 'cms',
brandColor: '#09B3AF',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#09B3AF' }}>
<path d="M13.953 11.462H9.088v2.34h4.748c.281 0 .538-.118.749-.305.187-.187.304-.468.304-.819a1.404 1.404 0 0 0-.257-.842c-.188-.234-.398-.374-.679-.374zm.164-2.83c.21-.14.304-.445.304-.843 0-.35-.094-.608-.257-.771a.935.935 0 0 0-.608-.234H9.088v2.105h4.374c.234 0 .468-.117.655-.257zM21.251 0H2.89c-.585 0-1.053.468-1.053 1.03v18.385c0 .562.468.912 1.03.912H5.58V24l3.368-3.65h12.304c.562 0 .913-.35.913-.935V1.053c0-.562-.351-1.03-.936-1.03zm-3.087 14.9a2.827 2.827 0 0 1-1.006 1.03c-.445.28-.936.538-1.497.655-.562.14-1.17.257-1.801.257H5.579v-13.1h9.403c.468 0 .866.094 1.24.305.351.187.679.444.936.748.524.64.806 1.443.795 2.27 0 .608-.164 1.192-.468 1.754a2.924 2.924 0 0 1-1.403 1.263c.748.21 1.333.585 1.778 1.123.42.561.631 1.286.631 2.199 0 .584-.117 1.076-.35 1.497z" />
</svg>
),
officialUrl: 'https://www.storyblok.com/docs',
seoDescription:
'Add Pulse analytics to your Storyblok-powered frontend application.',
relatedIds: ['contentful', 'prismic', 'nextjs'],
},
{
id: 'prismic',
name: 'Prismic',
description: 'Add Pulse to the frontend of your Prismic-powered site.',
category: 'cms',
brandColor: '#5163BA',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#5163BA' }}>
<path d="M7.7 0C5.033 0 4.066.278 3.09.8A5.447 5.447 0 0 0 .825 3.07c-.522.977-.8 1.947-.8 4.622v.998c0 .199.078.388.218.529l1.77 1.774a.15.15 0 0 0 .257-.106V8.019c0-2.006.208-2.733.6-3.467A4.088 4.088 0 0 1 4.568 2.85c.731-.392 1.457-.6 3.459-.6h2.164c.199 0 .39-.08.53-.221l1.77-1.772A.15.15 0 0 0 12.387 0zm7.605 0c-.2 0-.392.08-.532.22l-1.769 1.775a.147.147 0 0 0-.044.104c0 .083.068.15.15.15h2.862c2.002 0 2.728.21 3.46.601a4.089 4.089 0 0 1 1.698 1.702c.39.734.599 1.461.599 3.467v2.17c0 .198.078.39.218.53l1.77 1.774a.15.15 0 0 0 .257-.106V7.692c0-2.675-.278-3.645-.8-4.623A5.446 5.446 0 0 0 20.91.801C19.935.278 18.968 0 16.3 0zM6.761 3.75a2.995 2.995 0 0 0-2.993 2.999v5.691a.75.75 0 0 0 .219.529l1.77 1.776a.149.149 0 0 0 .255-.106v-7.14a1.5 1.5 0 0 1 .097-.53c.072-.2.188-.385.348-.545l2.308-2.421a.15.15 0 0 0-.11-.253zm4.802 0c-.2 0-.39.08-.53.22L9.26 5.744A.151.151 0 0 0 9.366 6h7.124c.186 0 .364.034.528.097.2.072.386.188.546.347l2.413 2.313a.15.15 0 0 0 .255-.108v-1.9a2.995 2.995 0 0 0-2.993-3zm6.573 5.463a.15.15 0 0 0-.15.15v7.139a1.5 1.5 0 0 1-.095.53 1.49 1.49 0 0 1-.348.546l-2.308 2.42a.15.15 0 0 0 .108.255h1.896a2.997 2.997 0 0 0 2.993-3.002v-5.69a.752.752 0 0 0-.219-.53l-1.77-1.774a.15.15 0 0 0-.107-.044zm-17.96 2.25a.15.15 0 0 0-.15.15v4.695c0 2.674.278 3.645.8 4.623a5.442 5.442 0 0 0 2.263 2.267c.976.522 1.943.802 4.612.802h.994c.2 0 .39-.08.53-.22l1.771-1.775a.149.149 0 0 0-.106-.255H8.027c-2.002 0-2.728-.208-3.46-.6a4.088 4.088 0 0 1-1.698-1.702c-.39-.734-.599-1.461-.599-3.467v-2.172a.749.749 0 0 0-.22-.528L.282 11.507a.15.15 0 0 0-.106-.044zm21.703 1.5a.15.15 0 0 0-.15.15v2.868c0 2.006-.208 2.733-.6 3.467a4.088 4.088 0 0 1-1.698 1.702c-.731.392-1.457.6-3.459.6h-2.164a.749.749 0 0 0-.532.22l-1.769 1.773a.151.151 0 0 0-.043.107c0 .083.065.15.148.15H16.3c2.67 0 3.636-.28 4.612-.802a5.442 5.442 0 0 0 2.263-2.267c.522-.978.8-1.948.8-4.623v-.998a.749.749 0 0 0-.22-.529l-1.769-1.774a.15.15 0 0 0-.106-.044zm-17.96 2.238a.15.15 0 0 0-.151.15v1.898a2.997 2.997 0 0 0 2.993 3.001h5.676c.2 0 .39-.08.53-.22l1.773-1.775a.146.146 0 0 0 .044-.104.15.15 0 0 0-.15-.15H7.51a1.48 1.48 0 0 1-.53-.098 1.49 1.49 0 0 1-.546-.347l-2.413-2.313a.147.147 0 0 0-.103-.042z" />
</svg>
),
officialUrl: 'https://prismic.io/docs',
seoDescription:
'Add Pulse analytics to your Prismic-powered frontend application.',
relatedIds: ['contentful', 'storyblok', 'nextjs'],
},
// * ─── eCommerce (continued) ───────────────────────────────────────────────
{
id: 'shopware',
name: 'Shopware',
description: 'Add Pulse analytics to your Shopware 6 store.',
category: 'ecommerce',
brandColor: '#189EFF',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#189EFF' }}>
<path d="M23.9477 10.8913a.1735.1735 0 00-.061-.1178c-2.5032-2.078-4.5288-2.9261-6.9905-2.9261-1.3127 0-2.32.2638-2.9916.7827-.5822.4492-.8896 1.0772-.8896 1.812 0 2.0605 2.5184 3.0003 5.4358 4.0883 1.5023.5604 3.057 1.1404 4.483 1.9319a.1626.1626 0 00.0828.0218.187.187 0 00.0589-.011c.0458-.0174.085-.0523.1025-.1002.545-1.3955.822-2.8673.822-4.374a13.082 13.082 0 00-.0523-1.1076zm-4.81 10.4791c-1.0423-.785-2.5795-1.3824-4.2061-2.0125-1.9362-.7501-4.132-1.6027-5.7803-2.913-1.8665-1.4871-2.7757-3.3623-2.7757-5.7324 0-2.1281.883-3.9466 2.5533-5.2614 1.873-1.474 4.7119-2.2546 8.2071-2.2546.966 0 1.8883.0589 2.743.1766a.1696.1696 0 00.1788-.098.17.17 0 00-.0414-.2007C17.814 1.0924 14.9664.0022 12.001.0022c-3.2052 0-6.2186 1.2472-8.4862 3.5148C1.2494 5.7825 0 8.796 0 11.999c0 3.2051 1.2472 6.2185 3.5149 8.484 2.2654 2.2654 5.2788 3.5148 8.4862 3.5148 2.5903 0 5.0564-.8133 7.1344-2.3505a.1714.1714 0 00.0697-.1374.1735.1735 0 00-.0676-.1395Z" />
</svg>
),
officialUrl: 'https://developer.shopware.com/docs',
seoDescription:
'Add Pulse analytics to your Shopware 6 store via theme template.',
relatedIds: ['shopify', 'woocommerce', 'magento'],
},
{
id: 'magento',
name: 'Magento',
description: 'Add Pulse analytics to your Magento / Adobe Commerce store.',
category: 'ecommerce',
brandColor: '#F46F25',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#F46F25' }}>
<path d="M12 0L2 5.5v13L5 20.25V7.25L12 3.5l7 3.75V20.25l3-1.75v-13L12 0zm0 8L7 10.75v6.5L10 19V12.25l2-1.125 2 1.125V19l3-1.75v-6.5L12 8z" />
</svg>
),
officialUrl: 'https://developer.adobe.com/commerce',
seoDescription:
'Add Pulse analytics to your Magento or Adobe Commerce store via layout XML.',
relatedIds: ['shopify', 'woocommerce', 'shopware'],
},
// * ─── Platforms & Tools (continued) ───────────────────────────────────────
{
id: 'bubble',
name: 'Bubble',
description: 'Add Pulse to your Bubble no-code application.',
category: 'platform',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 14a4 4 0 1 1 0-8 4 4 0 0 1 0 8z" />
</svg>
),
officialUrl: 'https://manual.bubble.io',
seoDescription:
'Add Pulse analytics to your Bubble no-code app via the SEO/Meta tags section.',
relatedIds: ['webflow', 'framer', 'wix'],
},
{
id: 'discourse',
name: 'Discourse',
description: 'Add Pulse to your Discourse community forum.',
category: 'platform',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563c-2.593-.003-4.996 1.352-6.337 3.57-1.33 2.208-1.387 4.957-.148 7.22L4.4 19.61l4.794-1.074c2.745 1.225 5.965.676 8.136-1.39 2.17-2.054 2.86-5.228 1.737-7.997-1.135-2.778-3.84-4.59-6.84-4.585h-.008z" />
</svg>
),
officialUrl: 'https://meta.discourse.org/docs',
seoDescription:
'Add Pulse analytics to your Discourse forum via admin customization.',
relatedIds: ['wordpress', 'ghost'],
},
{
id: 'hubspot',
name: 'HubSpot',
description: 'Add Pulse to your HubSpot-hosted pages.',
category: 'platform',
brandColor: '#FF7A59',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#FF7A59' }}>
<path d="M18.164 7.93V5.084a2.198 2.198 0 001.267-1.978v-.067A2.2 2.2 0 0017.238.845h-.067a2.2 2.2 0 00-2.193 2.193v.067a2.196 2.196 0 001.252 1.973l.013.006v2.852a6.22 6.22 0 00-2.969 1.31l.012-.01-7.828-6.095A2.497 2.497 0 104.3 4.656l-.012.006 7.697 5.991a6.176 6.176 0 00-1.038 3.446c0 1.343.425 2.588 1.147 3.607l-.013-.02-2.342 2.343a1.968 1.968 0 00-.58-.095h-.002a2.033 2.033 0 102.033 2.033 1.978 1.978 0 00-.1-.595l.005.014 2.317-2.317a6.247 6.247 0 104.782-11.134l-.036-.005zm-.964 9.378a3.206 3.206 0 113.215-3.207v.002a3.206 3.206 0 01-3.207 3.207z" />
</svg>
),
officialUrl: 'https://knowledge.hubspot.com',
seoDescription:
'Add Pulse analytics to HubSpot landing pages and website via Settings.',
relatedIds: ['wordpress', 'webflow'],
},
{
id: 'substack',
name: 'Substack',
description: 'Add Pulse to your Substack publication with a custom domain.',
category: 'platform',
brandColor: '#FF6719',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#FF6719' }}>
<path d="M22.539 8.242H1.46V5.406h21.08v2.836zM1.46 10.812V24L12 18.11 22.54 24V10.812H1.46zM22.54 0H1.46v2.836h21.08V0z" />
</svg>
),
officialUrl: 'https://substack.com',
seoDescription:
'Add Pulse analytics to your Substack publication using custom domain settings.',
relatedIds: ['ghost', 'blogger', 'wordpress'],
},
{
id: 'linktree',
name: 'Linktree',
description: 'Add Pulse to your Linktree page via custom code.',
category: 'platform',
brandColor: '#43E55E',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#43E55E' }}>
<path d="m13.73635 5.85251 4.00467-4.11665 2.3248 2.3808-4.20064 4.00466h5.9085v3.30473h-5.9365l4.22865 4.10766-2.3248 2.3338L12.0005 12.099l-5.74052 5.76852-2.3248-2.3248 4.22864-4.10766h-5.9375V8.12132h5.9085L3.93417 4.11666l2.3248-2.3808 4.00468 4.11665V0h3.4727zm-3.4727 10.30614h3.4727V24h-3.4727z" />
</svg>
),
officialUrl: 'https://linktr.ee',
seoDescription:
'Add Pulse analytics to your Linktree link-in-bio page.',
relatedIds: ['carrd', 'framer', 'webflow'],
},
{
id: 'weebly',
name: 'Weebly',
description: 'Add Pulse to your Weebly site via header code.',
category: 'platform',
brandColor: '#2C5CC5',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#2C5CC5' }}>
<path d="M2 7l4 10 4-7 4 7 4-10h3L15 21h-2l-4-7-4 7H3L.5 7z" />
</svg>
),
officialUrl: 'https://www.weebly.com',
seoDescription:
'Add Pulse analytics to your Weebly website via the header code settings.',
relatedIds: ['squarespace', 'wix', 'webflow'],
},
// * ─── Static Sites & Documentation (continued) ───────────────────────────
{
id: 'gitbook',
name: 'GitBook',
description: 'Add Pulse to your GitBook documentation site.',
category: 'ssg',
brandColor: '#BBDDE5',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#BBDDE5' }}>
<path d="M12.513 1.097c-.645 0-1.233.34-2.407 1.017L3.675 5.82A7.233 7.233 0 0 0 0 12.063v.236a7.233 7.233 0 0 0 3.667 6.238L7.69 20.86c2.354 1.36 3.531 2.042 4.824 2.042 1.292.001 2.47-.678 4.825-2.038l4.251-2.453c1.177-.68 1.764-1.02 2.087-1.579.323-.56.324-1.24.323-2.6v-2.63a1.04 1.04 0 0 0-1.558-.903l-8.728 5.024c-.587.337-.88.507-1.201.507-.323 0-.616-.168-1.204-.506l-5.904-3.393c-.297-.171-.446-.256-.565-.271a.603.603 0 0 0-.634.368c-.045.111-.045.282-.043.625.002.252 0 .378.025.494.053.259.189.493.387.667.089.077.198.14.416.266l6.315 3.65c.589.34.884.51 1.207.51.324 0 .617-.17 1.206-.509l7.74-4.469c.202-.116.302-.172.377-.13.075.044.075.16.075.392v1.193c0 .34.001.51-.08.649-.08.14-.227.224-.522.394l-6.382 3.685c-1.178.68-1.767 1.02-2.413 1.02-.646 0-1.236-.34-2.412-1.022l-5.97-3.452-.043-.025a4.106 4.106 0 0 1-2.031-3.52V11.7c0-.801.427-1.541 1.12-1.944a1.979 1.979 0 0 1 1.982-.001l4.946 2.858c1.174.679 1.762 1.019 2.407 1.02.645 0 1.233-.34 2.41-1.017l7.482-4.306a1.091 1.091 0 0 0 0-1.891L14.92 2.11c-1.175-.675-1.762-1.013-2.406-1.013Z" />
</svg>
),
officialUrl: 'https://docs.gitbook.com',
seoDescription:
'Add Pulse analytics to your GitBook-hosted documentation.',
relatedIds: ['docusaurus', 'readme', 'readthedocs'],
},
{
id: 'gridsome',
name: 'Gridsome',
description: 'Add Pulse to your Gridsome static site.',
category: 'ssg',
brandColor: '#00A672',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#00A672' }}>
<path d="M12.026.017l-.108.001C4.905.135-.102 5.975.002 11.956.025 19.286 6.02 24.13 12.083 23.98c7.208-.2 12.323-6.461 11.892-12.05a2.197 2.197 0 0 0-2.192-2.001h-3.15a2.155 2.155 0 0 0-2.161 2.147c0 1.187.967 2.148 2.16 2.148h.788c-.87 2.791-3.62 5.455-7.44 5.56-3.803.095-7.61-2.904-7.768-7.569a2.173 2.173 0 0 0 0-.159c-.148-3.72 2.895-7.637 7.88-7.845a2.096 2.096 0 0 0 2.003-2.183 2.095 2.095 0 0 0-2.07-2.011zm-.018 9.911a2.15 2.15 0 0 0-2.146 2.151 2.15 2.15 0 0 0 2.146 2.152 2.15 2.15 0 0 0 2.147-2.152 2.15 2.15 0 0 0-2.147-2.15Z" />
</svg>
),
officialUrl: 'https://gridsome.org/docs',
seoDescription:
'Add Pulse analytics to your Gridsome Vue-based static site.',
relatedIds: ['gatsby', 'vue', 'nuxt'],
},
{
id: 'readthedocs',
name: 'Read the Docs',
description: 'Add Pulse to your Read the Docs documentation.',
category: 'ssg',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M10.806 11.568a.573.573 0 0 0-.076 1.123s1.403.464 3.788.658c1.917.157 4.09-.135 4.09-.135.841-.028.678-1.318-.143-1.136 0 0-2.127.262-3.854.123-2.28-.186-3.52-.604-3.52-.604a.65.65 0 0 0-.285-.03m0-2.854a.573.573 0 0 0-.076 1.123s1.403.464 3.788.658c1.917.157 4.09-.135 4.09-.135.841-.028.678-1.318-.143-1.136 0 0-2.127.263-3.854.123-2.28-.186-3.52-.604-3.52-.604a.65.65 0 0 0-.285-.03m0-2.854a.573.573 0 0 0-.076 1.123s1.403.464 3.788.66c1.917.155 4.09-.137 4.09-.137.841-.028.678-1.318-.143-1.136 0 0-2.127.263-3.854.123-2.28-.186-3.52-.603-3.52-.603a.65.65 0 0 0-.285-.03m0-2.85a.573.573 0 0 0-.076 1.123s1.403.465 3.788.66c1.917.155 4.09-.136 4.09-.136.841-.028.678-1.318-.143-1.136 0 0-2.127.262-3.854.122-2.28-.185-3.52-.603-3.52-.603a.6.6 0 0 0-.285-.03M6.81 0C3.812.021 2.693.941 2.693.941v22.39s1.09-.943 4.602-.799 4.234 1.378 8.55 1.46q.366.008.702.008c3.732 0 4.699-.668 4.699-.668l.06-22.825s-1.941.548-5.72.578S10.9.122 7.43.008A34 34 0 0 0 6.81 0m2.508 1.46s1.815.6 5.173.77c2.837.138 5.678-.28 5.678-.28v20.286s-1.44.756-5.036.5c-2.787-.2-5.857-1.255-5.857-1.255Zm-1.752.528c.718.052.718 1.105 0 1.157 0 0-.942.004-1.51.064-.964.097-1.618.447-1.618.447-.677.346-1.207-.658-.54-1.022 0 0 .852-.45 2.043-.57.688-.07 1.625-.076 1.625-.076m-.557 2.863c.32-.008.56 0 .56 0a.58.58 0 0 1 .001 1.152s-.94.004-1.51.064c-.964.097-1.618.447-1.618.447-.662.294-1.155-.65-.536-1.026 0 0 .852-.45 2.043-.57.334-.038.74-.059 1.06-.067m.557 2.85c.71.06.71 1.097 0 1.156 0 0-.942-.004-1.51.051-.964.097-1.618.448-1.618.448-.665.3-1.162-.65-.537-1.026 0 0 .853-.452 2.044-.57.684-.064 1.62-.06 1.62-.06" />
</svg>
),
officialUrl: 'https://docs.readthedocs.io',
seoDescription:
'Add Pulse analytics to your Read the Docs documentation site.',
relatedIds: ['sphinx', 'mkdocs', 'docusaurus'],
},
{
id: 'sphinx',
name: 'Sphinx',
description: 'Add Pulse to your Sphinx documentation via conf.py.',
category: 'ssg',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M16.284 19.861c0-.654.177-1.834.393-2.623.499-1.822.774-4.079.497-4.079-.116 0-.959.762-1.873 1.694-3.472 3.54-7.197 5.543-10.312 5.543-1.778 0-2.987-.45-4.154-1.545C.128 18.186 0 17.858 0 16.703c0-1.188.117-1.468.909-2.175.718-.642 1.171-.813 2.157-.813.76.171 1.21.16 1.457.461.251.296.338 1.265.035 1.832-.162.303-.585.491-1.105.491-.49 0-.77-.116-.669-.278.315-.511-.135-.857-.713-.548-.699.374-.711 1.698-.021 2.322.969.878 3.65 1.208 5.262.648 1.743-.605 4.022-2.061 5.841-3.732l1.6-1.469-2.088-.013c-2.186-.012-3.608-.273-8.211-1.506-1.531-.41-3.003-.765-3.271-.789-.304-.026-.503-.274-.487-.656.027-.646.378-1.127.793-1.308.249-.109 1.977-.274 3.809-.761 7.136-1.898 7.569-1.629 12.323-.426 1.553.393 3.351.821 4.147.835 1.227.022 1.493.124 1.74.666.16.351.291.686.291.745 0 .058-.695.424-1.545.813-3.12 1.428-4.104 2.185-3.088 3.635.421.602.412.666-.14 1.052-.323.227-.59.687-.593 1.022-.009.908-.583 2.856-1.417 3.624l-.732.675v-1.189Zm1.594-8.328c1.242-.346 1.994-.738 3.539-1.562-1.272-.372-4.462-.895-4.462-.895-2.354-.472-2.108-.448-2.214.071a3.475 3.475 0 0 1-.45 1.105c-.541.848-2.521 1.026-3.656.483-.356-.171-.714-.821-.709-1.283.007-.65-.362-.801-.598-.714-.191.07-.813.079-2.179.448-4.514 1.217-5.132 1.078-2.189 1.495.353.05 2.223.572 3.136.815 2.239.597 2.658.641 5.556.581 2.015-.042 2.858-.163 4.226-.544ZM.732 6.258c.056-.577.088-.702 1.692-1.025.919-.185 3.185-.785 5.036-1.333 4.254-1.26 5.462-1.263 9.873-.026 1.904.535 4.037.973 4.74.975 1.097.002 1.668.487 1.668.487.505 1.16.412 1.24-1.558 1.24-1.374 0-2.558-.232-4.385-.857-1.389-.476-3.369-.923-4.451-1.004-1.974-.149-1.971-.15-8.072 1.529-1.072.295-2.553.624-3.29.732l-1.342.196.089-.914Z" />
</svg>
),
officialUrl: 'https://www.sphinx-doc.org',
seoDescription:
'Add Pulse analytics to your Sphinx-generated documentation.',
relatedIds: ['readthedocs', 'mkdocs', 'docusaurus'],
},
{
id: 'readme',
name: 'ReadMe',
description: 'Add Pulse to your ReadMe API documentation.',
category: 'ssg',
brandColor: '#018EF5',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#018EF5' }}>
<path d="M22.0113 3.269h-5.8219a4.2894 4.2894 0 0 0-4.1854 3.3452A4.2894 4.2894 0 0 0 7.8186 3.269h-5.818A2.0007 2.0007 0 0 0 0 5.2697v10.2434a2.0007 2.0007 0 0 0 2.0007 2.0007h3.7372c4.2574 0 5.5299 1.0244 6.138 3.133a.112.112 0 0 0 .1121.084h.024a.112.112 0 0 0 .112-.084c.6122-2.1086 1.8847-3.133 6.138-3.133h3.7373A2.0007 2.0007 0 0 0 24 15.5131V5.2697a2.0007 2.0007 0 0 0-1.9887-2.0006Zm-11.928 11.0557a.144.144 0 0 1-.144.144H3.2571a.144.144 0 0 1-.144-.144v-.9523a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144zm0-2.5368a.144.144 0 0 1-.144.144H3.2571a.144.144 0 0 1-.144-.144v-.9523a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144zm0-2.5368a.144.144 0 0 1-.144.144H3.2571a.144.144 0 0 1-.144-.144v-.9524a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144zm10.8037 5.0696a.144.144 0 0 1-.144.144h-6.6823a.144.144 0 0 1-.144-.144v-.9523a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144zm0-2.5368a.144.144 0 0 1-.144.144h-6.6823a.144.144 0 0 1-.144-.144v-.9523a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144zm0-2.5368a.144.144 0 0 1-.144.144h-6.6823a.144.144 0 0 1-.144-.144v-.9484a.144.144 0 0 1 .144-.144h6.6822a.144.144 0 0 1 .144.144v.9524z" />
</svg>
),
officialUrl: 'https://docs.readme.com',
seoDescription:
'Add Pulse analytics to your ReadMe API documentation portal.',
relatedIds: ['gitbook', 'docusaurus', 'readthedocs'],
},
// * ─── JavaScript Frameworks (continued) ───────────────────────────────────
{
id: 'flutter',
name: 'Flutter',
description: 'Add Pulse to your Flutter web application.',
category: 'framework',
brandColor: '#02569B',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#02569B' }}>
<path d="M14.314 0L2.3 12 6 15.7 21.684.013h-7.357zm.014 11.072L7.857 17.53l6.47 6.47H21.7l-6.46-6.468 6.46-6.46h-7.37z" />
</svg>
),
officialUrl: 'https://docs.flutter.dev',
seoDescription:
'Add Pulse analytics to your Flutter web app via web/index.html.',
relatedIds: ['react', 'angular', 'preact'],
},
// * ─── Hosting & Deployment (continued) ────────────────────────────────────
{
id: 'render',
name: 'Render',
description: 'Deploy with Pulse analytics on Render.',
category: 'hosting',
brandColor: '#000000',
invertInDark: true,
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8 fill-current dark:invert">
<path d="M18.263.007c-3.121-.147-5.744 2.109-6.192 5.082-.018.138-.045.272-.067.405-.696 3.703-3.936 6.507-7.827 6.507-1.388 0-2.691-.356-3.825-.979a.2024.2024 0 0 0-.302.178V24H12v-8.999c0-1.656 1.338-3 2.987-3h2.988c3.382 0 6.103-2.817 5.97-6.244-.12-3.084-2.61-5.603-5.682-5.75" />
</svg>
),
officialUrl: 'https://docs.render.com',
seoDescription:
'Add Pulse analytics to sites deployed on Render. Works with any framework.',
relatedIds: ['netlify', 'vercel', 'cloudflare-pages'],
},
{
id: 'firebase',
name: 'Firebase Hosting',
description: 'Deploy with Pulse analytics on Firebase Hosting.',
category: 'hosting',
brandColor: '#DD2C00',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#DD2C00' }}>
<path d="M19.455 8.369c-.538-.748-1.778-2.285-3.681-4.569-.826-.991-1.535-1.832-1.884-2.245a146 146 0 0 0-.488-.576l-.207-.245-.113-.133-.022-.032-.01-.005L12.57 0l-.609.488c-1.555 1.246-2.828 2.851-3.681 4.64-.523 1.064-.864 2.105-1.043 3.176-.047.241-.088.489-.121.738-.209-.017-.421-.028-.632-.033-.018-.001-.035-.002-.059-.003a7.46 7.46 0 0 0-2.28.274l-.317.089-.163.286c-.765 1.342-1.198 2.869-1.252 4.416-.07 2.01.477 3.954 1.583 5.625 1.082 1.633 2.61 2.882 4.42 3.611l.236.095.071.025.003-.001a9.59 9.59 0 0 0 2.941.568q.171.006.342.006c1.273 0 2.513-.249 3.69-.742l.008.004.313-.145a9.63 9.63 0 0 0 3.927-3.335c1.01-1.49 1.577-3.234 1.641-5.042.075-2.161-.643-4.304-2.133-6.371m-7.083 6.695c.328 1.244.264 2.44-.191 3.558-1.135-1.12-1.967-2.352-2.475-3.665-.543-1.404-.87-2.74-.974-3.975.48.157.922.366 1.315.622 1.132.737 1.914 1.902 2.325 3.461zm.207 6.022c.482.368.99.712 1.513 1.028-.771.21-1.565.302-2.369.273a8 8 0 0 1-.373-.022c.458-.394.869-.823 1.228-1.279zm1.347-6.431c-.516-1.957-1.527-3.437-3.002-4.398-.647-.421-1.385-.741-2.194-.95.011-.134.026-.268.043-.4.014-.113.03-.216.046-.313.133-.689.332-1.37.589-2.025.099-.25.206-.499.321-.74l.004-.008c.177-.358.376-.719.61-1.105l.092-.152-.003-.001c.544-.851 1.197-1.627 1.942-2.311l.288.341c.672.796 1.304 1.548 1.878 2.237 1.291 1.549 2.966 3.583 3.612 4.48 1.277 1.771 1.893 3.579 1.83 5.375-.049 1.395-.461 2.755-1.195 3.933-.694 1.116-1.661 2.05-2.8 2.708-.636-.318-1.559-.839-2.539-1.599.79-1.575.952-3.28.479-5.072zm-2.575 5.397c-.725.939-1.587 1.55-2.09 1.856-.081-.029-.163-.06-.243-.093l-.065-.026c-1.49-.616-2.747-1.656-3.635-3.01-.907-1.384-1.356-2.993-1.298-4.653.041-1.19.338-2.327.882-3.379.316-.07.638-.114.96-.131l.084-.002c.162-.003.324-.003.478 0 .227.011.454.035.677.07.073 1.513.445 3.145 1.105 4.852.637 1.644 1.694 3.162 3.144 4.515z" />
</svg>
),
officialUrl: 'https://firebase.google.com/docs/hosting',
seoDescription:
'Add Pulse analytics to sites deployed on Firebase Hosting.',
relatedIds: ['netlify', 'vercel', 'render'],
},
// * ─── Platforms & Tools (continued) ───────────────────────────────────────
{
id: 'amp',
name: 'Google AMP',
description: 'Add Pulse to your AMP (Accelerated Mobile Pages) site.',
category: 'platform',
brandColor: '#005AF0',
icon: (
<svg role="img" viewBox="0 0 24 24" className="w-8 h-8" style={{ fill: '#005AF0' }}>
<path d="M12 0c6.628 0 12 5.373 12 12s-5.372 12-12 12C5.373 24 0 18.627 0 12S5.373 0 12 0zm-.92 19.278l5.034-8.377a.444.444 0 00.097-.268.455.455 0 00-.455-.455l-2.851.004.924-5.468-.927-.003-5.018 8.367s-.1.183-.1.291c0 .251.204.455.455.455l2.831-.004-.901 5.458z" />
</svg>
),
officialUrl: 'https://amp.dev/documentation',
seoDescription:
'Add Pulse analytics to Google AMP pages using amp-analytics.',
relatedIds: ['gtm', 'wordpress', 'webflow'],
},
] ]
// * ─── Helpers ──────────────────────────────────────────────────────────────── // * ─── Helpers ────────────────────────────────────────────────────────────────