Summary
Add a Terms of Service and Privacy Notice acceptance checkbox to the registration screen, presented before the security key ceremony begins. Must ship before GA.
Background
Caution's current alpha registration has no explicit ToS acceptance step. For GA, users must actively consent to the Terms of Service and Privacy Notice before completing sign-up. Acceptance must happen before the passkey ceremony, the ceremony itself is the account creation act, so consent needs to be on record before it begins.
This must be an affirmative, unambiguous action, not a pre-ticked box, not a "by continuing you agree" footer.
User Flow
Registration screen layout (single screen, top to bottom)
- Heading:
Create your account - Subheading:
No email, username, or password required. - ToS checkbox row (this ticket)
- Divider
Continue with security keybutton — disabled until checkbox is checkedAlready have an account? Log in.
ToS checkbox row
[ ] I agree to the Caution Terms of Service and Privacy Notice.
- "Terms of Service" links to: https://caution.co/terms.html
- "Privacy Notice" links to: https://caution.co/privacy.html
- Both links open in a new tab
- Checkbox is unticked by default — user must actively check it
Continue with security keybutton is disabled (visually and functionally) until the box is checked- The full ToS does not need to be shown inline — a clearly labelled link is sufficient
Button copy
Continue with security key
Error state
If a user somehow submits without checking the box, show an inline error directly below the checkbox row:
Please accept the Terms of Service and Privacy Notice to continue.
Post-registration
After the security key ceremony completes, so the flow is:
- Registration screen: ToS checkbox → Continue with security key → ceremony runs
- Post-ceremony screen: email step (the optional one from the other ticket), shown immediately after the ceremony succeeds before landing on the dashboard
[ Email address input — optional ]
Add email and continue →
Skip — I understand I won't receive emails
This keeps the registration screen clean and uncluttered, one decision at a time. The email screen is a natural "almost there, one more thing" moment, which also matches the Mullvad pattern of keeping account creation minimal and adding optional details after.
Technical Requirements
tos_acceptedboolean +tos_accepted_attimestamp — stored on user/org record at account creationtos_versionstring — record which version of the ToS was accepted (e.g."2026年04月03日"), so future ToS updates can trigger re-acceptance for existing users- Server-side validation: reject the passkey ceremony initiation if
tos_acceptedis nottrue— do not rely on frontend-only enforcement - Do not bundle ToS acceptance with any other consent (email, marketing) — standalone checkbox only
- If ToS is updated post-launch, prompt existing users to re-accept on next login before proceeding
Log schema
{
"account_uuid": "...",
"event": "tos_accepted",
"tos_version": "2026年04月03日",
"timestamp": "2026年04月03日T10:00:00Z",
"ip_country": "KY"
}
Priority: Critical
Must ship before GA. Without explicit ToS acceptance before the passkey ceremony, the contract with users is not enforceable.