Skip to content

Say that the app has analytics, because it does - #143

Merged
xuelink merged 1 commit into
mainfrom
fix/privacy-policy-analytics
Sep 4, 2026
Merged

Say that the app has analytics, because it does#143
xuelink merged 1 commit into
mainfrom
fix/privacy-policy-analytics

Conversation

@xuelink

@xuelink xuelink commented Sep 4, 2026

Copy link
Copy Markdown
Member

This changes legal text. It should be read, not merged on CI going green.

The privacy policy said, in the section whose whole job is to be precise:

No analytics, and no analytics SDK. … There is no product-analytics or session-recording SDK in the app or on this website.

The cookie policy said the app contains none, and added:

If that ever changes, this section will say so before it does.

apps/mobile has shipped posthog-react-native ^4.67.0 since early September, wired up in src/lib/analytics.ts with a closed event union and property sanitisation. The section that promised to speak first never spoke.

What is actually true, and what the policy now says

PostHog, on its EU cloud, receives screen names, five funnel events (message_sent, onboarding_completed, paywall_viewed, purchase_started, purchase_finished) and the LangX user id.

  • Session replay is off (enableSessionReplay: false)
  • Geo-IP resolution is off (disableGeoip: true)
  • Keys that would carry a message body, email, name or handle are refused at build time, not filtered afterwards (FORBIDDEN_PROPERTY_KEYS)
  • On by default, off in Settings → Privacy → Share usage data
  • This website still has no analytics of any kind — which is why the cookie policy's answer now splits in two

To be fair to what was built: this is a careful integration, and langx/docs/store/privacy-data-safety.md documented it correctly from the code all along. What went wrong is that the website's policies were never updated to match.

What changed

File
PrivacyPolicy.svelte New 2.4 Usage analytics; the false bullet in §4 narrowed to what is still true; PostHog added to §6 third parties; new 10.5 for the opt-out
CookiePolicy.svelte Answer split: none on the site, and what the app does — including that this page should have said so first
Story.svelte, features.ts "No ads, no trackers" → "No ads, nothing sold". A reader turns "no trackers" into "nothing watches what I do", which is no longer true
v2 announcement post Original sentence kept, with a dated note under it. It was true when published; rewriting it would hide that this happened
PRODUCT.md Carried the claim, and is what other work reads before writing copy. Now says the opposite and points at the store doc

Worth deciding separately

The fix here is to the pages. The other available fix is to the app — if analytics-on-by-default is not what you want, this PR does not settle that, it just stops the site saying something untrue while you decide.

npm run lint, npm run check (0 errors) and the build all pass.

🤖 Generated with Claude Code

The privacy policy said, in the section whose job is to be precise: "No
analytics, and no analytics SDK ... There is no product-analytics or
session-recording SDK in the app or on this website." The cookie policy said
the app contains none, and added that if it ever changed, the section would
say so before it did.

apps/mobile has shipped posthog-react-native since early September, wired up
in src/lib/analytics.ts with a closed event union and property sanitisation.
The section that promised to speak first never spoke.

What is actually true, and now what the policy says: PostHog on its EU cloud
receives screen names, five funnel events and the LangX user id. Session
replay is off, geo-IP resolution is off, and the keys that would carry a
message body, an email address, a name or a handle are refused when the app is
built rather than filtered after. It is on by default and off in
Settings → Privacy → Share usage data. This website still has no analytics of
any kind, which is why the cookie policy's answer splits in two.

The claim also lived outside the policies. "No ads, no trackers" on the
homepage and in the feature list is the sentence an ordinary reader turns into
"nothing watches what I do", and that is no longer true; both now say "no ads,
nothing sold", which is. The v2 announcement post keeps its original sentence
with a dated note under it rather than being quietly edited — it was true when
it was published, and rewriting it would hide that this happened.

PRODUCT.md carried the claim too, and is the file other work reads before
writing copy. It now says the opposite and points at
langx/docs/store/privacy-data-safety.md, which was written from the code and
had this right all along.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@xuelink
xuelink merged commit e87cb82 into main Sep 4, 2026
1 check passed
@xuelink
xuelink deleted the fix/privacy-policy-analytics branch September 4, 2026 21:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant