Skip to main content

Developer blog

A Real-Browser UX Audit of movahedi.ca: 11 Findings, Two Deploys

A systematic audit of movahedi.ca in a desktop browser surfaced 11 UX issues: an English-only nav on French pages, a missing language toggle, and an internal marker leaking into a published dataset, plus eight minors. How each was fixed and what the evidence actually supported.

ShareLinkedIn
UXweb developmentaccessibilityi18n
On this page
  1. The one that stung
  2. Why audit at all
  3. Major 1: French pages, English nav
  4. Major 2: no way back to English
  5. The minors
  6. What the research actually said
  7. What shipped
  8. The takeaway

Key takeaways

  • A real-browser audit of movahedi.ca found 11 issues: 3 major, 8 minor, desktop viewport. The tooling could not test mobile; we disclose that rather than paper over it.
  • French guide pages rendered an English-only header nav. The layout now auto-localizes on /fr/ routes.
  • French pages had no language toggle. Now a persistent header pill plus a mobile drawer entry, following Canada.ca’s wayfinding conventions.
  • An internal “(unverified)” marker had leaked into the 87-company subprocessor dataset. The row was checked against the source and cleaned.
  • All fixes shipped in two deploys, verified live on desktop.

The one that stung

The published subprocessor dataset covers 87 companies. One row carried an “(unverified)” marker that was never meant to leave the workspace. Readers cannot tell whether such a flag means the data is wrong, the source is weak, or someone forgot to finish.

We checked the row against the source before touching it: Pure Storage, rebranded to Everpure in February 2026 (ticker P). The fact was fine; the marker was stale process residue. The durable fix would be a build step that strips internal annotations from published data, the way builds strip debug flags. That step does not exist yet.

That was one of eleven.

Why audit at all

Big shipping weeks are when small breakage accumulates: every change is reviewed for what it adds, nobody reviews the site as a whole. We ran a systematic pass through the live pages in a real browser, desktop viewport, looking for anything broken, inconsistent, embarrassing. Eleven things qualified.

The audit tooling could not drive a mobile viewport. The gap was closed separately with a 390px localhost audit: no horizontal scrolling, no undersized tap targets. An audit that hides blind spots is marketing, not engineering.

Major 1: French pages, English nav

The data-mapping guide ships in both languages, but its French pages rendered the header navigation in English. For a bilingual Canadian privacy consultant, that is not cosmetic. It tells a Quebec visitor the French version is an afterthought.

The fix was structural: the base layout detects /fr/ routes and applies French chrome by default (explicit props still win where set). Future French pages get the right nav without anyone remembering to set it.

Major 2: no way back to English

A visitor who landed on the French guide from search had no visible path to the English version. The fix: a persistent pill in the header’s top-right showing the target language, plus a mobile drawer entry, following Canada.ca’s wayfinding conventions.

One scope note: the mobile drawer entry shipped with this fix, but the follow-up mobile audit covered scrolling and tap targets, not a dedicated pass over the drawer. Desktop verification was thorough; the drawer on a real phone is less verified, and we say so.

The minors

Eight minors. Six came out of the audit; two surfaced during verification and shipped in the second deploy.

IssueFixSurfaced
Subprocessor names duplicated inside table cellsSplit-then-unique on the display valuesAudit
Akamai showed “None found” in one view and “Partial (4)” in anotherReconciled to “Partial” in every viewAudit
The word “processor” was auto-linkified mid-sentenceAdded to the glossary stop-listAudit
The guide’s confirm button was clickable before the run finishedExplicit generating state; confirm gated on run completionAudit
Nested <main> landmarks across 48 pagesFlattened to one landmark per page, site-wideAudit
”1.38M” in one place, “1.4M” in anotherStandardized on 1,382,017 model parametersAudit
”No map yet” workspace copy confused first-time usersClarified to mention the confirm step, in EN and FRVerification
Table A showed “None found” for login-walled sourcesNow reads “Login-walled” where the data supports itVerification

Guided mode had a state hole: the button stayed enabled while generation was still running, so a fast user could confirm an incomplete map. The fix gates the button on run completion with an explicit generating state.

What the research actually said

Per standing practice, design decisions were checked against Reddit’s design communities first. Honestly: targeted searches of r/web_design, r/UI_Design, and r/Frontend surfaced no directly relevant threads through the text backend. The decisions were instead grounded in the closest genuine sources actually read: Canada.ca’s “Wayfinding” study, the GNWT multilingualism standard, a GitHub Community discussion on gating actions until generation completes, Checkly’s auto-waiting docs, and a dev.to piece on deduping display values. A thin evidence base, stated plainly, beats a fabricated one.

What shipped

Two deploys. The first (e8a6ffff) carried the audit fixes. Verification surfaced three follow-ups: the “No map yet” copy in English, the same copy in French, and the “Login-walled” label. Those shipped in the second deploy (be97cef2). Both verified live on desktop; changed URLs were submitted to IndexNow.

The takeaway

Two things are still open. The drawer on a real phone has not had its dedicated verification pass. The build step that strips internal annotations from published data does not exist yet. Both are on the list for the next audit, which is the point: the report should end with the work that remains, not a moral about the work that is done.