Skip to content

feat(legal): beta acknowledgement on generation and uploads; versioned Terms on native and web - #129

Merged
ehsan6sha merged 2 commits into
mainfrom
feat/beta-consent-and-terms
Sep 16, 2026
Merged

ehsan6sha merged 2 commits into
mainfrom
feat/beta-consent-and-terms

Conversation

@ehsan6sha

Copy link
Copy Markdown
Member

Owner request: a required beta acknowledgement before generating a website, the same before every upload, and the same term in the Terms of Service — for web and native.

Generation popup

showIpfsPublicDisclaimerDialog (web + native, website and social variants) gains a second, separate required checkbox:

I understand this app is in beta testing, generated content may not be reliable or accessible, and integration with Fula token is for testing and demo use.

Agree needs both boxes. Native retry generation now shows the popup too (it previously skipped it).

Upload popup (every upload action, once per batch)

New showBetaUploadDialog, same shape, required box:

I understand this app is in beta testing, uploaded files may not be reliably stored or remain accessible (I will keep my own copies of anything important), and integration with Fula token is for testing and demo use.

Web Native
home quick-upload tile (tap + drag-drop), category screens, cloud files, shelf file/photo/recording, collaboration add file, website asset import, NFT mint, share publicly (bucket + cloud files), automate attachment file browser upload + multi-select upload, enabling / running auto-sync (category + folder), share publicly, Windows Explorer upload, shelf import + photo save, NFT mint, WhatsApp backup; automate attachment's public-pin popup carries the upload wording

On web the popup comes after the file picker: the picker must open inside the tap or iOS Safari never shows it. Automatic uploads (auto-sync runs, share-intent drains, queue resume) are covered by the Terms, not a popup.

Terms of Service

  • One shared text (lib/shared/legal/terms_content.dart) with a new "2. Beta Software and FULA Token" section; existing sections moved verbatim (checked mechanically against the old screen), renumbered; "Last updated" fixed (it said March 2026 while the terms take effect Sept 2026).
  • kTermsVersion = 2. Native records the accepted version and UTC time and treats the old boolean as version 1 → every existing user re-accepts once ("Updated Terms of Service").
  • Web had no Terms at all: it now shows the same gate (version + time in localStorage, fail-soft), both settings screens link to the Terms, and the web sign-in Terms checkbox links to the text.
  • The Accept button also unlocks when the whole text fits on screen (it could stay disabled forever on a tall window).

Verification

  • 21 new tests (terms content + versioning, both dialogs incl. both-boxes-required, Terms screen); full suite 1110 passed.
  • flutter build web with the Pages command succeeds.
  • Headless Chrome on the built web app: gate shown with Accept disabled → scrolling to the end enables it → accepting stores version 2 + timestamp → reload skips the gate.

Not legal advice

No wording guarantees protection from lawsuits; this implements clickwrap consent (unticked required boxes, versioned acceptance record) — the text should be reviewed by a lawyer, in particular calling FULA integration "for testing and demo use" while generations are paid in FULA.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AwMWmCivEpYTmmzzmjSTAf

ehsan6sha and others added 2 commits September 16, 2026 13:59
…d Terms on native and web

Owner request: a required beta acknowledgement before generating, the same
before every upload, and the same term in the Terms of Service.

- Generation popup (showIpfsPublicDisclaimerDialog, web + native, website
  and social): a second, separate required checkbox with the owner's
  wording; Agree needs both boxes. Native "retry generation" now shows it
  too (it skipped the popup entirely).
- Upload popup (showBetaUploadDialog): same shape, upload wording, shown on
  every user-initiated upload action (once per batch). Web: home
  quick-upload tile (tap and drag-drop), category screens, cloud files,
  shelf file/photo/recording, collaboration add file, website asset import,
  NFT mint, share publicly (x2), automate attachment. Native: file browser
  upload and multi-select upload, enabling or running auto-sync, share
  publicly, Windows Explorer upload, shelf import and photo save, NFT mint,
  WhatsApp backup; the automate attachment's public-pin popup carries the
  upload wording. On web the popup follows the file picker: the picker must
  open inside the tap, or iOS Safari never shows it. Automatic uploads
  (auto-sync runs, share-intent drains, queue resume) are covered by the
  Terms, not a popup.
- Terms: one shared text (lib/shared/legal/terms_content.dart) with a new
  "2. Beta Software and FULA Token" section; existing sections moved
  verbatim (checked mechanically), renumbered, last-updated date fixed.
  kTermsVersion = 2: native records the accepted version and UTC time and
  treats the old boolean as version 1, so every existing user re-accepts
  once. The web app had no Terms at all: it now shows the same gate
  (version and time in localStorage, fail-soft), and both settings screens
  link to the Terms; the web sign-in Terms checkbox links to the text.
  The Accept button also unlocks when the whole text fits on screen.

Tests: 21 new (terms content and versioning, both dialogs, Terms screen);
full suite 1110 passed. flutter build web (the Pages command) succeeds;
the web gate verified in headless Chrome: gate, scroll unlock, stored
version 2 + timestamp, no gate after reload.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwMWmCivEpYTmmzzmjSTAf
Found in review: saving a Shelf note (web + native) or link (web) stores
it in the cloud like any other Shelf item but skipped the beta upload
notice. The owner chose the notice on every upload action.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwMWmCivEpYTmmzzmjSTAf
@ehsan6sha
ehsan6sha merged commit 30cdb5a into main Sep 16, 2026
2 of 3 checks passed
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