feat: add terms of service in all nine languages - #194
Merged
Merged
Conversation
WaveKat had a privacy policy and nothing else. Nowhere did anyone agree to anything: the desktop app installs and runs without a word, the sign-in page hands you an account with no mention of terms, and the two things a user most needs told — that WaveKat Voice cannot reach emergency services, and that recording calls is their problem, not ours — lived only in a privacy policy nobody is asked to open. This is the document those flows will point at. It is written the way the privacy policy is: plain language, by the people who build the thing, with the inconvenient parts said out loud rather than buried. Emergency calling leads the page. It is a calling app that is not a phone line, and a user who assumes otherwise finds out at the worst possible moment. The copy is data, not nine hand-written pages. `src/lib/terms/<slug>.ts` holds one TermsDoc per locale and `TermsContent.astro` renders it, the same arrangement the comparison pages use — so the nine page files are byte-identical and a clause added in English is visibly missing from the other eight rather than quietly absent. `terms-completeness.test.js` (wired into `npm test`, which CI runs) enforces that: same sections in the same order, same block shapes, same link targets, and no locale falling back to English. The privacy policy gains a reciprocal link in all nine languages, and the footer gains a Terms row beside Privacy — the app and the sign-in page will both ask people to agree to this, so it has to be findable afterwards, in their own language. Governing law is New Zealand and the liability cap is NZ$100. Both are placeholders in the sense that they are the one part of this page a court reads literally — confirm the registered company name and jurisdiction before this goes public. There is a comment on the clause in en.ts saying so. Verified: `astro build` clean, `check:meta` passes in all nine (three translations busted the 160-char description budget and were shortened; Korean busted the 85-char CJK budget), `check:links` reports no new broken or un-localized links, `npm test` green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YK1AV5YEozu4Sj73d5r5Xc
wavekat-eason
marked this pull request as draft
September 12, 2026 17:11
Contributor
The first draft described a product that does not exist yet: a paid yearly Pro plan with a 14-day refund, transcription on by default, opt-in cloud sync, and a privacy policy folded into the contract. Pro is free during early access with no checkout anywhere, transcription is off until turned on, sync is on once you sign in, a password can be added to an account, and the sign-in page deliberately says "agree to the terms and acknowledge the policy". Also adds the store section Apple requires when an app carries its own agreement, a call-flow paragraph, coverage of the wk tool and the voice prompt generator, and narrows the indemnity. Drops the notice periods and the chatty asides. All nine locales and the privacy policy's reciprocal sentence are updated together. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QDCYcZcop1rsVEVsn7xson
wavekat-eason
marked this pull request as ready for review
September 12, 2026 23:48
wavekat-eason
pushed a commit
that referenced
this pull request
Sep 12, 2026
🤖 I have created a release *beep* *boop* --- ## [0.0.67](wavekat-com-v0.0.66...wavekat-com-v0.0.67) (2026-09-12) ### Features * add terms of service in all nine languages ([#194](#194)) ([e57d62c](e57d62c)) * **privacy:** account holders agree we may contact them by email ([#192](#192)) ([f23000e](f23000e)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
WaveKat had a privacy policy and nothing else. Nowhere did anyone agree to anything: the desktop app installs and runs without a word, the sign-in page hands you an account with no mention of terms, and the two things a user most needs told — that WaveKat Voice cannot reach emergency services, and that recording calls is their responsibility, not ours — lived only inside a privacy policy nobody is asked to open. Neither is a privacy question.
This is the document the other two PRs point at (wavekat-voice #425, wavekat-platform #321).
Merge this one first.
wavekat-voice'scheck-linksjob assertswavekat.com/terms/is live.What's here
/terms/in all nine languages: plain language, with the inconvenient parts said out loud. Emergency calling leads the page.What the review changed
The first draft described a product that does not exist yet. Every claim on the page was re-checked against
wavekat-voiceandwavekat-platform:wktool and the voice prompt generator are now covered.How it's built
The copy is data, not nine hand-written pages.
src/lib/terms/<slug>.tsholds oneTermsDocper locale andTermsContent.astrorenders it — the same arrangementvoice/alternatives/uses.scripts/test/terms-completeness.test.js(innpm test) enforces same sections, same block shapes, same link targets, same counts, across all nine.The privacy policy is deliberately not migrated to this shape.
Verification
npm testSYNC_DOCS=1 WAVEKAT_LOCAL_REPOS=… npm run build/terms/pages render with 17 sectionsnpm run check:linksnpm run check:metaThe governing-law section names New Zealand and caps liability at NZ$100. The jurisdiction is inferred from where WaveKat operates; the registered company name is not written down anywhere in the repos. Confirm both — there's a comment on the clause in
en.ts.🤖 Generated with Claude Code
https://claude.ai/code/session_01QDCYcZcop1rsVEVsn7xson