Case 01 · Enterprise Platform Design System · Architecture · Hand-off

OneStop 2.0 — architecting an entire regulatory platform.

For the Alberta Energy Regulator I did more than design screens — I architected the information model, designed every flow across 60+ regulatory journeys, built and owned the Storybook design system, and ran the developer hand-off as product owner. A single, governed, WCAG-conformant platform for two very different audiences.

RoleSr UX Consultant · DS Owner · Product Owner
TimelineSep 2024 — Jan 2026
ScopeArchitecture → Screens → Hand-off
StandardWCAG 2.1 AA
1S OneStop 2.0 Alberta Energy Regulator ▦ J. Doe ▾
Operator workspace › Active applications

Active applications

+ New application
All · 248In reviewAction requiredDraft
🔍 Search by ID, licensee or project… Type ▾Status ▾Date ▾
Application IDTypeLicenseeSubmittedStatus
WL-04821Water Term LicenceBow River Energy Ltd.12 Jan 2026In review
TD-19330Temporary DiversionNorthgate Resources09 Jan 2026Approved
AM-77210AmendmentBow River Energy Ltd.07 Jan 2026Action required
WT-66104Water TransferPrairie Hydro Inc.05 Jan 2026Pending docs
RN-50194RenewalFoothills Water Co.04 Jan 2026Draft
1–5 of 248123

OneStop 2.0 operator dashboard — reconstructed from the shared component library, tokens and grid I built.

Context

Every energy & water application in Alberta runs through one system.

The Alberta Energy Regulator (AER) governs energy and water development across the province. OneStop is the digital system industry uses to apply for, amend, renew and cancel licences — and the system AER staff use to review and adjudicate them.

OneStop 2.0 was the modernization of that platform: one responsive web experience serving two fundamentally different audiences — external operators submitting complex regulatory applications, and internal AER staff working through high-volume review queues.

By the time I joined, the product had grown organically for years. The result was a platform that worked, but didn't cohere: every flow was its own dialect of the same language.

The challenge

Complexity, multiplied across 60+ flows.

This wasn't a visual refresh. It was untangling a regulatory system where every inconsistency carried compliance risk.

Fragmented patterns

The same table, form, modal and wizard were rebuilt dozens of times — each subtly different, none documented.

Two audiences, one app

Operators need guidance and forgiveness; reviewers need density and speed. Both lived in the same screens.

Regulatory weight

Policy, legislation and water-volume math sat behind every field. A mislabelled input is a compliance problem.

Slow to ship

With no shared foundation, a small policy change rippled unpredictably and cost weeks of rebuild.

Accessibility drift

Focus order, labels and contrast varied flow-to-flow — a real barrier for a public-facing government service.

No source of truth

Design lived in scattered files; engineering re-interpreted each one. Drift was guaranteed.

My role

Four hats, one accountable owner.

I was brought in as a senior consultant and ended up owning the spine of the product. Across the engagement I wore four hats — and the value was in connecting them.

A

Information architect

Modelled the platform's structure — the application/submission/authorization model, navigation and the dynamic-forms engine that powers every flow.

B

Product designer

Designed the end-to-end experience for all 60+ flows and every screen state — applicant onboarding, multi-step wizards, review queues, bulk upload, errors and edge cases.

C

Design-system owner

Built and maintained the Storybook design system and tokens; defined a contribution model so teams extend it without fragmenting it.

D

Product owner & dev partner

Managed the backlog and roadmap, wrote the specs, and ran the developer hand-off — pairing with engineering to ship pixel- and policy-accurate.

Research & analysis

I started by mapping the system as it really worked.

Before drawing anything, I built an evidence base — interviewing both audiences, auditing every flow, and translating policy into design constraints.

What I did

  • Stakeholder & user interviews with external operators and internal AER reviewers to understand goals, mental models and pain.
  • Workflow & task analysis of each regulatory journey — where work stalled, looped or required off-system workarounds.
  • Heuristic & content audit of all 60+ flows, scoring usability issues by severity and frequency.
  • Policy translation — sitting with regulatory SMEs to convert legislation into validation rules, field logic and copy.
  • Service blueprints & journey maps connecting front-stage screens to back-stage review and decisioning.
Heuristic audit · severity log
SevFlowIssueType
3Water Term LicenceVolume units inconsistent across stepsCritical
2AmendmentUnclear what a change replacesMajor
2Pay / SubmitError message doesn't say whyMajor
1Bulk uploadNo progress feedback on large filesMinor
1Review queueFilters reset on navigationMinor

The audit surfaced one pattern again and again: the system asked users to hold complexity in their heads that the interface should have carried for them.

Architecture

One model underneath everything.

The breakthrough was treating OneStop as a layered system — a single foundation that every regulatory flow draws from, rather than 60 standalone products.

Products
External operator portalInternal staff consoleReporting & analytics
Flows · 60+
Water Term LicenceTemporary DiversionAmendmentRenewalCancellationWater TransferMining & landReclamation (RIE)Bulk upload
Patterns
Application dashboardDynamic multi-step formReview queueSummary & disclaimerDocument uploadConfirmation
Components · 180+
Data tableFilters & searchStepperDrawerModalInputsDate pickerTabsAlertsUpload
Foundations
Design tokens12-col gridSpacing scaleType scale (Selawik)Colour & contrastIconography

Information architecture

I restructured navigation around what people came to do — apply, track, review — instead of around internal org structure.

Dashboard
  • Active applications
  • Submissions in progress
  • Authorizations
  • Action required
  • Notifications
Apply
  • Water Term Licence
  • Temporary Diversion
  • Amendment
  • Renewal / Cancellation
  • Water Transfer
  • Bulk upload
Track & manage
  • Application detail
  • General summary
  • Disclaimers
  • Documents
  • Correspondence
Staff console
  • Review queue
  • Assignment & routing
  • Decision & conditions
  • Reports
  • Admin

At the centre sat a dynamic-forms engine: every regulatory flow is configured from the same form primitives, validation framework and review pattern. New legislation becomes new configuration — not a new codebase.

The screens

Designing the hardest flow first.

The Water Term Licence is one of the most complex applications — multi-step, document-heavy, with real water-volume math. If the system worked here, it would work everywhere.

1S OneStop 2.0▦ J. Doe ▾
Apply › Water Term Licence › Step 3 of 6 — Water source & diversion
Applicant Project 3 Water source 4 Diversion 5 Documents 6 Review
Water source
Surface water — river
Bow River
51.0447, -114.0719
Requested allocation
— m³ / year
⚠ Enter a volume in m³ to continue. Daily rate is calculated for you.
Industrial — water management
Select dates
‹ Back
Save draftContinue ›

Multi-step wizard with a persistent stepper, inline validation, calculated fields, and a forgiving “save draft” at every step — so a 40-minute application is never lost.

Problem solving in the details

  • Calculated fields — the system derives daily rates from annual volume so operators never do regulatory math by hand.
  • Forgiving by default — every step autosaves; nothing is lost on timeout, a top complaint in the audit.
  • Explain, don't just reject — error messages say what's wrong and what to do, sourced from policy.
  • Review before submit — a single summary + disclaimer screen lets operators verify everything before it becomes a legal filing.
Bulk upload · supporting documents
✓  Hydrology_report_2026.pdf Uploaded
✓  Site_plan_BowRiver.dwg Uploaded
⤓  Water_balance.xlsx Uploading… 64%
+  Drag files or browse
PDF, DWG, XLSX · up to 50 MB each
The other audience

A dense, fast console for AER reviewers.

The same components, retuned for density and speed — reviewers triage queues, not fill in forms.

1S OneStop 2.0 Staff consoleA. Reviewer ▾

My assignments

Bulk assignDecide
🔍 Filter 12 applications…Priority ▾SLA ▾
IDTypeLicenseeSLAStageStatus
WL-04821Water TermBow River Energy2 daysTechnical reviewIn review
AM-77210AmendmentBow River Energy5 daysCompletenessInfo requested
WT-66104TransferPrairie Hydro9 daysDecisionRecommend approve
RN-50194RenewalFoothills Water12 daysAssignedNot started
1–4 of 12123

Same table, drawer, filter and tag components as the operator portal — composed for triage. One system, two experiences.

The design system

One governed source of truth.

Tokens at the base, 180+ documented components above, and a contribution model so the system stays coherent as it grows.

Colour tokens

TokenValueRoleContrast
color.brand.navy#18496DHeaders, primary chromeAA · 8.6:1
color.action.primary#066EA8Links, active, focusAA · 4.9:1
color.action.submit#D01D26Submit / destructiveAA · 5.3:1
color.status.success#639144Approved / completeAA · 4.6:1
color.surface.info#E6F1F6Selected rows, info
color.text.default#243B4DBody copyAA · 11.8:1

Type scale · Selawik

Heading 128 / 36 · Semibold
Heading 222 / 30 · Semibold
Subtitle18 / 26 · Semibold
Body — regulatory copy15 / 24 · Regular
Caption & table meta13 / 18 · Regular

Spacing scale · 4-pt base

space.1 — 4px
space.2 — 8px
space.4 — 16px
space.6 — 24px
space.8 — 32px
space.12 — 48px

Component library · the inventory I built & owned

Data tableColumn searchFilter & sorterPaginationTabsDrawerModal windowPop-confirmDropdown / SelectDate pickerInput fieldsRadio & checkboxAlertsNotificationsInfo cardMessage boxTooltipsTagsUploadStepperBreadcrumbHeader & footerNavigation barAvatar & menu

Owned like a product

  • Backlog & roadmap — I prioritised system work alongside feature delivery and reported on it.
  • Contribution model — a clear path for teams to propose, review and merge new patterns without forking the system.
  • Versioning & docs — every component documented with usage, states, do/don't and a11y notes in Storybook.
  • Adoption tracking — measured uptake so the system earned its keep.

Documented states

Every component shipped with its full state matrix — not just the happy path:

DefaultHoverFocusActiveDisabledLoadingErrorEmptyTruncated
Developer hand-off

Designed once, shipped accurately.

Hand-off wasn't throwing files over a wall — it was a shared contract. Tokens, specs and Storybook kept design and code in lock-step.

↤ 320 ↦
Annual volume *
250,000 m³ / year
↕ pad-y 10 · radius 7 · focus ring 3
Input · props & tokens
PropTypeToken
statedefault · focus · error
radius7radius.md
padding10 / 12space.2 / 3
border#066EA8action.primary
focusRing3px / 15%ring.focus
requiredboolean
// design tokens → Style Dictionary → code { "color": { "action": { "primary": "#066EA8" }, "status": { "success": "#639144" } }, "radius": { "md": "7px" }, "space": { "2": "8px", "3": "12px" }, "font": { "body": "Selawik, 15/24" } }

How the hand-off worked

  • Single token source — colour, type, spacing and radius defined once, exported via Style Dictionary to CSS, so design and build can never drift.
  • Storybook as contract — devs built against the same documented components I designed; QA checked against it.
  • Specs & redlines — annotated states, props and a11y requirements for every component.
  • Pairing — I sat with engineering through implementation, reviewing PRs against the system.
Inclusive by default

WCAG 2.1 AA, baked into the system.

For a government regulator, accessibility is a legal and ethical requirement. Rather than retrofit each of 60+ flows, I built conformance into the components themselves — so every flow inherited it.

Contrast tokens

Every text/surface pairing tested to AA before it shipped.

Focus & keyboard

Consistent, visible focus order through every multi-step flow.

Semantic labels

Screen-reader names & descriptions documented per component.

Outcome

From 60 dialects to one language.

60+Regulatory flows unified under one system
180+Documented, accessible components owned
AAWCAG 2.1 conformance built into tokens
1Source of truth for design & engineering

Moderated usability testing on the rebuilt submission flows reduced task errors and streamlined operator workflows. More durably, the system changed how the team works: policy changes now flow through configuration and shared components instead of bespoke rebuilds — so AER ships faster, with accessibility and consistency guaranteed, not hoped for.

When the table, the form and the wizard are solved once — properly, accessibly, and owned — every team gets to spend its energy on the regulation, not the rebuild.
— Reflection on owning OneStop 2.0