Enhancement Proposal

Proposal: Hosted login experience and branding (Universal Login)

The ADRs decided the issuer; they did not decide the login experience. A raw OIDC endpoint without hosted, brandable, localized login/registration/MFA/recovery pages is not competitive with Auth0 Universal Login or Okta's hosted sign-in. This is a feature on the admission plane (Modgud, ADR-0009) governed by realm policy (ADR-0012) — no new architecture.

Motivation

Centralising the login UX at the IdP is both a product requirement (CIAM apps need a polished, branded, localized sign-in) and a security win: credentials are entered in exactly one place, which is phishing-resistant (passkey origin-binding, ADR-0020), consistently hardened, and never copied into per-app login forms.

Design

  • Hosted ceremonies at Modgud (ADR-0009): login, registration, MFA challenge and enrollment, consent, recovery (proposal 0003), and error pages — all served by the IdP, not the relying party.
  • Per-realm branding (ADR-0012): logo, colors, theme/CSS, custom copy, and localization (multiple languages), so each tenant or app presents its own identity. This proposal is the owner of localization/i18n for the hosted UIs — notification templates (proposal 0011) and accessibility's language/RTL requirements (proposal 0020) reference the mechanism here rather than growing their own.
  • Custom domains: serve auth from the relying party's own domain (e.g. auth.customer.com). The routing fits the existing edge/regional topology (ADR-0024); the one operational dependency is automated certificate provisioning (ACME), noted but not new architecture. One consequence is a reserved seat (proposal 0001): a custom domain changes the realm's issuer (iss) and its discovery/JWKS URLs — a Vör-visible, token-format-adjacent decision that must be made at M4, and before WebAuthn passkeys bind to realm origins (ADR-0020); this corrects the earlier "no token change" framing.
  • Messaging (verification/reset/OTP) is delivered through the notification provider (proposal 0011) and shares the branding/localization.

Alternatives considered

  • Embedded / SDK-only login as the primary path — rejected: it fragments credential entry across apps, widens the phishing surface, and is harder to harden uniformly. (An embedded SDK may still wrap the hosted flow.)
  • Per-app login forms — rejected for the same reason.

Graduation criteria

A realm can fully brand and localize all hosted ceremonies; a custom domain serves auth with an auto-provisioned certificate; login, MFA, recovery, and consent are consistent and centrally hardened.

Backward compatibility

A feature on Modgud + realm policy; no API or architecture change — with the one correction above: a custom domain moves the realm's iss and discovery/JWKS URLs, a Vör-visible seat decided at M4, before passkey origin binding (ADR-0020). Custom-domain certificate provisioning is a deployment concern (ADR-0024).

Open questions

  • Theming model: config vs CSS vs templates (without becoming code-execution).
  • Custom-domain certificate automation and tenant-domain verification.