Strip tracking parameters from links on paste and on render #103

Closed
opened 2026-09-17 01:39:34 -04:00 by jared · 1 comment
Owner

Privacy: links pasted into the composer and links rendered in the timeline should lose tracking parameters so a shared link doesn't carry ad/analytics identifiers to everyone who clicks it.

Scope

  • Composer: on paste of a URL (and when linkifying on send), strip known tracking params: utm_*, fbclid, gclid, dclid, msclkid, mc_eid, igshid, twclid, ttclid, yclid, _hsenc/_hsmi, vero_id, wickedid, ref_src, YouTube si=, Amazon ref=/tag=... (single shared list in src/app/utils/urlTracking.ts, unit-tested).
  • Render: the same stripping applied to href (and the visible text when text === href) in the timeline linkifier, so links sent from other clients are cleaned locally too.
  • Never rewrite params on hosts where they are functional (allowlist by hostname where needed); never touch matrix.to / permalinks / mxc://.
  • Setting (on by default) under Settings → Privacy so it can be turned off.

Acceptance

  • Unit tests for the stripper (keeps non-tracking params, preserves fragment, idempotent, handles malformed URLs by returning input unchanged).
  • Prettier/eslint/tests/build green.
Privacy: links pasted into the composer and links rendered in the timeline should lose tracking parameters so a shared link doesn't carry ad/analytics identifiers to everyone who clicks it. ### Scope - Composer: on paste of a URL (and when linkifying on send), strip known tracking params: `utm_*`, `fbclid`, `gclid`, `dclid`, `msclkid`, `mc_eid`, `igshid`, `twclid`, `ttclid`, `yclid`, `_hsenc`/`_hsmi`, `vero_id`, `wickedid`, `ref_src`, YouTube `si=`, Amazon `ref=`/`tag=`... (single shared list in `src/app/utils/urlTracking.ts`, unit-tested). - Render: the same stripping applied to `href` (and the visible text when text === href) in the timeline linkifier, so links sent from other clients are cleaned locally too. - Never rewrite params on hosts where they are functional (allowlist by hostname where needed); never touch matrix.to / permalinks / `mxc://`. - Setting (on by default) under Settings → Privacy so it can be turned off. ### Acceptance - Unit tests for the stripper (keeps non-tracking params, preserves fragment, idempotent, handles malformed URLs by returning input unchanged). - Prettier/eslint/tests/build green.
jared added this to the Features 2026-Q4 milestone 2026-09-17 01:39:34 -04:00
jared added the enhancementpriority: mediumsecurityarea: messaging labels 2026-09-17 01:39:34 -04:00
jared self-assigned this 2026-09-17 01:39:34 -04:00
Author
Owner

Shipped on lotus#103 in 5b0d3554, #104 in 1ff28820. Gates green (tsc, eslint 68/68, prettier, 1068 tests, build, boot-check, bundle budget). Deploys via the usual CI → lotus-deploy gate.

Live check to do once deployed: (#103) paste a YouTube share link with ?si= and confirm it sends clean; (#104) change the theme on web and confirm desktop follows after its next sync.

Shipped on `lotus` — #103 in 5b0d3554, #104 in 1ff28820. Gates green (tsc, eslint 68/68, prettier, 1068 tests, build, boot-check, bundle budget). Deploys via the usual CI → lotus-deploy gate. Live check to do once deployed: (#103) paste a YouTube share link with `?si=` and confirm it sends clean; (#104) change the theme on web and confirm desktop follows after its next sync.
jared closed this issue 2026-09-17 01:56:20 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#103