Opt-ins (Consent)
Configure required and optional opt-ins, enforce required consent, and allow users to accept or decline optional opt-ins.
Overview
Applications can define opt-ins (consent items) that users can accept or decline.
- Required opt-ins: must be accepted to register / continue using the app.
- Optional opt-ins: can be accepted or declined. Users can revisit and change their decision later.
Opt-ins are configured on the Application and support i18n via title and description objects.
Data model
Each opt-in has:
id: string identifier (stable)title: i18n object (e.g.{ en: "...", de: "..." })description: i18n objectrequired: booleanactive: boolean (inactive opt-ins are hidden)
User state is tracked with:
optInDecisions[]: all opt-in decisions, each with{ optInId, status: "accepted" | "declined", decidedAt }
Enforcement
Registration
During registration, the UI shows the active opt-ins and blocks submission until all required opt-ins are accepted. The server validates required acceptance as well.
Catch-up redirect
If a user is signed in and a new required opt-in is added later, the user is redirected to /opt-ins until they accept it.
Optional opt-ins reminder
When there are new / undecided active optional opt-ins, the app shows a small reminder banner once per session (sessionStorage) to invite the user to review them.
- Review navigates to
/opt-ins. - Dismiss hides the banner for the current session.
User-facing page
Users can always visit /opt-ins to review all active opt-ins and see their current status and decision dates.