Skip to content

Replace the draft terms and privacy pages with final text - #85

Merged
leoisadev1 merged 8 commits into
mainfrom
cnv-48-legal-pages
Oct 7, 2026
Merged

leoisadev1 merged 8 commits into
mainfrom
cnv-48-legal-pages

Conversation

@leoisadev1

@leoisadev1 leoisadev1 commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Summary

convt.app/terms and /privacy take real Polar checkouts but showed a "Draft, pending legal review" banner and bracket placeholders. This removes the banner and every placeholder, finishes the terms and fills the gaps in the privacy policy, using Leo's final decisions:

  • Seller: the trading name "convt". No personal name or postal address appears. Polar (polar.sh) processes every purchase as merchant of record and handles payment, tax and invoicing.
  • Refunds: 14 days, no reason needed, for Desktop and Pro payments. A full refund revokes the license key. Metered API usage is refunded only when it was billed wrongly.
  • Governing law: the State of Florida, USA, with the courts located in Florida. Consumers keep the mandatory protections of the country where they live.
  • Effective date: October 7, 2026. If the merge slips, change legal.effectiveDate to the merge date.

The privacy page no longer says the desktop app has "no analytics" or "no crash reporting". Desktop telemetry and crash reporting are coming in #82 and #84, which own those disclosures, so this PR only removes the false claims and adds nothing about them. #82 rewrites the same "no analytics, crash reporting or advertising code" sentence, so whichever PR merges second gets a one-line conflict there.

 apps/web/src/
 ├── lib/site.ts                 # legal: entity, refundDays, governingLaw, courts, effectiveDate
 ├── components/site/legal.tsx   # DraftNotice and Placeholder removed
 └── routes/_site/
     ├── terms.tsx               # seller and Polar, refunds, ending your account, changes, Florida law, contact
     └── privacy.tsx             # controller, legal bases, data transfers, app analytics claims removed

Evidence

Before (convt.app at the time) After
Terms before, desktop Terms after, desktop
Terms before, mobile Terms after, mobile
Privacy before, desktop Privacy after, desktop
Privacy before, mobile Privacy after, mobile

The after shots come from bun run dev:web at 1280 and 390 px, with latest main merged in. The before shots show only the visible part of the live page.

  • Before: both pages render the draft banner and [Effective date], [Legal entity name], [Refund policy to be decided], [Liability terms to confirm], [Governing law and courts].
    After: rg '\[(Legal|Effective|Refund|Liability|Governing)' apps/web returns nothing. apps/web/test/unit/legal.test.tsx renders both routes and checks that:
    • there's no draft, placeholder or bracketed text
    • the terms have the refund, termination, governing law and contact sections
    • the terms state convt as seller, Polar's role, the 14-day window, key revocation, Florida law and courts, the consumer carve-out and the effective date
    • the privacy page names convt as controller and has no "no analytics" or crash-reporting claim
  • bun run check, bun run check-types, bun run build and all 112 web unit tests pass.
  • Two independent GPT-6.1 Sol reviews checked the text against the billing code. The first caught three claims that overstated what billing does: that revoking a key switches off an offline copy, that deleting an account ends subscriptions at once, and that the refund window covers API usage. The second caught gaps in the tests. Greptile and Devin then flagged that account deletion has no hard one-day limit, so the terms now say it usually takes minutes. All of these are fixed.

Not covered

The existing promise that cloud files are "deleted 24 hours after the job is created" predates this PR. docs/p9-cloud-plan.md says jobs expire at 24 hours and a cleanup job runs every minute, so actual removal depends on that job succeeding. I left that wording unchanged.

Merge Danger

Door: one-way in effect. A revert restores the old text, but the terms are what buyers agree to at checkout from the day this ships.

Blast radius: /terms and /privacy only. There's a small text conflict with #82 on one privacy sentence.

Fixes CNV-48

Created with Claude Opus 5.5 in Claude Code.

leoisadev1 and others added 2 commits October 7, 2026 15:50
Drop the draft banner and bracket placeholders. Terms now cover refunds,
termination, governing law and contact; the provider, refund policy,
governing law and effective date come from legal in lib/site.ts, marked
TODO(CNV-48) until Leo decides them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Keys are checked offline, so a revoked key is not switched off; account
deletion ends subscriptions before removing the account and can take up
to a day; the refund window covers Desktop and Pro, not metered API use.
The legal test now rejects any bracketed or draft text.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 3 potential issues.

Devin Review

Comment thread apps/web/src/routes/_site/terms.tsx Outdated
Comment thread apps/web/test/unit/legal.test.tsx
Comment thread apps/web/src/routes/_site/privacy.tsx
@greptile-apps

greptile-apps Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5 Tier: plus

[Medium risk] Replaces draft legal pages with final text and dates.

The PR appears safe to merge; no actionable new issue remains.

What we checked:

  • Refunds revoke the right key: convergePro selects keys tied to refunded invoices. The existing test checks that a renewal refund leaves the earlier key unchanged.
  • Paid keys survive account deletion: The client checks the stored key’s signature and covered build date locally. Removing the account does not change those checks.

Summary

Replaces the draft legal pages with final terms and privacy text.

  • Adds the 14-day refund promise, account-ending terms, Florida law, and consumer protections.
  • Removes draft notices and placeholders. Adds tests for the final text.
  • Both earlier concerns are addressed: deletion is now an estimate with retries, and tests check the refund window and key revocation.
  • leoisadev1 intentionally chose the trading name without a postal address and deferred desktop telemetry disclosures to feat(telemetry): report desktop and web exceptions to PostHog #82 and feat(desktop): add opt-out usage telemetry #84.
  • leoisadev1 accepted the existing cloud-file deletion wording, noting that removal depends on the cleanup job succeeding.
  • Checks were limited to reading code. Tests and browser checks were not run.

Reviews (3) · Last reviewed commit: "Merge remote-tracking branch 'origin/cnv..." · Reviewed by Greptile

Comment thread apps/web/src/routes/_site/terms.tsx Outdated
Comment thread apps/web/test/unit/legal.test.tsx
leoisadev1 and others added 3 commits October 7, 2026 16:56
convt is the seller's trading name and Polar (polar.sh) processes every
purchase as merchant of record. No postal address. 14-day no-reason
refunds. Florida law and courts, with consumers keeping their home
protections. Effective October 7, 2026. The privacy page no longer says
the app has no analytics or crash reporting; PRs #82 and #84 own those
disclosures.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
leoisadev1 and others added 3 commits October 7, 2026 17:17
Deletion retries failed billing steps with no cutoff, so the terms say it
usually takes minutes rather than promising a day.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@leoisadev1
leoisadev1 merged commit f29f388 into main Oct 7, 2026
9 checks passed
@leoisadev1
leoisadev1 deleted the cnv-48-legal-pages branch October 7, 2026 21:30
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