Design that works
for everyone.

Senior UX/UI designer in Copenhagen. 8 years of research, workshops, and tested interfaces, built on the belief that accessible design is simply good design.

TIA/Sapiens

Enterprise SaaS | Insurtech

NDA

These projects are under NDA. Contact me if you would like to know more about my work.

The risk assessment platform's case dashboard, deliberately blurred: a tab bar across my cases, team cases and all cases, a row of four summary tiles, and a table of open cases carrying priority, type, case ID, customer, assignee and due date. The product is under NDA, so the image shows the layout and density of the interface rather than its content.

Risk assessment platform

End-to-end ownership of the company's first product of its kind, reworking how risk experts handle cases.

The product gives risk experts one place to assess a case. What they need in order to say yes or no sits across documents, systems and colleagues and arrives in no fixed order, so the flow tolerates an incomplete case instead of demanding a fixed sequence.

I owned it end to end: interviews with risk experts, domain specialists and engineers across six clients and several markets, sketches tested with stakeholders, then annotated prototypes with the rules written down and the open questions listed for engineering and QA.

DiscoveryPrototypingEnterprise SaaS
A customer record in the workbench. A dark left rail lists a household with its members and a warning that seven data fields are missing, beside a Profiling panel of claim and premium figures and a Policies table of active policies.

Customer Service Workbench

A case-creation flow for customer service reps: a modal that adapts its fields to what kind of case is being opened, from a First Notice of Loss to an enterprise policy request.

Case CreationEnterprise SaaSPublic

Product creation platform

A high-complexity product creation platform handling business rules, versioning, and traceability.

Design SystemsPrototypingEnterprise SaaS

Management platform

Authorization, server status and communication services across multiple enterprise user types. The patterns, components and front-end IA defined here were reused by the other products.

End-to-end DesignDesign SystemsComponent LibraryFront-end IAEnterprise SaaS

Accessibility SME

Embedded WCAG 2.2 AA as a system-level practice: wrote internal strategy and coached teams to build compliance into their process.

AccessibilityWCAG 2.2 AACoaching

UI / Design system

Contributed to the enterprise design system at Tia / Sapiens: new React components and features, documented behaviour, patterns and guidelines, tested alongside front-end developers. Same work at Udviklings- og Forenklingsstyrelsen, there on Bootstrap or built from the ground up.

Design SystemsReactDocumentation

Danish Ministry of Taxation

The commute deduction calculator's first step, asking for the deduction period and the citizen's home and work addresses.

Kørselsfradrag: commute deduction calculator

Udviklings- og Forenklingsstyrelsen

A self-service calculator citizens use to claim their commute tax deduction, prototyped end-to-end from discovery to developer handoff.

DiscoveryPrototypingPublic Sector

Accessibility: design, testing and compliance

Udviklings- og Forenklingsstyrelsen

Tested every page under the Danish Tax Ministry umbrella with a colleague, reporting on accessibility compliance across the ministry's governing agencies, and served as the accessibility voice reviewing components for the shared component library.

AccessibilityWCAGComponent LibraryPublic Sector

Rigshospitalet | Student work

Helping healthcare professionals make sense of Sundhedsplatformen

Trained nurses on Sundhedsplatformen and analysed doctors' workflows to cut down time spent on patient data entry, freeing up more face-to-face time with patients.

ResearchTrainingWorkflow Analysis

Building a design system

Turning this portfolio into a design system

Audited this site's own brutalist visual language (flat color blocks, thick borders, hard offset shadows, the Archivo and Atkinson Hyperlegible type system) and formalized it into a documented token scale and a reusable React component library.

Design SystemsDesign TokensReact

Research runs through the process, not just before it.

Research

Interviews, diary studies, analytics, or a prototype built to test a hypothesis. Whichever answers the question fastest.

Workshops

Co-design sessions that align teams and surface constraints no brief ever mentions.

Prototyping

From sketch to clickable prototype at the fidelity that answers the specific question.

Testing

Moderated, unmoderated, heuristic. Never launch without evidence.

Accessibility

WCAG audit, assistive tech, real users with disabilities. Built in, not bolted on.

Built for everyone, by design.

WCAG 2.2 AA

Colour isn't the only signal

Every piece of information conveyed through colour also exists in text, pattern, or shape. Contrast is a baseline, not a finish line.

Keyboard

If you can't tab through it, it's broken

Every interactive element has a visible focus state. Skip links, logical tab order: not extras, but the interface itself.

Screen readers

Names that describe, not label

Accessible names, landmark regions, live announcements. Tested with NVDA, JAWS, and VoiceOver before any prototype is done.

Real users

Disability is context, not edge case

People with disabilities are included in every research round: not a separate study, but the same study as everyone else.

WCAG 2.2 AA

Accessibility status: full audit completed, 23 issues fixed

Audited & fixed 4 August 2026 · re-audited 14 & 17 August 2026 against NN/g's 10 usability heuristics · manual + automated

This page was tested against WCAG 2.2: markup, ARIA, color contrast (including focus indicators against their actual backgrounds), keyboard navigation, target sizes, and reduced-motion behaviour. A second pass measured the page against Nielsen Norman Group's 10 usability heuristics and found seven more issues, including a heading that screen readers announced as one run-together word, a case card whose white-on-orange text failed contrast, and every section below the hero rendering blank without JavaScript. 23 real issues found and fixed in total. Every text pairing was then measured against its own background: the lowest ratio on the page is 4.9:1. Nothing here is a claim without a receipt.

What was tested
Markup & ARIA Colour contrast Focus visibility Keyboard navigation Target size Reduced motion Predictability Reflow
Full audit & fix report (23 items)
  1. WCAG 1.4.3 – Contrast (Minimum)The same orange failed again, this time as label text in the case dialog. The previous pass fixed the orange card by changing its text colour, but #FF6B00 was still used as text on white for the "Learning" label – the same 2.86:1 the report had already documented as insufficient. The fix had only been applied in one place. Added a separate text-safe value (#B34B00, 5.35:1) so the bright orange is only ever a background.
  2. WCAG 1.4.3 – Contrast (Minimum)The orange case card shipped white text at 2.86:1 and failed. The card was added after the previous audit and inherited the white text colour from the darker cards, but orange (#FF6B00) is too light to carry white type: 2.86:1 against a 4.5:1 requirement. Caught by re-measuring all nine cards rather than trusting the earlier report. Switched to black text, which measures 7.43:1 on the same background. The card was later removed in a subsequent revision of the case set, so this particular colour no longer appears on the page.
  3. Robustness · no-JavaScript renderingEvery section below the hero was hidden until JavaScript revealed it. 26 elements defaulted to opacity:0 in CSS, with only an IntersectionObserver able to show them. Without JavaScript, in print, and in renderers where the observer never runs, the page below the hero rendered blank. Verified: elements sitting inside the viewport stayed invisible whenever the observer did not fire. Content is now visible by default, and the hidden starting state is applied only once JavaScript confirms it can run. Print and reduced-motion force full visibility.
  4. Screen-reader text · 1.3.1The main heading was announced as one run-together word. The headline was split across two lines with a <br> and no surrounding space. A line break inserts no text-level space, so NVDA, JAWS and VoiceOver read "Design that worksfor everyone" instead of "Design that works for everyone". Verified directly in-browser against the element's text content. Fixed with an explicit space before the break, in both language versions.
  5. WCAG 3.2.4 – Consistent IdentificationIdentical-looking cards behaved in four different ways. Some opened a dialog with two buttons, some with one, some expanded an inline panel, and some were external links styled as buttons — with no visual difference to predict the outcome before clicking. Measured against NN/g heuristic 4 (Consistency and Standards). Every card now opens the same dialog through the same kind of control.
  6. WCAG 2.5.3 – Label in NameThe language switcher was labelled with a bare chevron and a hidden name that did not match it. The control showed only "English ⌄" while its accessible name read "Change language, current: English" — so speech-input users saying the visible text would not reliably hit the button. The control now carries a visible "Language:" label and the hidden name is gone, making the accessible name exactly the visible text.
  7. WCAG 3.2.5 – Change on RequestExternal links sat among the card buttons with no new-tab warning. "LinkedIn demo" and "Live design system" looked exactly like the buttons that open a dialog, but left the page instead. Both now live inside their case dialog as real links, each carrying a visible "(opens in a new tab)" note that screen readers also announce.
  8. WCAG 2.4.3 – Focus OrderThe dialog's focus trap counted only buttons, not links. Once the external link moved inside the dialog, the existing Tab handling would have miscalculated the first and last focusable element and let keyboard focus escape the dialog. The trap now counts buttons and links alike, and skips anything hidden.
  9. WCAG 1.4.11 · 2.4.7 – Non-text Contrast / Focus VisibleFocus ring was invisible on 2 of 4 case-card colours. The keyboard focus outline used the same blue as the brand palette: on the blue card it matched the background exactly (1.00:1 contrast), and on the green card the two colours turned out to have near-identical luminance (also 1.00:1), despite looking different. Fixed with a white+black double ring that stays visible against every card colour.
  10. WCAG 2.4.11 – Focus Not Obscured (new in 2.2)The fixed nav bar could completely cover a keyboard-focused button. Confirmed live: a "View" button scrolled to by Tab landed entirely underneath the opaque nav. Fixed by giving every focusable element enough scroll margin to clear the nav.
  11. Predictability / 4.1.2The "Live design system" link also silently opened the case-study modal. It shared a CSS class with the modal-trigger buttons, so activating it opened a new tab and a dialog at the same time. Fixed by scoping the modal behaviour to buttons only.
  12. WCAG 1.4.3 · 1.4.11 – Contrast (Minimum)The "200+" stat relied on a non-standard text-stroke to survive. The underlying text colour (yellow on white) was 1.40:1, nowhere near the 3:1 minimum, and the stroke workaround isn't guaranteed to render everywhere. Replaced with a solid yellow chip and black text (12.41:1). The stat itself was later removed entirely, in the same cleanup that cut imprecise numbers from the page.
  13. WCAG 1.4.3 – Contrast (Minimum)Case-card numbers, client names, and descriptions were dimmed with opacity, failing contrast on 3 of 4 card colours (as low as 1.91:1 against the red card). Worst case: "Write-up coming soon." (the only visible content on 3 case studies) failed contrast entirely. Removed the opacity; hierarchy now comes from type scale alone, and every combination passes 4.5:1+.
  14. WCAG 1.4.3 – Contrast (Minimum)Footer copyright and the "Work in progress" door label were too faint (#999 → 2.85:1, #bbb → 1.92:1, both against white). Darkened both to a value already used elsewhere on the page (5.74:1).
  15. WCAG 2.3.3 intentReduced-motion preference didn't cover smooth scrolling. The page correctly zeroed out animations for users with a reduced-motion preference, but anchor-link clicks still smooth-scrolled regardless. Fixed.
  16. WCAG 2.2.2 – Pause, Stop, HideTwo decorative animations (the door glow and the footer pulse) looped forever with no way to stop them. Capped both to a single play-through on load instead of an infinite loop.
  17. WCAG 2.5.8 – Target Size, new in 2.2The logo's clickable area was 22px tall, 2px short of the 24×24px minimum. Added padding to bring it to 38px.
  18. WCAG 2.4.7 – Focus VisibleThe case-study dialog had no visible focus indicator of its own when it took focus on open. Added an explicit, high-contrast focus outline.
  19. WCAG 1.3.1 – Info and RelationshipsThe "Core disciplines" list wasn't marked up as a list for assistive technology, unlike every other grid on the page. Added the matching list/listitem roles. This section is now titled "Research runs through the process, not just before it.", but the list/listitem roles are still in place.
  20. Reflow / keyboard reachAll primary navigation disappeared below 900px width with no replacement, affecting phones, tablets, and anyone zoomed past ~140%. Built an accessible menu button (keyboard- and screen-reader-operable, closes on Escape or link selection) so navigation is never fully unreachable.
  21. Best practice, 3.2.5-adjacentThe external "Live design system" link gave no warning before opening a new tab. Added an accessible-name hint announcing the new tab.
  22. RobustnessThe skip-to-content link had no explicit focus style of its own, relying on the browser default against its own black background. Gave it an explicit, verified-contrast outline.
  23. WCAG 1.4.12 stress-testedThe hero's spacing below the nav was a hardcoded guess (57px) that drifted out of sync under WCAG's text-spacing stress test (real nav height: up to 73px). Now measured from the actual rendered nav on load and resize.

I'm available for the right project.

E-mail: [email protected]

or message me on LinkedIn (opens in a new tab)