Writing

I write about the problems I solve.

UX design, visual design, design systems and frontend architecture — and the space between design and engineering.

Angular · Architecture

Migrating a Large Angular App from Material to PrimeNG

How to migrate a multi-module Angular workspace one screen at a time while continuing product development.

Read article →

Design Systems · Theming

Dark Mode Is a Design System, Not a CSS Toggle

Dark mode as a semantic-token and design-system problem rather than simply a CSS switch.

Read article →

SCSS · Architecture

A 7-1 SCSS Architecture That Survives Multiple Teams

An approach to SCSS architecture based on scope, ownership, dependency direction and blast radius.

Read article →

UX Design · Enterprise

Designing Data Tables That Don't Overwhelm Users

Design principles for dense enterprise tables used in healthcare, workforce and distribution applications.

Read article →

UX Design · Search

Building a Global Search That Doesn't Feel Bolted On

Cross-module search is easy to ship and easy to ship badly — the difference is almost entirely in what happens after the keystroke.

Read article →

UX Design · Scheduling

FullCalendar in Production: Lessons from Two Enterprise Rosters

What actually breaks when a calendar library meets real shift patterns, permissions and print views.

Read article →

Architecture · Design Systems

The Case for a Thin Wrapper Layer Around Every UI Library

Calling a third-party component library directly from feature code feels efficient right up until the library needs to change.

Read article →

UX Design · Enterprise

Designing Empty States That Actually Help Users

An empty screen shows up constantly in real usage — first run, cleared filters, zero results — and deserves real design attention.

Read article →

UX Design · Accessibility

Accessibility Isn't a Checklist: Keyboard Navigation in Dense UIs

Passing an automated audit and being genuinely usable without a mouse are two different bars.

Read article →

UX Design · Data Integrity

Change-Log Audit Trails: Designing for "Who Changed What, When"

In systems where a wrong number has real cost, the audit trail is the feature that lets people trust the data at all.

Read article →

UX Design · Enterprise

Document Management UX: Keeping Files Attached to the Right Context

A file repository that isn't tied cleanly to the record it belongs to just becomes another inbox nobody trusts.

Read article →

Angular · Theming

PrimeUIX Theming in Practice: Customizing a Design System Without Forking It

A brand-accurate PrimeNG theme is a token exercise, not a component-override exercise.

Read article →

UX Design · Enterprise

Print Views Are a Different UI: Designing for Paper in a Web App

Wrapping the live screen in @media print looks like it should work. On a real roster or report, it almost never does.

Read article →

Architecture · Design Systems

What "Reusable Component" Actually Means in a 6-Module Enterprise App

A component used in three places isn't automatically reusable — what matters is how it handles the request nobody anticipated.

Read article →

Visual Design · Systems

Spacing Systems: Why "It Looks Off" Is Almost Always a Grid Problem

Nobody can point to what's wrong, but everyone feels it. Nine times out of ten, it's inconsistent spacing.

Read article →

Visual Design · Dashboards

Typography Hierarchy in Dashboards: Guiding the Eye Before the User Reads a Word

Before anyone reads a label, size and weight have already told them what matters most on the screen.

Read article →

Visual Design · Systems

Color as Function, Not Decoration: Building a Palette Enterprise Software Can Trust

In a tool people use eight hours a day, every color needs a job — or users stop trusting what it's telling them.

Read article →

UX Design · Forms

The Anatomy of a Good Form: Labels, Errors and Field Order That Reduce Mistakes

Most form mistakes aren't user error — they're a form that never told the user what it needed until too late.

Read article →

Visual Design · Motion

Micro-Interactions That Earn Their Keep (and the Ones That Don't)

Motion should answer a question the user just asked. If it isn't, it's probably just noise.

Read article →

UX Design · Behavior

Designing for the Second Glance: What Users Actually Scan vs. Read

Almost nobody reads an enterprise screen top to bottom. They scan first, and read only once they've found the thing that matters.

Read article →

Visual Design · Systems

Icon Systems: Consistency, Sizing and When Text Beats an Icon Entirely

An icon that saves space but costs comprehension isn't a shortcut — it's a puzzle the user has to solve every time.

Read article →

UX Design · Layout

Card vs. Table vs. List: Choosing the Right Layout for the Data You Have

The layout question comes down to how many attributes users need to compare across items at once.

Read article →

Visual Design · Fundamentals

Contrast, Weight and Whitespace: The Three Levers of Visual Hierarchy

Color is the lever most designers reach for first — and often the least reliable one.

Read article →

Visual Design · Components

Designing a Button System: Primary, Secondary and the Trap of Too Many Variants

Every button variant added past the fourth or fifth is one nobody will use consistently.

Read article →

UX Design · Forms

Error & Validation UX: Writing Messages That Help Instead of Blame

"Invalid input" tells a user something is wrong and nothing else. Good error UX is a second chance disguised as a message.

Read article →

Visual Design · Performance

Perceived Performance: Making an App Feel Fast Before It Actually Is

Skeleton screens, optimistic updates and staged loading change how fast an interface feels, independent of actual load time.

Read article →

Design Systems · Tokens

Design Tokens at Scale: Theming Without Duplicating Every Style

A token architecture that lets a design system support multiple themes and brands without duplicating styles per surface.

Read article →

UX Design · Systems

Toasts, Banners and Alerts: Designing a Notification System With Rules

Toasts, banners, inline alerts and modals all compete for the same job. A coherent system assigns each severity to one surface.

Read article →

UX Design · Enterprise

Multi-Tenant UI: Navigation, Branding and Permissions in One Codebase

Every tenant thinks they're using their own product. The UI's job is to make that true without forking anything.

Read article →

UX Design · Accessibility

Accessibility Beyond Keyboard Nav: Live Regions, Focus and ARIA That Works

Keyboard support is table stakes. Real accessibility needs live regions, focus management, and ARIA that matches the screen.

Read article →

UX Design · Enterprise

Onboarding UX: Getting a New User to First Value, Not Just Through a Tour

A product tour explains the interface. Good onboarding gets a new user to their first meaningful result.

Read article →