Skip to content

copy(firstrun): stop promising "no telemetry" on the setup screen - #1410

Merged
debpalash merged 2 commits into
mainfrom
copy/privacy-first
Aug 7, 2026
Merged

copy(firstrun): stop promising "no telemetry" on the setup screen#1410
debpalash merged 2 commits into
mainfrom
copy/privacy-first

Conversation

@debpalash

@debpalash debpalash commented Aug 7, 2026

Copy link
Copy Markdown
Owner

The trust line under Start installation read:

Everything runs and stays on this machine — no account, no cloud, no telemetry.

That last claim stopped being true when opt-in PostHog analytics shipped in every build behind the first-run consent prompt. The setup screen was asserting something the app doesn't do — and asserting it on the screen where the user decides whether to trust it.

Now reads:

Privacy first: everything runs and stays on this machine — no account, no cloud.

The two remaining claims are unconditional and true. The analytics ask stays where it belongs: its own consent prompt, two equal-weight buttons, skipping means no.

Scope

  • firstrun.trust_line in all 21 locales
  • the hardcoded i18n fallback in FirstRunSetup.jsx
  • CHANGELOG under ### Changed

README's version is already correctly conditioned on consent ("until you answer yes: no analytics, no telemetry…") and is deliberately untouched.

Locale parity, CJK and changelog-style gates pass; format:check clean; the 5 FirstRunSetup tests pass. No test pinned the old string.

Updates the first-run trust line in all 21 locales and the fallback to remove the unconditional “no telemetry” claim, reflecting opt-in PostHog analytics with consent while preserving local-only, account-free, and cloud-free wording. Review translations, especially the corrected Indonesian text, for accurate privacy claims.

The trust line under Start installation claimed "no account, no cloud,
no telemetry" without qualification. That stopped being true when
opt-in PostHog analytics shipped in every build behind the first-run
consent prompt — the screen was asserting something the app doesn't do.

Now reads "Privacy first: everything runs and stays on this machine —
no account, no cloud." The two claims that remain are unconditional and
true; the analytics ask stays where it belongs, in its own consent
prompt. Translated across all 21 locales.

README's version is already correctly conditioned on consent ("until
you answer yes") and is left alone.
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 058296f9-6501-4cf7-a18e-2a660ace7e74

📥 Commits

Reviewing files that changed from the base of the PR and between 294beb6 and d1159d6.

📒 Files selected for processing (23)
  • CHANGELOG.md
  • frontend/src/components/FirstRunSetup.jsx
  • frontend/src/i18n/locales/ar.json
  • frontend/src/i18n/locales/de.json
  • frontend/src/i18n/locales/en.json
  • frontend/src/i18n/locales/es.json
  • frontend/src/i18n/locales/fr.json
  • frontend/src/i18n/locales/hi.json
  • frontend/src/i18n/locales/id.json
  • frontend/src/i18n/locales/it.json
  • frontend/src/i18n/locales/ja.json
  • frontend/src/i18n/locales/ko.json
  • frontend/src/i18n/locales/nl.json
  • frontend/src/i18n/locales/pl.json
  • frontend/src/i18n/locales/pt.json
  • frontend/src/i18n/locales/ru.json
  • frontend/src/i18n/locales/sv.json
  • frontend/src/i18n/locales/th.json
  • frontend/src/i18n/locales/tr.json
  • frontend/src/i18n/locales/uk.json
  • frontend/src/i18n/locales/vi.json
  • frontend/src/i18n/locales/zh-CN.json
  • frontend/src/i18n/locales/zh-TW.json
🚧 Files skipped from review as they are similar to previous changes (23)
  • frontend/src/i18n/locales/de.json
  • frontend/src/i18n/locales/th.json
  • frontend/src/i18n/locales/pl.json
  • frontend/src/i18n/locales/vi.json
  • frontend/src/i18n/locales/fr.json
  • frontend/src/i18n/locales/id.json
  • frontend/src/i18n/locales/it.json
  • frontend/src/i18n/locales/hi.json
  • frontend/src/i18n/locales/zh-TW.json
  • frontend/src/i18n/locales/ko.json
  • frontend/src/i18n/locales/ar.json
  • frontend/src/i18n/locales/en.json
  • frontend/src/i18n/locales/nl.json
  • frontend/src/i18n/locales/zh-CN.json
  • frontend/src/i18n/locales/pt.json
  • frontend/src/components/FirstRunSetup.jsx
  • CHANGELOG.md
  • frontend/src/i18n/locales/sv.json
  • frontend/src/i18n/locales/es.json
  • frontend/src/i18n/locales/ja.json
  • frontend/src/i18n/locales/uk.json
  • frontend/src/i18n/locales/ru.json
  • frontend/src/i18n/locales/tr.json

📝 Walkthrough

Walkthrough

The first-run privacy message was revised in the UI, changelog, and supported locales. Explicit “no telemetry” claims were removed while local-only, account-free, and cloud-free wording was retained where applicable.

Changes

First-run privacy messaging

Layer / File(s) Summary
Canonical first-run message
frontend/src/components/FirstRunSetup.jsx, frontend/src/i18n/locales/en.json, CHANGELOG.md
The first-run message and changelog now describe local-only operation without an account or cloud service instead of making an explicit no-telemetry claim.
Localized trust messages
frontend/src/i18n/locales/*.json
Localized firstrun.trust_line messages remove explicit telemetry claims and add or retain privacy-first, local-only, account-free, and cloud-free wording.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 6 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title uses Conventional Commit syntax with a scope but does not include an issue reference in the title or body. Add the required issue reference to the title or pull request body.
Description check ⚠️ Warning The description explains the change and testing but omits the required template sections for Type, Checklist, and Release cadence. Complete the repository template, including Type selections, Checklist items, and the Release cadence section.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (6 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cross-Platform Default Parity ✅ Passed The patch changes only shared first-run copy and 21 locale values. The fallback and trust_line render have no OS branch, so macOS, Windows, and Linux use the same default behavior.
I18n Completeness (21 Locales) ✅ Passed The changed key is firstrun.trust_line; it exists in all 21 locale JSON files, and the new UI text remains inside t() as a fallback.
Local-First Guarantee ✅ Passed The PR changes only strings and changelog text; analytics, bug-report transport, API client, and dependencies are unchanged, so it adds no cloud call, credential, or telemetry path.
Backward Compatibility ✅ Passed The commit changes only changelog, first-run display text, and locale values; no backend, database, migration, installer, engine, or model files changed.

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Line 25: Update the Unreleased Changed entry describing the first-run setup
screen so it remains a single line and ends with the appropriate issue or pull
request reference in the required (`#N`) format.

In `@frontend/src/components/FirstRunSetup.jsx`:
- Line 853: Update the fallback trust-line copy in
frontend/src/components/FirstRunSetup.jsx:853-853 and the corresponding
translations in frontend/src/i18n/locales/en.json:2765-2765, pt.json:2022-2022,
ru.json:2022-2022, sv.json:2022-2022, th.json:2022-2022, tr.json:2022-2022,
uk.json:2022-2022, vi.json:2022-2022, zh-CN.json:2029-2029, and
zh-TW.json:2022-2022. Replace the unconditional local-only claim with wording
scoped to voice and project data, explicitly stating that analytics leaves the
machine only after user consent, while preserving each locale’s language.

In `@frontend/src/i18n/locales/ar.json`:
- Line 2022: Revise the firstrun.trust_line translation at
frontend/src/i18n/locales/ar.json:2022-2022,
frontend/src/i18n/locales/de.json:2022-2022,
frontend/src/i18n/locales/es.json:2022-2022,
frontend/src/i18n/locales/fr.json:2022-2022,
frontend/src/i18n/locales/hi.json:2022-2022,
frontend/src/i18n/locales/id.json:2022-2022,
frontend/src/i18n/locales/it.json:2022-2022,
frontend/src/i18n/locales/ja.json:2022-2022,
frontend/src/i18n/locales/ko.json:2022-2022,
frontend/src/i18n/locales/nl.json:2022-2022, and
frontend/src/i18n/locales/pl.json:2022-2022 to narrow the local-only claim to
voice processing or explicitly mention the PostHog analytics exception,
preserving accurate meaning in each language.

In `@frontend/src/i18n/locales/id.json`:
- Line 2022: Update the Indonesian `trust_line` translation to use an idiomatic
privacy-first phrase, replacing `Privasi utama` with `Utamakan privasi` or
`Privasi adalah yang utama`, while preserving the rest of the message.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 94ca2077-d85d-4a15-9a6c-b66a03471c4e

📥 Commits

Reviewing files that changed from the base of the PR and between 0c82167 and 294beb6.

📒 Files selected for processing (23)
  • CHANGELOG.md
  • frontend/src/components/FirstRunSetup.jsx
  • frontend/src/i18n/locales/ar.json
  • frontend/src/i18n/locales/de.json
  • frontend/src/i18n/locales/en.json
  • frontend/src/i18n/locales/es.json
  • frontend/src/i18n/locales/fr.json
  • frontend/src/i18n/locales/hi.json
  • frontend/src/i18n/locales/id.json
  • frontend/src/i18n/locales/it.json
  • frontend/src/i18n/locales/ja.json
  • frontend/src/i18n/locales/ko.json
  • frontend/src/i18n/locales/nl.json
  • frontend/src/i18n/locales/pl.json
  • frontend/src/i18n/locales/pt.json
  • frontend/src/i18n/locales/ru.json
  • frontend/src/i18n/locales/sv.json
  • frontend/src/i18n/locales/th.json
  • frontend/src/i18n/locales/tr.json
  • frontend/src/i18n/locales/uk.json
  • frontend/src/i18n/locales/vi.json
  • frontend/src/i18n/locales/zh-CN.json
  • frontend/src/i18n/locales/zh-TW.json

Comment thread CHANGELOG.md Outdated
- The repository moved to github.com/debpalash/VoiceStudio. Every link in the app, docs and scripts now points there; GitHub redirects the old URLs, and the Docker image paths, the app bundle identifier and your data folder are all deliberately unchanged. (#1394)
- The app is now **VoiceStudio** (previously OmniVoice-Studio). Only the name you see changes — your data folder, settings and the Docker image paths stay put, so upgrading needs nothing from you. On Linux the .deb is now `voicestudio`; remove the old `omnivoice-studio` package once.
- macOS floor raised to 13.3 (Ventura) — the frontend has required Safari 16.4 for some time, so macOS 12 was a promise the stack could not keep (#1268)
- The first-run setup screen now reads "Privacy first: everything runs and stays on this machine — no account, no cloud." It previously promised "no telemetry" without qualification, which stopped being true once opt-in analytics shipped behind the consent prompt.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add the issue or pull request reference.

This Unreleased ### Changed entry does not end with (#N). Add the tracking reference and keep the entry as one line. As per coding guidelines, every Unreleased entry under Changed must end with a (#N) reference.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 25, Update the Unreleased Changed entry describing the
first-run setup screen so it remains a single line and ends with the appropriate
issue or pull request reference in the required (`#N`) format.

Source: Coding guidelines

Comment thread frontend/src/components/FirstRunSetup.jsx Outdated
Comment thread frontend/src/i18n/locales/ar.json Outdated
Comment thread frontend/src/i18n/locales/id.json Outdated
CodeRabbit, correctly: dropping "no telemetry" fixed one overclaim and
left two. "Everything runs and stays on this machine — no account, no
cloud" is still unconditional, and still false for anyone who opts into
analytics, which sends events to PostHog EU.

Scope it to the claim that holds either way — the one users actually
care about, and the one README already makes: content never leaves the
machine, and no processing happens in the cloud. Analytics carries
allowlisted content-free metadata only, so both remain true whichever
way the consent prompt is answered.

Also takes CodeRabbit's Indonesian correction: "Privasi utama" reads as
"main privacy"; "Utamakan privasi" is the idiomatic "privacy first".
@debpalash
debpalash merged commit 7865b65 into main Aug 7, 2026
15 checks passed
@debpalash
debpalash deleted the copy/privacy-first branch August 7, 2026 11:01
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