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
| Page | Covers |
|---|---|
| Entry modes | Who sends users here, and the URL parameters that decide how a screen behaves |
| Sign in | Password, second factors, exceptions, email-link landings |
| Sign up | Create account and confirm |
| Reset password | Code, second factor, recovery key, new password |
| OAuth relying party | /authorization, branding, exits |
| Google / Apple | Third-party sign-in round trip |
| Extra setup steps | Two-step setup, recovery key, set password, welcome |
| Pairing / CAD | Connect another device, pairing v1 and v2 |
| Settings | The account page and its sub-pages |
| Emails | Which 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.
| Route | Flow page | Notes |
|---|---|---|
/ | Sign in | Email-first entry |
/oauth | OAuth relying party | Email-first with RP context |
/authorization | OAuth relying party | |
/signin | Sign in | |
/oauth/signin | Sign in | |
/force_auth | Sign in | |
/oauth/force_auth | Sign in | |
/signin_passkey_fallback | Sign in | |
/signin_passwordless_code | Sign in | |
/oauth/signin_passwordless_code | Sign in | |
/signin_token_code | Sign in | |
/signin_totp_code | Sign in | |
/signin_recovery_choice | Sign in | |
/signin_recovery_code | Sign in | |
/signin_recovery_phone | Sign in | |
/signin_unblock | Sign in | |
/signin_bounced | Sign in | |
/complete_signin | Sign in | Email link |
/signin_confirmed | Sign in | |
/signin_verified | Sign in | |
/report_signin | Sign in | Email link |
/signin_reported | Sign in | |
/signin_permissions | OAuth relying party | Legacy Backbone |
/confirm_signin | Sign in | Legacy Backbone |
/confirm | Sign in | Legacy Backbone |
/signup | Sign up | |
/oauth/signup | Sign up | |
/confirm_signup_code | Sign up | |
/signup_confirmed | Sign up | |
/signup_verified | Sign up | |
/signup_confirmed_sync | Sign up | |
/primary_email_verified | Sign up | |
/signup_permissions | OAuth relying party | Legacy Backbone |
/verify_email | Sign up | Legacy Backbone, email link |
/verify_primary_email | Sign up | Legacy Backbone |
/verify_secondary_email | Settings | Legacy Backbone |
/secondary_email_verified | Settings | Legacy Backbone |
/choose_what_to_sync | Sign up | Legacy Backbone |
/would_you_like_to_sync | Sign up | Legacy Backbone |
/reset_password | Reset password | |
/confirm_reset_password | Reset password | |
/confirm_totp_reset_password | Reset password | |
/reset_password_totp_recovery_choice | Reset password | |
/confirm_backup_code_reset_password | Reset password | |
/reset_password_recovery_phone | Reset password | |
/account_recovery_confirm_key | Reset password | |
/complete_reset_password | Reset password | Email link |
/account_recovery_reset_password | Reset password | |
/reset_password_verified | Reset password | |
/reset_password_with_recovery_key_verified | Reset password | |
/post_verify/third_party_auth/callback | Google / Apple | |
/post_verify/third_party_auth/set_password | Google / Apple | |
/post_verify/set_password | Extra setup steps | |
/post_verify/service_welcome | Extra setup steps | |
/inline_totp_setup | Extra setup steps | |
/inline_recovery_setup | Extra setup steps | |
/inline_recovery_key_setup | Extra setup steps | |
/post_verify/password/force_password_change | Extra setup steps | Legacy Backbone |
/post_verify/finish_account_setup/set_password | Extra setup steps | Legacy Backbone, email link |
/post_verify/newsletters/add_newsletters | Extra setup steps | Legacy Backbone |
/post_verify/secondary_email/add_secondary_email | Extra setup steps | Legacy Backbone |
/post_verify/secondary_email/confirm_secondary_email | Extra setup steps | Legacy Backbone |
/post_verify/secondary_email/verified_secondary_email | Extra setup steps | Legacy Backbone |
/connect_another_device | Pairing / CAD | Email link |
/pair | Pairing / CAD | |
/pair/unsupported | Pairing / CAD | |
/pair/failure | Pairing / CAD | |
/pair/success | Pairing / CAD | |
/pair/auth/allow | Pairing / CAD | v1 |
/pair/auth/totp | Pairing / CAD | v1 |
/pair/auth/wait_for_supp | Pairing / CAD | v1 |
/pair/auth/complete | Pairing / CAD | v1 |
/pair/supp | Pairing / CAD | v1 |
/pair/supp/allow | Pairing / CAD | v1 |
/pair/supp/wait_for_auth | Pairing / CAD | v1 |
/pair/supp/complete | Pairing / CAD | v1 |
/pair/authority/scan_qr | Pairing / CAD | v2 |
/pair/authority/continue_on_mobile | Pairing / CAD | v2 |
/pair/authority/approve_signin | Pairing / CAD | v2 |
/pair/authority/sync_success | Pairing / CAD | v2 |
/pair/authority/timeout_and_cancel | Pairing / CAD | v2 |
/pair/authority/download_firefox | Pairing / CAD | v2 |
/pair/supplicant/ready_to_scan | Pairing / CAD | v2 |
/pair/supplicant/connect_this_device | Pairing / CAD | v2 |
/pair/supplicant/approve_signin | Pairing / CAD | v2 |
/pair/supplicant/sync_success | Pairing / CAD | v2 |
/pair/supplicant/timeout_and_cancel | Pairing / CAD | v2 |
/pair/supplicant/download_firefox | Pairing / CAD | v2 |
/oauth/success/:clientId | Pairing / CAD | |
/post_verify/cad_qr/get_started | Pairing / CAD | Legacy Backbone |
/post_verify/cad_qr/ready_to_scan | Pairing / CAD | Legacy Backbone |
/post_verify/cad_qr/scan_code | Pairing / CAD | Legacy Backbone |
/post_verify/cad_qr/connected | Pairing / CAD | Legacy Backbone |
/poc_deep_link | Pairing / CAD | Proof of concept |
/poc_pair_init | Pairing / CAD | Proof of concept |
/poc_pair_start | Pairing / CAD | Proof of concept |
/settings | Settings | |
/settings/display_name | Settings | |
/settings/avatar | Settings | |
/settings/avatar/change | Settings | |
/settings/emails | Settings | |
/settings/emails/verify | Settings | |
/settings/change_password | Settings | |
/settings/create_password | Settings | |
/settings/passkeys/add | Settings | |
/settings/account_recovery | Settings | |
/settings/two_step_authentication | Settings | |
/settings/two_step_authentication/change | Settings | |
/settings/two_step_authentication/replace_codes | Settings | |
/settings/recovery_phone/setup | Settings | |
/settings/recovery_phone/remove | Settings | |
/settings/recent_activity | Settings | |
/settings/clients | Settings | |
/settings/delete_account | Settings | |
/security_events | Settings | Legacy Backbone |
/subscriptions | OAuth relying party | Legacy redirect to Subscription Platform |
/clear | Entry modes | Utility |
/cookies_disabled | Entry modes | Utility |
/web_channel_example | Entry modes | Development only |
/update_firefox | Entry modes | Server-rendered |
/download_firefox | Entry modes | Server redirect |
/.well-known/change-password | Settings | Server 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:
- For a new route, find its component in
packages/fxa-settings/src/components/App/index.tsx(orSettings/index.tsxfor a Settings sub-page) and its story in the published Storybook, where story titles underPages/match the component names. - 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.
- For a removed route, delete its rows and any box.
- Preview with
yarn startuntil 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.