chore: add UTM parameters to all owned outbound links#4544
chore: add UTM parameters to all owned outbound links#4544devin-ai-integration[bot] wants to merge 3 commits intomainfrom
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
✅ Deploy Preview for hyprnote-storybook canceled.
|
✅ Deploy Preview for hyprnote canceled.
|
There was a problem hiding this comment.
🚩 Onboarding assets still reference old hyprnote.com domain
Both crates/db-user/assets/onboarding-raw.html and crates/db-user/assets/thank-you.md link to hyprnote.com and docs.hyprnote.com rather than the current char.com domain. The PR added UTM parameters to these old-domain links but didn't update the domains themselves. If these files are still served to any users (even via the importer), visitors would land on the old domain. Whether UTM parameters survive a domain redirect depends on server configuration — they may be silently dropped, making the tracking ineffective. This is separate from the read-only rule violation; even if the files were editable, the UTMs on the wrong domain would be a concern.
Was this helpful? React with 👍 or 👎 to provide feedback.
| href="https://hyprnote.com/discord?utm_source=app&utm_medium=onboarding&utm_campaign=organic">https://hyprnote.com/discord</a></p> | ||
| </li> | ||
| <li> | ||
| <p>Official Docs: <a target="_blank" rel="noopener noreferrer nofollow" | ||
| href="https://docs.hyprnote.com">https://docs.hyprnote.com</a></p> | ||
| href="https://docs.hyprnote.com?utm_source=app&utm_medium=onboarding&utm_campaign=organic">https://docs.hyprnote.com</a></p> |
There was a problem hiding this comment.
🔴 Modification of READ-ONLY crates/db-user asset (onboarding-raw.html)
crates/db-user/AGENTS.md explicitly states: "crates/db-user is legacy and READ-ONLY." This PR modifies crates/db-user/assets/onboarding-raw.html to add UTM parameters, violating the mandatory read-only rule. Additionally, the UTMs are applied to hyprnote.com links (the old domain), not char.com links as specified by the UTM convention documented in apps/web/content/docs/developers/12.analytics.mdx:129 ("All owned outbound links that drive traffic to char.com carry UTM parameters"), making these UTMs ineffective for the stated tracking purpose.
Prompt for agents
The crates/db-user/AGENTS.md rule states this crate is legacy and READ-ONLY. These changes should be reverted. If UTM tracking is needed for onboarding links, the links should be updated in whatever non-legacy location currently serves onboarding content to users (and should point to char.com, not hyprnote.com).
Was this helpful? React with 👍 or 👎 to provide feedback.
| **In the meantime...** why don't you check out [docs](https://docs.hyprnote.com/using-hyprnote/getting-started?utm_source=app&utm_medium=onboarding&utm_campaign=organic) or [blog](https://hyprnote.com/blog?utm_source=app&utm_medium=onboarding&utm_campaign=organic) for a better understanding of the service. We also have @[Onboarding Video](note:df1d8c52-6d9d-4471-aff1-5dbd35899cbe) for you to get started. | ||
| <br/> | ||
|
|
||
| Also, please [join our Discord](https://hyprnote.com/discord)! We really want to hear from you. | ||
| Also, please [join our Discord](https://hyprnote.com/discord?utm_source=app&utm_medium=onboarding&utm_campaign=organic)! We really want to hear from you. |
There was a problem hiding this comment.
🔴 Modification of READ-ONLY crates/db-user asset (thank-you.md)
crates/db-user/AGENTS.md explicitly states: "crates/db-user is legacy and READ-ONLY." This PR modifies crates/db-user/assets/thank-you.md to add UTM parameters, violating the mandatory read-only rule. The UTMs are also applied to hyprnote.com/docs.hyprnote.com links rather than char.com as the UTM convention requires (apps/web/content/docs/developers/12.analytics.mdx:129).
Prompt for agents
The crates/db-user/AGENTS.md rule states this crate is legacy and READ-ONLY. These changes should be reverted. If UTM tracking is needed for onboarding links, the links should be updated in whatever non-legacy location currently serves onboarding content to users (and should point to char.com, not hyprnote.com).
Was this helpful? React with 👍 or 👎 to provide feedback.
| ### 1. Char: complete control over your data and AI stack | ||
|
|
||
| Most transcription software forces you into their cloud, their servers, their rules. **[Char](https://char.com)** is an open-source AI note-taker that stores your data locally and gives you complete control over the AI stack. | ||
| Most transcription software forces you into their cloud, their servers, their rules. **[Char](https://char.com?utm_source=website&utm_medium=blog&utm_campaign=organic)** is an open-source AI note-taker that stores your data locally and gives you complete control over the AI stack. |
There was a problem hiding this comment.
🚩 Inconsistent URL format: char.com?utm_source=... missing trailing slash
Three blog articles link to the bare domain without a trailing slash before the query string: https://char.com?utm_source=website&utm_medium=blog&utm_campaign=organic (in apps/web/content/articles/best-ai-notetakers-google-meet.mdx:33, apps/web/content/articles/meeting-productivity-tools.mdx:34, apps/web/content/articles/meeting-minutes-software.mdx:35). Other articles in the same PR use https://char.com/?utm_source=... with a trailing slash (e.g. apps/web/content/articles/best-ai-notetaker.mdx:62). While browsers and servers handle both forms correctly, the inconsistency could cause PostHog to record two different landing page URLs for the homepage (char.com vs char.com/), fragmenting analytics data. Consider normalizing to https://char.com/?utm_source=... everywhere.
Was this helpful? React with 👍 or 👎 to provide feedback.
| | GitHub CONTRIBUTING | `github` | `contributing` | `CONTRIBUTING.md` | | ||
| | Desktop app settings | `app` | `settings` | `apps/desktop/src/settings/ai/llm/shared.tsx` | | ||
| | Desktop app changelog | `app` | `changelog` | `apps/desktop/src/changelog/index.tsx` | | ||
| | In-app onboarding | `app` | `onboarding` | `crates/db-user/assets/onboarding-raw.html` | |
There was a problem hiding this comment.
🚩 Analytics docs reference the read-only crate as canonical UTM example
The newly added UTM convention table at apps/web/content/docs/developers/12.analytics.mdx:147 lists crates/db-user/assets/onboarding-raw.html as the example file for in-app onboarding UTMs. Since crates/db-user is designated READ-ONLY and legacy, this documentation endorses a pattern that contradicts the crate's own rules. If the onboarding content is served from a different location in production, the docs should reference that location instead.
Was this helpful? React with 👍 or 👎 to provide feedback.
✅ Deploy Preview for char-cli-web canceled.
|
Add UTM tracking parameters to owned links across GitHub files, desktop app, onboarding assets, blog articles, and docs to enable attribution of app installs and website traffic by source. Convention: - utm_source: github | app | website - utm_medium: readme | contributing | settings | changelog | onboarding | blog | docs - utm_campaign: organic Co-Authored-By: John <john@hyprnote.com>
…book Co-Authored-By: John <john@hyprnote.com>
…ling slash, update analytics docs reference Co-Authored-By: John <john@hyprnote.com>
de66501 to
382cc4a
Compare
Summary
Adds UTM tracking parameters to owned outbound links across the repo so app installs and website traffic can be attributed by source in PostHog. Also documents the UTM convention in the analytics developer docs and handbook so the team can maintain consistency going forward.
18 files changed across 5 areas:
utm_sourceutm_mediumgithubreadme,contributingappsettings,changelogwebsiteblogwebsitedocsAll links use
utm_campaign=organic. UTM params are placed before#fragments where applicable. Homepage URLs are normalized tochar.com/(with trailing slash) to avoid fragmenting analytics data betweenchar.comandchar.com/.Not changed:
crates/db-user/assets/onboarding files — marked READ-ONLY inAGENTS.md; these still usehyprnote.comand lack UTMs (tracked as a known gap in the analytics docs)fastrepl/marketingrepo (empty, no commits)Review & Testing Checklist for Human
char.comlink tochar.com/?utm_source=website&utm_medium=blog&.... These UTMs will override the visitor's original session source in PostHog/GA when they navigate internally. Confirm this is the desired behavior vs. excluding same-origin links from UTM tagging.utm_sourcevalues (github,app,website) andutm_mediumvalues (readme,settings,blog, etc.) align with how you want to segment in PostHog./docs/developers/analytics#utm-parameters-on-owned-links. Confirm the docs framework generates this slug correctly from the## UTM parameters on owned linksheading.char.comlinks that may have been missed (especially in recently added blog posts or docs).Suggested test plan: Open the Netlify preview, navigate to the analytics docs page and handbook funnel page, verify the UTM convention tables render correctly, and confirm the cross-link between them resolves.
Notes
crates/db-userare a known gap — they use legacyhyprnote.comURLs and are read-only, so UTMs + domain migration would need a separate effortchatgpt-data-retention-policy.mdxarticle had a trailing removed by main — this PR preserves that cleanup while adding UTMs to the download linkLink to Devin session: https://app.devin.ai/sessions/34101d26258248b490fe456d66f56073
Requested by: @ComputelessComputer