Skip to main content

FxA Sitemap

Every screen in the Mozilla accounts (FxA) web UI, grouped by flow, with how users arrive and where they leave. Hover a route or a box marked with the eye icon for a live Storybook preview. Click top-level flows to see map in detail.

Map

Pages

PageCovers
Entry modesWho sends users here, and the URL parameters that decide how a screen behaves
Sign inPassword, second factors, exceptions, email-link landings
Sign upCreate account and confirm
Reset passwordCode, second factor, recovery key, new password
OAuth relying party/authorization, branding, exits
Google / AppleThird-party sign-in round trip
Extra setup stepsTwo-step setup, recovery key, set password, welcome
Pairing / CADConnect another device, pairing v1 and v2
SettingsThe account page and its sub-pages
EmailsWhich email lands on which screen

Scope: packages/fxa-settings plus the remaining legacy screens in packages/fxa-content-server, and the emails that link into them. Not covered: the Subscription Platform and the admin panel.

All routes

Every route the content server serves and the page that documents it. The freshness banner at the top checks this table against mozilla/fxa main in your browser.

RouteFlow pageNotes
/Sign inEmail-first entry
/oauthOAuth relying partyEmail-first with RP context
/authorizationOAuth relying party
/signinSign in
/oauth/signinSign in
/force_authSign in
/oauth/force_authSign in
/signin_passkey_fallbackSign in
/signin_passwordless_codeSign in
/oauth/signin_passwordless_codeSign in
/signin_token_codeSign in
/signin_totp_codeSign in
/signin_recovery_choiceSign in
/signin_recovery_codeSign in
/signin_recovery_phoneSign in
/signin_unblockSign in
/signin_bouncedSign in
/complete_signinSign inEmail link
/signin_confirmedSign in
/signin_verifiedSign in
/report_signinSign inEmail link
/signin_reportedSign in
/signin_permissionsOAuth relying partyLegacy Backbone
/confirm_signinSign inLegacy Backbone
/confirmSign inLegacy Backbone
/signupSign up
/oauth/signupSign up
/confirm_signup_codeSign up
/signup_confirmedSign up
/signup_verifiedSign up
/signup_confirmed_syncSign up
/primary_email_verifiedSign up
/signup_permissionsOAuth relying partyLegacy Backbone
/verify_emailSign upLegacy Backbone, email link
/verify_primary_emailSign upLegacy Backbone
/verify_secondary_emailSettingsLegacy Backbone
/secondary_email_verifiedSettingsLegacy Backbone
/choose_what_to_syncSign upLegacy Backbone
/would_you_like_to_syncSign upLegacy Backbone
/reset_passwordReset password
/confirm_reset_passwordReset password
/confirm_totp_reset_passwordReset password
/reset_password_totp_recovery_choiceReset password
/confirm_backup_code_reset_passwordReset password
/reset_password_recovery_phoneReset password
/account_recovery_confirm_keyReset password
/complete_reset_passwordReset passwordEmail link
/account_recovery_reset_passwordReset password
/reset_password_verifiedReset password
/reset_password_with_recovery_key_verifiedReset password
/post_verify/third_party_auth/callbackGoogle / Apple
/post_verify/third_party_auth/set_passwordGoogle / Apple
/post_verify/set_passwordExtra setup steps
/post_verify/service_welcomeExtra setup steps
/inline_totp_setupExtra setup steps
/inline_recovery_setupExtra setup steps
/inline_recovery_key_setupExtra setup steps
/post_verify/password/force_password_changeExtra setup stepsLegacy Backbone
/post_verify/finish_account_setup/set_passwordExtra setup stepsLegacy Backbone, email link
/post_verify/newsletters/add_newslettersExtra setup stepsLegacy Backbone
/post_verify/secondary_email/add_secondary_emailExtra setup stepsLegacy Backbone
/post_verify/secondary_email/confirm_secondary_emailExtra setup stepsLegacy Backbone
/post_verify/secondary_email/verified_secondary_emailExtra setup stepsLegacy Backbone
/connect_another_devicePairing / CADEmail link
/pairPairing / CAD
/pair/unsupportedPairing / CAD
/pair/failurePairing / CAD
/pair/successPairing / CAD
/pair/auth/allowPairing / CADv1
/pair/auth/totpPairing / CADv1
/pair/auth/wait_for_suppPairing / CADv1
/pair/auth/completePairing / CADv1
/pair/suppPairing / CADv1
/pair/supp/allowPairing / CADv1
/pair/supp/wait_for_authPairing / CADv1
/pair/supp/completePairing / CADv1
/pair/authority/scan_qrPairing / CADv2
/pair/authority/continue_on_mobilePairing / CADv2
/pair/authority/approve_signinPairing / CADv2
/pair/authority/sync_successPairing / CADv2
/pair/authority/timeout_and_cancelPairing / CADv2
/pair/authority/download_firefoxPairing / CADv2
/pair/supplicant/ready_to_scanPairing / CADv2
/pair/supplicant/connect_this_devicePairing / CADv2
/pair/supplicant/approve_signinPairing / CADv2
/pair/supplicant/sync_successPairing / CADv2
/pair/supplicant/timeout_and_cancelPairing / CADv2
/pair/supplicant/download_firefoxPairing / CADv2
/oauth/success/:clientIdPairing / CAD
/post_verify/cad_qr/get_startedPairing / CADLegacy Backbone
/post_verify/cad_qr/ready_to_scanPairing / CADLegacy Backbone
/post_verify/cad_qr/scan_codePairing / CADLegacy Backbone
/post_verify/cad_qr/connectedPairing / CADLegacy Backbone
/poc_deep_linkPairing / CADProof of concept
/poc_pair_initPairing / CADProof of concept
/poc_pair_startPairing / CADProof of concept
/settingsSettings
/settings/display_nameSettings
/settings/avatarSettings
/settings/avatar/changeSettings
/settings/emailsSettings
/settings/emails/verifySettings
/settings/change_passwordSettings
/settings/create_passwordSettings
/settings/passkeys/addSettings
/settings/account_recoverySettings
/settings/two_step_authenticationSettings
/settings/two_step_authentication/changeSettings
/settings/two_step_authentication/replace_codesSettings
/settings/recovery_phone/setupSettings
/settings/recovery_phone/removeSettings
/settings/recent_activitySettings
/settings/clientsSettings
/settings/delete_accountSettings
/security_eventsSettingsLegacy Backbone
/subscriptionsOAuth relying partyLegacy redirect to Subscription Platform
/clearEntry modesUtility
/cookies_disabledEntry modesUtility
/web_channel_exampleEntry modesDevelopment only
/update_firefoxEntry modesServer-rendered
/download_firefoxEntry modesServer redirect
/.well-known/change-passwordSettingsServer redirect

Not listed because the served route is a pattern: /subscriptions/products/:productId, a legacy redirect to the Subscription Platform.

Keeping this current

The banner at the top is the health check. Green: the routes listed here match mozilla/fxa main. Yellow: the code has changed and this section needs an edit. Gray: the check could not run, usually because GitHub was unreachable or the route files in fxa moved; the list may still be current, it just could not be verified.

When it's yellow, the banner lists the routes that were added or removed in code:

  1. For a new route, find its component in packages/fxa-settings/src/components/App/index.tsx (or Settings/index.tsx for a Settings sub-page) and its story in the published Storybook, where story titles under Pages/ match the component names.
  2. Add a row to the All routes table above, and a row on the flow page's Screens table with the screen name linked to that story and a one-line purpose. If users see the screen as a step in the flow, add a box to that page's map: title on the first line, path on the second.
  3. For a removed route, delete its rows and any box.
  4. Preview with yarn start until the banner is green, then open a pull request.

The steps are mechanical enough to hand to an assistant. From the ecosystem-platform checkout, this prompt works: "The FxA Sitemap banner lists routes out of sync with fxa. Update docs/fxa-sitemap following the Keeping this current section of the overview, looking up each new screen in packages/fxa-settings in the fxa repo."

When it stays gray: src/js/fxa-sitemap-live.js reads two files from fxa, packages/fxa-content-server/server/lib/routes/react-app/content-server-routes.js and packages/fxa-settings/src/components/Settings/index.tsx. Update the paths if those files moved.

Sources of truth and how the widgets work

Routes: packages/fxa-content-server/server/lib/routes/react-app/content-server-routes.js lists every served route and .../react-app/index.js says which ones React serves; packages/fxa-settings/src/components/App/index.tsx and Settings/index.tsx hold the React routes. Entry modes: packages/fxa-settings/src/lib/integrations/integration-factory.ts. Email links: libs/accounts/email-renderer/src/renderer/email-link-builder.ts. Screens: the published Storybook. Functional tests: packages/functional-tests/tests, one folder per flow.

Hover previews are derived from the Storybook links in the Screens tables, so a route becomes hoverable everywhere as soon as its row has one. The widgets are plain JavaScript in src/js/fxa-sitemap-live.js and read only public URLs on mozilla.github.io and raw.githubusercontent.com. src/plugins/fxa-sitemap-screens.js indexes those links into static/fxa-sitemap-data/screens.json at build time so previews work across pages.