Just Air

Tools Used

Figma / Figjam / Google Docs / Teams

Role & Timeline

Product Designer & Researcher

August 2025 - Present

Methods

User Research / Competitive Analysis / Design Audit / Visual design / Prototyping / WCAG Testing/Accessibility Testing

Context & Scope

JustAir is a Michigan-based environmental startup working with Wayne County to deploy over 100 new air-quality monitors across 43 communities.

Their goal is to Bring hyperlocal air data to residents, especially in ALICE (Asset-Limited, Income-Constrained, Employed) and Opportunity Zone neighborhoods — where clean air is often taken for granted everywhere but where it’s needed most.

When I joined the JustAir project, I wasn’t exactly handed a design brief — I was dropped right into a real, living system tracking the air we breathe.

My role was as a UX Consultant for both JustAir and the CMSE 495 Capstone team at Michigan State University. I helped shape how data could be seen, trusted, and understood, instead of just displayed. That meant working with both data scientists and the JustAir dev team to translate complex environmental data into something that actually makes sense to a human at 9 AM with a cup of coffee.

The collaboration had two main goals:

Redesign JustAir’s core dashboard

to improve usability, accessibility, and clarity, making sure users with different visual abilities could navigate and interpret the data equally well.

Design a Wind Analysis Dashboard

a feature centered around an interactive windrose panel that helps users connect air quality data with wind direction and real-time conditions.

Understanding Users & the Market

I started with an exploratory competitive analysis to understand how similar platforms approach these problems. Alongside that, I created two personas using insights gathered from Reddit discussions, Google searches, and community forums, since there wasn’t enough time to run full user interviews. (Reddit users, for better or worse, were very eager to share their opinions.)

I focused on understanding how other companies handle and present their environmental data, and used those observations to outline potential feature sets that align with JustAir’s mission. This process also helped me provide clearer direction and more informed insights to the student team working alongside me.

Competitive Analysis

Community-Driven Transparency

Data-Driven Insights Approach

  • Community validation; raw + corrected data shown

  • Integrations: EPA, Weather Underground, Windy

  • Deep-learning calibration for EPA alignment

Data Presentation Methods

  • Interactive heat maps

  • Dual display (raw vs corrected)

  • QR code instant dashboard

  • Community notes

Strengths / Differentiators

  • Transparency

  • Crowd validation

  • Strong integrations

  • ML calibration

Feature Ideas to Implement

Heatmap Visualization

Interactive color overlays by pollutant/time.

Interpolation modes, sensor points vs contour surfaces, quick toggles.

EPA correction display

Show math that adjusts raw sensor data.

Inline formula, factors (humidity, temp), and doc links.

Community-Driven Transparency

Data-Driven Insights Approach

  • Community validation; raw + corrected data shown

  • Integrations: EPA, Weather Underground, Windy

  • Deep-learning calibration for EPA alignment

Data Presentation Methods

  • Interactive heat maps

  • Dual display (raw vs corrected)

  • QR code instant dashboard

  • Community notes

Strengths / Differentiators

  • Transparency

  • Crowd validation

  • Strong integrations

  • ML calibration

Feature Ideas to Implement

Heatmap Visualization

Interactive color overlays by pollutant/time.

Interpolation modes, sensor points vs contour surfaces, quick toggles.

EPA correction display

Show math that adjusts raw sensor data.

Inline formula, factors (humidity, temp), and doc links.

Government Authority

Data-Driven Insights Approach

  • EPA NowCast algorithm (stable AQI)

  • Primary pollutant highlight

  • QA on all data before release

Data Presentation Methods

  • Central AQI dial

  • Forecast circles & contour maps

  • Embeddable widgets

  • Trend buttons (day/week/month)

Strengths / Differentiators

  • Authority

  • Credibility

  • Regulatory alignment

Feature Ideas to Implement

Central AQI dial

Prominent gauge with category colors.

EPA color steps; large number + category text.

Official NowCast methodology

Recognized AQI calculation.

Docs + validation notes to build trust.

Trend buttons for history

1-tap presets for 24h/7d/30d.

Quick summaries per period (avg/max/threshold hits).

Government Authority

Data-Driven Insights Approach

  • EPA NowCast algorithm (stable AQI)

  • Primary pollutant highlight

  • QA on all data before release

Data Presentation Methods

  • Central AQI dial

  • Forecast circles & contour maps

  • Embeddable widgets

  • Trend buttons (day/week/month)

Strengths / Differentiators

  • Authority

  • Credibility

  • Regulatory alignment

Feature Ideas to Implement

Central AQI dial

Prominent gauge with category colors.

EPA color steps; large number + category text.

Official NowCast methodology

Recognized AQI calculation.

Docs + validation notes to build trust.

Trend buttons for history

1-tap presets for 24h/7d/30d.

Quick summaries per period (avg/max/threshold hits).

Global Health Intelligence

Data-Driven Insights Approach

  • Global coverage (100+ countries)

  • ML-based 7-day forecasting

  • Health correlation engine

Data Presentation Methods

  • Health screens per pollutant

  • Mobile-first UX

  • Global city rankings

  • Wildfire tracking

Strengths / Differentiators

  • Health focus

  • Predictive modeling

  • Strong mobile UI

Feature Ideas to Implement

Health-focused messaging

Convert AQI into specific guidance.

Audience-specific tips (kids, seniors, asthma).

7-day AQI forecast

Predict air quality up to a week ahead.

Combine met inputs and historical patterns.

Comparative city analysis

Compare cities and trends.

Rankings, seasonal patterns, deltas.

Wildfire/event integration

Overlays + smoke transport.

Event dashboards and timelines.

Global Health Intelligence

Data-Driven Insights Approach

  • Global coverage (100+ countries)

  • ML-based 7-day forecasting

  • Health correlation engine

Data Presentation Methods

  • Health screens per pollutant

  • Mobile-first UX

  • Global city rankings

  • Wildfire tracking

Strengths / Differentiators

  • Health focus

  • Predictive modeling

  • Strong mobile UI

Feature Ideas to Implement

Health-focused messaging

Convert AQI into specific guidance.

Audience-specific tips (kids, seniors, asthma).

7-day AQI forecast

Predict air quality up to a week ahead.

Combine met inputs and historical patterns.

Comparative city analysis

Compare cities and trends.

Rankings, seasonal patterns, deltas.

Wildfire/event integration

Overlays + smoke transport.

Event dashboards and timelines.

Customizable Analytics

Data-Driven Insights Approach

  • Dual dashboards (simple vs advanced)

  • Comparative & correlation analytics

  • Data export options

Data Presentation Methods

  • Parameter cards for pollutants

  • Side-by-side comparisons

  • Customizable time ranges

  • Scatter plots & trends

Strengths / Differentiators

  • Flexibility

  • Advanced analytics

  • Power-user control

Feature Ideas to Implement

Dual dashboard interface

Simple for citizens; Advanced for researchers.

Switch complexity without losing context.

WHO/EPA guideline overlays

Reference lines on charts for guideline levels.

Tooltips with local regulation context.

Customizable Analytics

Data-Driven Insights Approach

  • Dual dashboards (simple vs advanced)

  • Comparative & correlation analytics

  • Data export options

Data Presentation Methods

  • Parameter cards for pollutants

  • Side-by-side comparisons

  • Customizable time ranges

  • Scatter plots & trends

Strengths / Differentiators

  • Flexibility

  • Advanced analytics

  • Power-user control

Feature Ideas to Implement

Dual dashboard interface

Simple for citizens; Advanced for researchers.

Switch complexity without losing context.

WHO/EPA guideline overlays

Reference lines on charts for guideline levels.

Tooltips with local regulation context.

Scroll Sideways

Community-Driven Transparency

Data-Driven Insights Approach

  • Community validation; raw + corrected data shown

  • Integrations: EPA, Weather Underground, Windy

  • Deep-learning calibration for EPA alignment

Data Presentation Methods

  • Interactive heat maps

  • Dual display (raw vs corrected)

  • QR code instant dashboard

  • Community notes

Strengths / Differentiators

  • Transparency

  • Crowd validation

  • Strong integrations

  • ML calibration

Feature Ideas to Implement

Heatmap Visualization

Interactive color overlays by pollutant/time.

Interpolation modes, sensor points vs contour surfaces, quick toggles.

EPA correction display

Show math that adjusts raw sensor data.

Inline formula, factors (humidity, temp), and doc links.

Community-Driven Transparency

Data-Driven Insights Approach

  • Community validation; raw + corrected data shown

  • Integrations: EPA, Weather Underground, Windy

  • Deep-learning calibration for EPA alignment

Data Presentation Methods

  • Interactive heat maps

  • Dual display (raw vs corrected)

  • QR code instant dashboard

  • Community notes

Strengths / Differentiators

  • Transparency

  • Crowd validation

  • Strong integrations

  • ML calibration

Feature Ideas to Implement

Heatmap Visualization

Interactive color overlays by pollutant/time.

Interpolation modes, sensor points vs contour surfaces, quick toggles.

EPA correction display

Show math that adjusts raw sensor data.

Inline formula, factors (humidity, temp), and doc links.

Government Authority

Data-Driven Insights Approach

  • EPA NowCast algorithm (stable AQI)

  • Primary pollutant highlight

  • QA on all data before release

Data Presentation Methods

  • Central AQI dial

  • Forecast circles & contour maps

  • Embeddable widgets

  • Trend buttons (day/week/month)

Strengths / Differentiators

  • Authority

  • Credibility

  • Regulatory alignment

Feature Ideas to Implement

Central AQI dial

Prominent gauge with category colors.

EPA color steps; large number + category text.

Official NowCast methodology

Recognized AQI calculation.

Docs + validation notes to build trust.

Trend buttons for history

1-tap presets for 24h/7d/30d.

Quick summaries per period (avg/max/threshold hits).

Government Authority

Data-Driven Insights Approach

  • EPA NowCast algorithm (stable AQI)

  • Primary pollutant highlight

  • QA on all data before release

Data Presentation Methods

  • Central AQI dial

  • Forecast circles & contour maps

  • Embeddable widgets

  • Trend buttons (day/week/month)

Strengths / Differentiators

  • Authority

  • Credibility

  • Regulatory alignment

Feature Ideas to Implement

Central AQI dial

Prominent gauge with category colors.

EPA color steps; large number + category text.

Official NowCast methodology

Recognized AQI calculation.

Docs + validation notes to build trust.

Trend buttons for history

1-tap presets for 24h/7d/30d.

Quick summaries per period (avg/max/threshold hits).

Global Health Intelligence

Data-Driven Insights Approach

  • Global coverage (100+ countries)

  • ML-based 7-day forecasting

  • Health correlation engine

Data Presentation Methods

  • Health screens per pollutant

  • Mobile-first UX

  • Global city rankings

  • Wildfire tracking

Strengths / Differentiators

  • Health focus

  • Predictive modeling

  • Strong mobile UI

Feature Ideas to Implement

Health-focused messaging

Convert AQI into specific guidance.

Audience-specific tips (kids, seniors, asthma).

7-day AQI forecast

Predict air quality up to a week ahead.

Combine met inputs and historical patterns.

Comparative city analysis

Compare cities and trends.

Rankings, seasonal patterns, deltas.

Wildfire/event integration

Overlays + smoke transport.

Event dashboards and timelines.

Global Health Intelligence

Data-Driven Insights Approach

  • Global coverage (100+ countries)

  • ML-based 7-day forecasting

  • Health correlation engine

Data Presentation Methods

  • Health screens per pollutant

  • Mobile-first UX

  • Global city rankings

  • Wildfire tracking

Strengths / Differentiators

  • Health focus

  • Predictive modeling

  • Strong mobile UI

Feature Ideas to Implement

Health-focused messaging

Convert AQI into specific guidance.

Audience-specific tips (kids, seniors, asthma).

7-day AQI forecast

Predict air quality up to a week ahead.

Combine met inputs and historical patterns.

Comparative city analysis

Compare cities and trends.

Rankings, seasonal patterns, deltas.

Wildfire/event integration

Overlays + smoke transport.

Event dashboards and timelines.

Customizable Analytics

Data-Driven Insights Approach

  • Dual dashboards (simple vs advanced)

  • Comparative & correlation analytics

  • Data export options

Data Presentation Methods

  • Parameter cards for pollutants

  • Side-by-side comparisons

  • Customizable time ranges

  • Scatter plots & trends

Strengths / Differentiators

  • Flexibility

  • Advanced analytics

  • Power-user control

Feature Ideas to Implement

Dual dashboard interface

Simple for citizens; Advanced for researchers.

Switch complexity without losing context.

WHO/EPA guideline overlays

Reference lines on charts for guideline levels.

Tooltips with local regulation context.

Customizable Analytics

Data-Driven Insights Approach

  • Dual dashboards (simple vs advanced)

  • Comparative & correlation analytics

  • Data export options

Data Presentation Methods

  • Parameter cards for pollutants

  • Side-by-side comparisons

  • Customizable time ranges

  • Scatter plots & trends

Strengths / Differentiators

  • Flexibility

  • Advanced analytics

  • Power-user control

Feature Ideas to Implement

Dual dashboard interface

Simple for citizens; Advanced for researchers.

Switch complexity without losing context.

WHO/EPA guideline overlays

Reference lines on charts for guideline levels.

Tooltips with local regulation context.

Personas

Identifying Barriers

I began the evaluation by systematically identifying accessibility barriers. I conducted WCAG contrast checks, ran Google Lighthouse and A11y automated tests, and followed up with manual keyboard navigation, ChromeVox screen-reader testing, and color-accessibility reviews across the user dashboard.

For each test, I followed the exact same interaction script:

  1. Navigate to justair.app.

  2. Choose a state → region → cluster → individual monitor.

  3. Once the monitor sidebar opened, walk through every interactive element — dropdowns, graphs, date pickers, buttons, you name it.

  4. Try changing graph dates, comparing monitors, downloading data, and using the calendar using only the keyboard, no mouse allowed. (The space bar is still recovering.)

Below is a quick summary of what I found.

WCAG Contrast Testing

1.

1.2:1

Aa

Aa

#B4FB9D / #FFFFFF

Map badge / Tiles on light green / Compare Monitors numeric chips

1.

1.2:1

Aa

Aa

#B4FB9D / #FFFFFF

Map badge / Tiles on light green / Compare Monitors numeric chips

1.

1.2:1

Aa

Aa

#B4FB9D / #FFFFFF

Map badge / Tiles on light green / Compare Monitors numeric chips

2.

1.6:1

Aa

Aa

FFFFFF / #F7C946

Yellow values on white

2.

1.6:1

Aa

Aa

FFFFFF / #F7C946

Yellow values on white

2.

1.6:1

Aa

Aa

FFFFFF / #F7C946

Yellow values on white

3.

1.72:1

Aa

Aa

#767676 / #25ABDE

Air Quality Map btn / Recent Hours header

3.

1.72:1

Aa

Aa

#767676 / #25ABDE

Air Quality Map btn / Recent Hours header

3.

1.72:1

Aa

Aa

#767676 / #25ABDE

Air Quality Map btn / Recent Hours header

4.

2.16:1

Aa

Aa

#B4FB9D / #25ABDE

Sign up

4.

2.16:1

Aa

Aa

#B4FB9D / #25ABDE

Sign up

4.

2.16:1

Aa

Aa

#B4FB9D / #25ABDE

Sign up

5.

2.35:1

Aa

Aa

#F5F5F5 / #25ABDE

See Details / Links on light cards

5.

2.35:1

Aa

Aa

#F5F5F5 / #25ABDE

See Details / Links on light cards

5.

2.35:1

Aa

Aa

#F5F5F5 / #25ABDE

See Details / Links on light cards

6.

2.64:1

Aa

Aa

#25ABDE / #FFFFFF

Primary links/buttons (Today, Compare, Remove Cluster)

6.

2.64:1

Aa

Aa

#25ABDE / #FFFFFF

Primary links/buttons (Today, Compare, Remove Cluster)

6.

2.64:1

Aa

Aa

#25ABDE / #FFFFFF

Primary links/buttons (Today, Compare, Remove Cluster)

7.

2.8:1

Aa

Aa

#4CAF50/ #FFFFFF

“Geoapify” green pin/badge

7.

2.8:1

Aa

Aa

#4CAF50/ #FFFFFF

“Geoapify” green pin/badge

7.

2.8:1

Aa

Aa

#4CAF50/ #FFFFFF

“Geoapify” green pin/badge

Scroll Sideways

Manual & Automated Testing

ARIA Role Misuse

Lighthouse

ARIA

Structure

High

`role="group"` is not allowed for given element” “`aria-role region` not allowed” “Elements with ARIA `[role]` missing required children”

Why it matters

Screen readers may skip or misread pollutant cards and chart areas, so users miss context or labels.

What it means

Some elements (like <article>/<section>) were given ARIA roles that conflict or need specific children.

Where

Pollutant cards, chart areas

Missing Required Parent/Child Relationships

Lighthouse

ARIA

Structure

High

“Element has children which are not allowed: `[role=group]`”

Why it matters

Screen readers can’t navigate the pollutant grid as one table.

What it means

Container marked role=grid but children aren’t valid gridcells/structure.

Where

Pollutant grid

Images Missing Alt Text

Screen Reader Testing

A11Y

Media

WCAG 1.1.1

Medium

At least one image renders with no alt attribute.

Why it matters

The image is ignored entirely; any conveyed context is lost.

What it means

Non-text content lacks a text alternative (WCAG 1.1.1).

Where

img.MuiBox-root.css-1nbic85

Dialog Missing Name

Screen Reader Testing

Lighthouse

ARIA

Dialog

High

“Elements with `role="dialog"` do not have accessible names”

Why it matters

Users can’t tell what the dialog is about when it appears.

What it means

The sidebar/monitor details modal (e.g., .MuiDrawer-root) lacks a programmatic name linked with aria-labelledby.

Where

.MuiDrawer-root (sidebar / monitor-details)

Invalid ARIA Attributes

Screen Reader Testing

A11Y

ARIA

WCAG 4.1.2

High

IDs don’t match, aria-labelledby/controls point nowhere.

Why it matters

Screen readers misannounce or lose context in tab panels/drawers.

What it means

Misapplied attributes on tabs, selects, drawers (WCAG 4.1.2).

Where

`#simple-tab-2`, `div.MuiSelect-select…`, `#location-tabpanel-1`, `#location-tabpanel-0`, `div.MuiDrawer-root.MuiDrawer-modal…`

Ghost focus (empty selectors)

Keyboard Testing

Lighthouse

Media

WCAG 1.1.1

Medium

Tabbing highlights elements that don’t respond to Enter/Space (non-interactive containers with tabindex).

Why it matters

Ideally every focused element does something with Enter/Space. Non-controls never receive focus.

What it means

This creates false affordances and slows navigation.

Where

Individual Pollutants row, Header, Compare Monitors tab

Form Inputs Missing Labels

Screen Reader Testing

A11Y

Forms

WCAG 1.3.1

High

Inputs and selects don’t have labels or aria-labels.

Why it matters

Users can’t tell what to enter, making forms error-prone.

What it means

Controls are announced as generic "input"/"combo box." (WCAG 1.3.1)

Where

#:r19:, input.MuiSelect-nativeInput.css-1k3x8v3

Prohibited / Conditional ARIA Attributes

Lighthouse

ARIA

Medium

“`aria-label` cannot be used on a span with no valid role attribute.”

Why it matters

Clutters the accessibility tree; screen readers announce noise.

What it means

aria-label is placed on non-interactive spans without a valid role or purpose.

Where

Decorative UI spans

Unsized / Improperly Sized Images

Lighthouse

Media

Performance

Low

Desktop “unsized images” scored ~0.5, though mobile passed.

Why it matters

Small layout shifts (CLS) on desktop; mobile mostly passes.

What it means

Images render without intrinsic size, causing reflow.

Where

Header logo and miscellaneous images

ARIA Role Misuse

Lighthouse

ARIA

Structure

High

`role="group"` is not allowed for given element” “`aria-role region` not allowed” “Elements with ARIA `[role]` missing required children”

Why it matters

Screen readers may skip or misread pollutant cards and chart areas, so users miss context or labels.

What it means

Some elements (like <article>/<section>) were given ARIA roles that conflict or need specific children.

Where

Pollutant cards, chart areas

ARIA Role Misuse

Lighthouse

ARIA

Structure

High

`role="group"` is not allowed for given element” “`aria-role region` not allowed” “Elements with ARIA `[role]` missing required children”

Why it matters

Screen readers may skip or misread pollutant cards and chart areas, so users miss context or labels.

What it means

Some elements (like <article>/<section>) were given ARIA roles that conflict or need specific children.

Where

Pollutant cards, chart areas

Missing Required Parent/Child Relationships

Lighthouse

ARIA

Structure

High

“Element has children which are not allowed: `[role=group]`”

Why it matters

Screen readers can’t navigate the pollutant grid as one table.

What it means

Container marked role=grid but children aren’t valid gridcells/structure.

Where

Pollutant grid

Missing Required Parent/Child Relationships

Lighthouse

ARIA

Structure

High

“Element has children which are not allowed: `[role=group]`”

Why it matters

Screen readers can’t navigate the pollutant grid as one table.

What it means

Container marked role=grid but children aren’t valid gridcells/structure.

Where

Pollutant grid

Invalid ARIA Attributes

Screen Reader Testing

A11Y

ARIA

WCAG 4.1.2

High

IDs don’t match, aria-labelledby/controls point nowhere.

Why it matters

Screen readers misannounce or lose context in tab panels/drawers.

What it means

Misapplied attributes on tabs, selects, drawers (WCAG 4.1.2).

Where

`#simple-tab-2`, `div.MuiSelect-select…`, `#location-tabpanel-1`, `#location-tabpanel-0`, `div.MuiDrawer-root.MuiDrawer-modal…`

Invalid ARIA Attributes

Screen Reader Testing

A11Y

ARIA

WCAG 4.1.2

High

IDs don’t match, aria-labelledby/controls point nowhere.

Why it matters

Screen readers misannounce or lose context in tab panels/drawers.

What it means

Misapplied attributes on tabs, selects, drawers (WCAG 4.1.2).

Where

`#simple-tab-2`, `div.MuiSelect-select…`, `#location-tabpanel-1`, `#location-tabpanel-0`, `div.MuiDrawer-root.MuiDrawer-modal…`

Ghost focus (empty selectors)

Keyboard Testing

Lighthouse

Media

WCAG 1.1.1

Medium

Tabbing highlights elements that don’t respond to Enter/Space (non-interactive containers with tabindex).

Why it matters

Ideally every focused element does something with Enter/Space. Non-controls never receive focus.

What it means

This creates false affordances and slows navigation.

Where

Individual Pollutants row, Header, Compare Monitors tab

Ghost focus (empty selectors)

Keyboard Testing

Lighthouse

Media

WCAG 1.1.1

Medium

Tabbing highlights elements that don’t respond to Enter/Space (non-interactive containers with tabindex).

Why it matters

Ideally every focused element does something with Enter/Space. Non-controls never receive focus.

What it means

This creates false affordances and slows navigation.

Where

Individual Pollutants row, Header, Compare Monitors tab

Dialog Missing Name

Screen Reader Testing

Lighthouse

ARIA

Dialog

High

“Elements with `role="dialog"` do not have accessible names”

Why it matters

Users can’t tell what the dialog is about when it appears.

What it means

The sidebar/monitor details modal (e.g., .MuiDrawer-root) lacks a programmatic name linked with aria-labelledby.

Where

.MuiDrawer-root (sidebar / monitor-details)

Dialog Missing Name

Screen Reader Testing

Lighthouse

ARIA

Dialog

High

“Elements with `role="dialog"` do not have accessible names”

Why it matters

Users can’t tell what the dialog is about when it appears.

What it means

The sidebar/monitor details modal (e.g., .MuiDrawer-root) lacks a programmatic name linked with aria-labelledby.

Where

.MuiDrawer-root (sidebar / monitor-details)

Form Inputs Missing Labels

Screen Reader Testing

A11Y

Forms

WCAG 1.3.1

High

Inputs and selects don’t have labels or aria-labels.

Why it matters

Users can’t tell what to enter, making forms error-prone.

What it means

Controls are announced as generic "input"/"combo box." (WCAG 1.3.1)

Where

#:r19:, input.MuiSelect-nativeInput.css-1k3x8v3

Form Inputs Missing Labels

Screen Reader Testing

A11Y

Forms

WCAG 1.3.1

High

Inputs and selects don’t have labels or aria-labels.

Why it matters

Users can’t tell what to enter, making forms error-prone.

What it means

Controls are announced as generic "input"/"combo box." (WCAG 1.3.1)

Where

#:r19:, input.MuiSelect-nativeInput.css-1k3x8v3

Prohibited / Conditional ARIA Attributes

Lighthouse

ARIA

Medium

“`aria-label` cannot be used on a span with no valid role attribute.”

Why it matters

Clutters the accessibility tree; screen readers announce noise.

What it means

aria-label is placed on non-interactive spans without a valid role or purpose.

Where

Decorative UI spans

Prohibited / Conditional ARIA Attributes

Lighthouse

ARIA

Medium

“`aria-label` cannot be used on a span with no valid role attribute.”

Why it matters

Clutters the accessibility tree; screen readers announce noise.

What it means

aria-label is placed on non-interactive spans without a valid role or purpose.

Where

Decorative UI spans

Unsized / Improperly Sized Images

Lighthouse

Media

Performance

Low

Desktop “unsized images” scored ~0.5, though mobile passed.

Why it matters

Small layout shifts (CLS) on desktop; mobile mostly passes.

What it means

Images render without intrinsic size, causing reflow.

Where

Header logo and miscellaneous images

Unsized / Improperly Sized Images

Lighthouse

Media

Performance

Low

Desktop “unsized images” scored ~0.5, though mobile passed.

Why it matters

Small layout shifts (CLS) on desktop; mobile mostly passes.

What it means

Images render without intrinsic size, causing reflow.

Where

Header logo and miscellaneous images

Images Missing Alt Text

Screen Reader Testing

A11Y

Media

WCAG 1.1.1

Medium

At least one image renders with no alt attribute.

Why it matters

The image is ignored entirely; any conveyed context is lost.

What it means

Non-text content lacks a text alternative (WCAG 1.1.1).

Where

img.MuiBox-root.css-1nbic85

Images Missing Alt Text

Screen Reader Testing

A11Y

Media

WCAG 1.1.1

Medium

At least one image renders with no alt attribute.

Why it matters

The image is ignored entirely; any conveyed context is lost.

What it means

Non-text content lacks a text alternative (WCAG 1.1.1).

Where

img.MuiBox-root.css-1nbic85

ARIA Role Misuse

Lighthouse

ARIA

Structure

High

`role="group"` is not allowed for given element” “`aria-role region` not allowed” “Elements with ARIA `[role]` missing required children”

Why it matters

Screen readers may skip or misread pollutant cards and chart areas, so users miss context or labels.

What it means

Some elements (like <article>/<section>) were given ARIA roles that conflict or need specific children.

Where

Pollutant cards, chart areas

ARIA Role Misuse

Lighthouse

ARIA

Structure

High

`role="group"` is not allowed for given element” “`aria-role region` not allowed” “Elements with ARIA `[role]` missing required children”

Why it matters

Screen readers may skip or misread pollutant cards and chart areas, so users miss context or labels.

What it means

Some elements (like <article>/<section>) were given ARIA roles that conflict or need specific children.

Where

Pollutant cards, chart areas

Form Inputs Missing Labels

Screen Reader Testing

A11Y

Forms

WCAG 1.3.1

High

Inputs and selects don’t have labels or aria-labels.

Why it matters

Users can’t tell what to enter, making forms error-prone.

What it means

Controls are announced as generic "input"/"combo box." (WCAG 1.3.1)

Where

#:r19:, input.MuiSelect-nativeInput.css-1k3x8v3

Form Inputs Missing Labels

Screen Reader Testing

A11Y

Forms

WCAG 1.3.1

High

Inputs and selects don’t have labels or aria-labels.

Why it matters

Users can’t tell what to enter, making forms error-prone.

What it means

Controls are announced as generic "input"/"combo box." (WCAG 1.3.1)

Where

#:r19:, input.MuiSelect-nativeInput.css-1k3x8v3

Invalid ARIA Attributes

Screen Reader Testing

A11Y

ARIA

WCAG 4.1.2

High

IDs don’t match, aria-labelledby/controls point nowhere.

Why it matters

Screen readers misannounce or lose context in tab panels/drawers.

What it means

Misapplied attributes on tabs, selects, drawers (WCAG 4.1.2).

Where

`#simple-tab-2`, `div.MuiSelect-select…`, `#location-tabpanel-1`, `#location-tabpanel-0`, `div.MuiDrawer-root.MuiDrawer-modal…`

Invalid ARIA Attributes

Screen Reader Testing

A11Y

ARIA

WCAG 4.1.2

High

IDs don’t match, aria-labelledby/controls point nowhere.

Why it matters

Screen readers misannounce or lose context in tab panels/drawers.

What it means

Misapplied attributes on tabs, selects, drawers (WCAG 4.1.2).

Where

`#simple-tab-2`, `div.MuiSelect-select…`, `#location-tabpanel-1`, `#location-tabpanel-0`, `div.MuiDrawer-root.MuiDrawer-modal…`

Images Missing Alt Text

Screen Reader Testing

A11Y

Media

WCAG 1.1.1

Medium

At least one image renders with no alt attribute.

Why it matters

The image is ignored entirely; any conveyed context is lost.

What it means

Non-text content lacks a text alternative (WCAG 1.1.1).

Where

img.MuiBox-root.css-1nbic85

Images Missing Alt Text

Screen Reader Testing

A11Y

Media

WCAG 1.1.1

Medium

At least one image renders with no alt attribute.

Why it matters

The image is ignored entirely; any conveyed context is lost.

What it means

Non-text content lacks a text alternative (WCAG 1.1.1).

Where

img.MuiBox-root.css-1nbic85

Unsized / Improperly Sized Images

Lighthouse

Media

Performance

Low

Desktop “unsized images” scored ~0.5, though mobile passed.

Why it matters

Small layout shifts (CLS) on desktop; mobile mostly passes.

What it means

Images render without intrinsic size, causing reflow.

Where

Header logo and miscellaneous images

Unsized / Improperly Sized Images

Lighthouse

Media

Performance

Low

Desktop “unsized images” scored ~0.5, though mobile passed.

Why it matters

Small layout shifts (CLS) on desktop; mobile mostly passes.

What it means

Images render without intrinsic size, causing reflow.

Where

Header logo and miscellaneous images

Dialog Missing Name

Screen Reader Testing

Lighthouse

ARIA

Dialog

High

“Elements with `role="dialog"` do not have accessible names”

Why it matters

Users can’t tell what the dialog is about when it appears.

What it means

The sidebar/monitor details modal (e.g., .MuiDrawer-root) lacks a programmatic name linked with aria-labelledby.

Where

.MuiDrawer-root (sidebar / monitor-details)

Dialog Missing Name

Screen Reader Testing

Lighthouse

ARIA

Dialog

High

“Elements with `role="dialog"` do not have accessible names”

Why it matters

Users can’t tell what the dialog is about when it appears.

What it means

The sidebar/monitor details modal (e.g., .MuiDrawer-root) lacks a programmatic name linked with aria-labelledby.

Where

.MuiDrawer-root (sidebar / monitor-details)

Missing Required Parent/Child Relationships

Lighthouse

ARIA

Structure

High

“Element has children which are not allowed: `[role=group]`”

Why it matters

Screen readers can’t navigate the pollutant grid as one table.

What it means

Container marked role=grid but children aren’t valid gridcells/structure.

Where

Pollutant grid

Missing Required Parent/Child Relationships

Lighthouse

ARIA

Structure

High

“Element has children which are not allowed: `[role=group]`”

Why it matters

Screen readers can’t navigate the pollutant grid as one table.

What it means

Container marked role=grid but children aren’t valid gridcells/structure.

Where

Pollutant grid

Prohibited / Conditional ARIA Attributes

Lighthouse

ARIA

Medium

“`aria-label` cannot be used on a span with no valid role attribute.”

Why it matters

Clutters the accessibility tree; screen readers announce noise.

What it means

aria-label is placed on non-interactive spans without a valid role or purpose.

Where

Decorative UI spans

Prohibited / Conditional ARIA Attributes

Lighthouse

ARIA

Medium

“`aria-label` cannot be used on a span with no valid role attribute.”

Why it matters

Clutters the accessibility tree; screen readers announce noise.

What it means

aria-label is placed on non-interactive spans without a valid role or purpose.

Where

Decorative UI spans

Ghost focus (empty selectors)

Keyboard Testing

Lighthouse

Media

WCAG 1.1.1

Medium

Tabbing highlights elements that don’t respond to Enter/Space (non-interactive containers with tabindex).

Why it matters

Ideally every focused element does something with Enter/Space. Non-controls never receive focus.

What it means

This creates false affordances and slows navigation.

Where

Individual Pollutants row, Header, Compare Monitors tab

Ghost focus (empty selectors)

Keyboard Testing

Lighthouse

Media

WCAG 1.1.1

Medium

Tabbing highlights elements that don’t respond to Enter/Space (non-interactive containers with tabindex).

Why it matters

Ideally every focused element does something with Enter/Space. Non-controls never receive focus.

What it means

This creates false affordances and slows navigation.

Where

Individual Pollutants row, Header, Compare Monitors tab

Color Accessibility Testing

Protanopia

Deuteranopia

Tritanopia

Achromatopsia

Protanopia (Red Blind)

Where it occurs

AQI Pollutant Badges

Map Monitor Markers

Legend Icons

Primary CTA Buttons

Effect

Users with red-blindness cannot distinguish warning levels or selected states . Color meaning (e.g., danger or alert) is lost.

Observed Issues

Red and orange tones in the AQI category markers (e.g., Moderate / Unhealthy ranges) appear nearly identical in brightness.

The alert or “active” buttons lose contrast against the neutral background.

The selected tab highlight blends with inactive tabs — difficult to perceive which view is active.

Tritanopia (Blue Blind)

Where it occurs

Navigation Tabs

Secondary Action Buttons

Comparison Graph Series

Effect

Important interactive cues (selected tabs, links, and data trends) become visually ambiguous or invisible.

Observed Issues

Blue and purple elements (tabs, accent highlights) look grayish or muted.

The secondary button states and link hover effects lose visibility.

Any color pairing using blue and gray (common in charts) appears identical.

Deuteranopia (Green Blind)

Where it occurs

AQI Range Indicators

Chart Legends

Success Banners

Map Clusters

Effect

Users with green-blindness cannot differentiate early-warning pollution levels or “safe” vs “neutral” statuses.

Observed Issues

Green and yellow hues used in the Good and Moderate AQI states appear nearly identical.

The comparison chart lines overlap visually

Success indicators or confirmation messages (often green) fade into the background.

Achromatopsia (Complete Color Blindness)

Where it occurs

Everywhere

Effect

Without color or contrast cues, users cannot determine state, severity, or selection at all.

Observed Issues

All color distinctions collapse into shades of gray.

AQI status colors (green/yellow/orange/red/purple) become indistinguishable grayscale with similar luminance.

Button highlights and legends depend entirely on color. No text or pattern indicators.

Scroll Sideways

Protanopia (Red Blind)

Where it occurs

AQI Pollutant Badges

Map Monitor Markers

Legend Icons

Primary CTA Buttons

Effect

Users with red-blindness cannot distinguish warning levels or selected states . Color meaning (e.g., danger or alert) is lost.

Observed Issues

Red and orange tones in the AQI category markers (e.g., Moderate / Unhealthy ranges) appear nearly identical in brightness.

The alert or “active” buttons lose contrast against the neutral background.

The selected tab highlight blends with inactive tabs — difficult to perceive which view is active.

Protanopia (Red Blind)

Where it occurs

AQI Pollutant Badges

Map Monitor Markers

Legend Icons

Primary CTA Buttons

Effect

Users with red-blindness cannot distinguish warning levels or selected states . Color meaning (e.g., danger or alert) is lost.

Observed Issues

Red and orange tones in the AQI category markers (e.g., Moderate / Unhealthy ranges) appear nearly identical in brightness.

The alert or “active” buttons lose contrast against the neutral background.

The selected tab highlight blends with inactive tabs — difficult to perceive which view is active.

Tritanopia (Blue Blind)

Where it occurs

Navigation Tabs

Secondary Action Buttons

Comparison Graph Series

Effect

Important interactive cues (selected tabs, links, and data trends) become visually ambiguous or invisible.

Observed Issues

Blue and purple elements (tabs, accent highlights) look grayish or muted.

The secondary button states and link hover effects lose visibility.

Any color pairing using blue and gray (common in charts) appears identical.

Tritanopia (Blue Blind)

Where it occurs

Navigation Tabs

Secondary Action Buttons

Comparison Graph Series

Effect

Important interactive cues (selected tabs, links, and data trends) become visually ambiguous or invisible.

Observed Issues

Blue and purple elements (tabs, accent highlights) look grayish or muted.

The secondary button states and link hover effects lose visibility.

Any color pairing using blue and gray (common in charts) appears identical.

Deuteranopia (Green Blind)

Where it occurs

AQI Range Indicators

Chart Legends

Success Banners

Map Clusters

Effect

Users with green-blindness cannot differentiate early-warning pollution levels or “safe” vs “neutral” statuses.

Observed Issues

Green and yellow hues used in the Good and Moderate AQI states appear nearly identical.

The comparison chart lines overlap visually

Success indicators or confirmation messages (often green) fade into the background.

Deuteranopia (Green Blind)

Where it occurs

AQI Range Indicators

Chart Legends

Success Banners

Map Clusters

Effect

Users with green-blindness cannot differentiate early-warning pollution levels or “safe” vs “neutral” statuses.

Observed Issues

Green and yellow hues used in the Good and Moderate AQI states appear nearly identical.

The comparison chart lines overlap visually

Success indicators or confirmation messages (often green) fade into the background.

Achromatopsia (Complete Color Blindness)

Where it occurs

Everywhere

Effect

Without color or contrast cues, users cannot determine state, severity, or selection at all.

Observed Issues

All color distinctions collapse into shades of gray.

AQI status colors (green/yellow/orange/red/purple) become indistinguishable grayscale with similar luminance.

Button highlights and legends depend entirely on color. No text or pattern indicators.

Achromatopsia (Complete Color Blindness)

Where it occurs

Everywhere

Effect

Without color or contrast cues, users cannot determine state, severity, or selection at all.

Observed Issues

All color distinctions collapse into shades of gray.

AQI status colors (green/yellow/orange/red/purple) become indistinguishable grayscale with similar luminance.

Button highlights and legends depend entirely on color. No text or pattern indicators.

Protanopia (Red Blind)

Where it occurs

AQI Pollutant Badges

Map Monitor Markers

Legend Icons

Primary CTA Buttons

Effect

Users with red-blindness cannot distinguish warning levels or selected states . Color meaning (e.g., danger or alert) is lost.

Observed Issues

Red and orange tones in the AQI category markers (e.g., Moderate / Unhealthy ranges) appear nearly identical in brightness.

The alert or “active” buttons lose contrast against the neutral background.

The selected tab highlight blends with inactive tabs — difficult to perceive which view is active.

Protanopia (Red Blind)

Where it occurs

AQI Pollutant Badges

Map Monitor Markers

Legend Icons

Primary CTA Buttons

Effect

Users with red-blindness cannot distinguish warning levels or selected states . Color meaning (e.g., danger or alert) is lost.

Observed Issues

Red and orange tones in the AQI category markers (e.g., Moderate / Unhealthy ranges) appear nearly identical in brightness.

The alert or “active” buttons lose contrast against the neutral background.

The selected tab highlight blends with inactive tabs — difficult to perceive which view is active.

Tritanopia (Blue Blind)

Where it occurs

Navigation Tabs

Secondary Action Buttons

Comparison Graph Series

Effect

Important interactive cues (selected tabs, links, and data trends) become visually ambiguous or invisible.

Observed Issues

Blue and purple elements (tabs, accent highlights) look grayish or muted.

The secondary button states and link hover effects lose visibility.

Any color pairing using blue and gray (common in charts) appears identical.

Tritanopia (Blue Blind)

Where it occurs

Navigation Tabs

Secondary Action Buttons

Comparison Graph Series

Effect

Important interactive cues (selected tabs, links, and data trends) become visually ambiguous or invisible.

Observed Issues

Blue and purple elements (tabs, accent highlights) look grayish or muted.

The secondary button states and link hover effects lose visibility.

Any color pairing using blue and gray (common in charts) appears identical.

Deuteranopia (Green Blind)

Where it occurs

AQI Range Indicators

Chart Legends

Success Banners

Map Clusters

Effect

Users with green-blindness cannot differentiate early-warning pollution levels or “safe” vs “neutral” statuses.

Observed Issues

Green and yellow hues used in the Good and Moderate AQI states appear nearly identical.

The comparison chart lines overlap visually

Success indicators or confirmation messages (often green) fade into the background.

Deuteranopia (Green Blind)

Where it occurs

AQI Range Indicators

Chart Legends

Success Banners

Map Clusters

Effect

Users with green-blindness cannot differentiate early-warning pollution levels or “safe” vs “neutral” statuses.

Observed Issues

Green and yellow hues used in the Good and Moderate AQI states appear nearly identical.

The comparison chart lines overlap visually

Success indicators or confirmation messages (often green) fade into the background.

Achromatopsia (Complete Color Blindness)

Where it occurs

Everywhere

Effect

Without color or contrast cues, users cannot determine state, severity, or selection at all.

Observed Issues

All color distinctions collapse into shades of gray.

AQI status colors (green/yellow/orange/red/purple) become indistinguishable grayscale with similar luminance.

Button highlights and legends depend entirely on color. No text or pattern indicators.

Achromatopsia (Complete Color Blindness)

Where it occurs

Everywhere

Effect

Without color or contrast cues, users cannot determine state, severity, or selection at all.

Observed Issues

All color distinctions collapse into shades of gray.

AQI status colors (green/yellow/orange/red/purple) become indistinguishable grayscale with similar luminance.

Button highlights and legends depend entirely on color. No text or pattern indicators.

EPA verified palette

For color accessibility issues like these, and since the JustAir dashboard is very data-heavy, I would normally suggest using Cividis or Viridis color palettes. But we can’t use them here because the EPA color palette needs to stay the same for air quality reporting. So, we need to find accessible alternatives that still follow the EPA guidelines.

UX Analysis

After the accessibility testing, I wanted to be certain I understood all the issues within the dash. Automated tools can’t really capture contextual problems or the more nuanced difficulties users may run into.
I broke the user-facing monitor dashboard into three sections:


  1. The pollutant row

  2. The “compare monitors” tab

  3. The graphs


This lets me understand how each section contributes to the overall user experience, identify where friction occurs, and see how well the interface supports different user tasks.

Pollutant Row

Compare Monitors Tab

Graphs

Pollutant Row Redesign

Pollutant Row

Old Design Findings

Pollutant Row

Header

Details Hidden by Default

Content Priority

Discoverability

Information Hierarchy

UX Flow

The “Details” tab is collapsed initially, hiding key information such as individual pollutant readings, the main AQI-driving pollutant, and related health impacts.

Since pollutant data is more important to users than raw monitor info, this default state reduces discoverability and usability.

Color Dependence and Accessibility Gaps

Inclusivity

Accessibility

Redundant Cues

Non-Color Indicators

Color-blind testing reveals heavy reliance on hue to convey pollutant severity and category.

Labels and icons should provide non-color indicators (e.g., text, icons, or shapes).

Missing Measurement Units

Scientific Accuracy

Units

Credibility

Consistency

Pollutant values are missing units such as µg/m³ or ppm, which are essential for context and scientific accuracy.

Unclear Section Title

Clarity

Content Design

I/A Naming

The section currently says “See Details” without specifying what details are shown.

Consider adding a clear title such as “Individual Pollutant Details” or “Pollutant Breakdown”.

Hidden Hourly Pollutant Trends

Data Viz

Findability

Time-Series

IA

Hourly pollutant data exists but isn’t directly visible within the pollutant tab.

Relocating this data to the Pollutant Tracking section would make temporal patterns easier to explore.

Inaccurate Health Impact Messaging

Trust/Credibility

Accuracy

Content–Data Alignment

The Health Impact bar visually looks fine but continues to show negative or severe warnings even when AQI values indicate good air quality.

Text and severity level should align with actual AQI risk categories.

Primary AQI Driver Not Clearly Identified

Information Architecture

Clarity

Labeling

Competitive Parity

The main pollutant driving the AQI is mentioned vaguely at the top as the “main concern” and bolded in readings, but not explicitly labeled.

Competing dashboards use a clearly marked “Primary AQI Driver” tag or highlighted card, improving clarity.

Scroll Sideways

Details Hidden by Default

Content Priority

Discoverability

Information Hierarchy

UX Flow

The “Details” tab is collapsed initially, hiding key information such as individual pollutant readings, the main AQI-driving pollutant, and related health impacts.

Since pollutant data is more important to users than raw monitor info, this default state reduces discoverability and usability.

Details Hidden by Default

Content Priority

Discoverability

Information Hierarchy

UX Flow

The “Details” tab is collapsed initially, hiding key information such as individual pollutant readings, the main AQI-driving pollutant, and related health impacts.

Since pollutant data is more important to users than raw monitor info, this default state reduces discoverability and usability.

Color Dependence and Accessibility Gaps

Inclusivity

Accessibility

Redundant Cues

Non-Color Indicators

Color-blind testing reveals heavy reliance on hue to convey pollutant severity and category.

Labels and icons should provide non-color indicators (e.g., text, icons, or shapes).

Color Dependence and Accessibility Gaps

Inclusivity

Accessibility

Redundant Cues

Non-Color Indicators

Color-blind testing reveals heavy reliance on hue to convey pollutant severity and category.

Labels and icons should provide non-color indicators (e.g., text, icons, or shapes).

Missing Measurement Units

Scientific Accuracy

Units

Credibility

Consistency

Pollutant values are missing units such as µg/m³ or ppm, which are essential for context and scientific accuracy.

Missing Measurement Units

Scientific Accuracy

Units

Credibility

Consistency

Pollutant values are missing units such as µg/m³ or ppm, which are essential for context and scientific accuracy.

Unclear Section Title

Clarity

Content Design

I/A Naming

The section currently says “See Details” without specifying what details are shown.

Consider adding a clear title such as “Individual Pollutant Details” or “Pollutant Breakdown”.

Unclear Section Title

Clarity

Content Design

I/A Naming

The section currently says “See Details” without specifying what details are shown.

Consider adding a clear title such as “Individual Pollutant Details” or “Pollutant Breakdown”.

Hidden Hourly Pollutant Trends

Data Viz

Findability

Time-Series

IA

Hourly pollutant data exists but isn’t directly visible within the pollutant tab.

Relocating this data to the Pollutant Tracking section would make temporal patterns easier to explore.

Hidden Hourly Pollutant Trends

Data Viz

Findability

Time-Series

IA

Hourly pollutant data exists but isn’t directly visible within the pollutant tab.

Relocating this data to the Pollutant Tracking section would make temporal patterns easier to explore.

Inaccurate Health Impact Messaging

Trust/Credibility

Accuracy

Content–Data Alignment

The Health Impact bar visually looks fine but continues to show negative or severe warnings even when AQI values indicate good air quality.

Text and severity level should align with actual AQI risk categories.

Inaccurate Health Impact Messaging

Trust/Credibility

Accuracy

Content–Data Alignment

The Health Impact bar visually looks fine but continues to show negative or severe warnings even when AQI values indicate good air quality.

Text and severity level should align with actual AQI risk categories.

Primary AQI Driver Not Clearly Identified

Information Architecture

Clarity

Labeling

Competitive Parity

The main pollutant driving the AQI is mentioned vaguely at the top as the “main concern” and bolded in readings, but not explicitly labeled.

Competing dashboards use a clearly marked “Primary AQI Driver” tag or highlighted card, improving clarity.

Primary AQI Driver Not Clearly Identified

Information Architecture

Clarity

Labeling

Competitive Parity

The main pollutant driving the AQI is mentioned vaguely at the top as the “main concern” and bolded in readings, but not explicitly labeled.

Competing dashboards use a clearly marked “Primary AQI Driver” tag or highlighted card, improving clarity.

Details Hidden by Default

Content Priority

Discoverability

Information Hierarchy

UX Flow

The “Details” tab is collapsed initially, hiding key information such as individual pollutant readings, the main AQI-driving pollutant, and related health impacts.

Since pollutant data is more important to users than raw monitor info, this default state reduces discoverability and usability.

Details Hidden by Default

Content Priority

Discoverability

Information Hierarchy

UX Flow

The “Details” tab is collapsed initially, hiding key information such as individual pollutant readings, the main AQI-driving pollutant, and related health impacts.

Since pollutant data is more important to users than raw monitor info, this default state reduces discoverability and usability.

Color Dependence and Accessibility Gaps

Inclusivity

Accessibility

Redundant Cues

Non-Color Indicators

Color-blind testing reveals heavy reliance on hue to convey pollutant severity and category.

Labels and icons should provide non-color indicators (e.g., text, icons, or shapes).

Color Dependence and Accessibility Gaps

Inclusivity

Accessibility

Redundant Cues

Non-Color Indicators

Color-blind testing reveals heavy reliance on hue to convey pollutant severity and category.

Labels and icons should provide non-color indicators (e.g., text, icons, or shapes).

Missing Measurement Units

Scientific Accuracy

Units

Credibility

Consistency

Pollutant values are missing units such as µg/m³ or ppm, which are essential for context and scientific accuracy.

Missing Measurement Units

Scientific Accuracy

Units

Credibility

Consistency

Pollutant values are missing units such as µg/m³ or ppm, which are essential for context and scientific accuracy.

Unclear Section Title

Clarity

Content Design

I/A Naming

The section currently says “See Details” without specifying what details are shown.

Consider adding a clear title such as “Individual Pollutant Details” or “Pollutant Breakdown”.

Unclear Section Title

Clarity

Content Design

I/A Naming

The section currently says “See Details” without specifying what details are shown.

Consider adding a clear title such as “Individual Pollutant Details” or “Pollutant Breakdown”.

Hidden Hourly Pollutant Trends

Data Viz

Findability

Time-Series

IA

Hourly pollutant data exists but isn’t directly visible within the pollutant tab.

Relocating this data to the Pollutant Tracking section would make temporal patterns easier to explore.

Hidden Hourly Pollutant Trends

Data Viz

Findability

Time-Series

IA

Hourly pollutant data exists but isn’t directly visible within the pollutant tab.

Relocating this data to the Pollutant Tracking section would make temporal patterns easier to explore.

Inaccurate Health Impact Messaging

Trust/Credibility

Accuracy

Content–Data Alignment

The Health Impact bar visually looks fine but continues to show negative or severe warnings even when AQI values indicate good air quality.

Text and severity level should align with actual AQI risk categories.

Inaccurate Health Impact Messaging

Trust/Credibility

Accuracy

Content–Data Alignment

The Health Impact bar visually looks fine but continues to show negative or severe warnings even when AQI values indicate good air quality.

Text and severity level should align with actual AQI risk categories.

Primary AQI Driver Not Clearly Identified

Information Architecture

Clarity

Labeling

Competitive Parity

The main pollutant driving the AQI is mentioned vaguely at the top as the “main concern” and bolded in readings, but not explicitly labeled.

Competing dashboards use a clearly marked “Primary AQI Driver” tag or highlighted card, improving clarity.

Primary AQI Driver Not Clearly Identified

Information Architecture

Clarity

Labeling

Competitive Parity

The main pollutant driving the AQI is mentioned vaguely at the top as the “main concern” and bolded in readings, but not explicitly labeled.

Competing dashboards use a clearly marked “Primary AQI Driver” tag or highlighted card, improving clarity.

The Redesign

Redesign of Pollutant Row

Clear Primary AQI Driver Placement

Clarity

Visual Hierarchy

Status Communication

Education

The main AQI-driving pollutant now sits at the top of the row, highlighted with clear status text and more space for a short description.

There’s also room for a “Learn More” button that can link to external resources for deeper explanations.

Clear Primary AQI Driver Placement

Clarity

Visual Hierarchy

Status Communication

Education

The main AQI-driving pollutant now sits at the top of the row, highlighted with clear status text and more space for a short description.

There’s also room for a “Learn More” button that can link to external resources for deeper explanations.

Redundant Visual Cues for Accessibility

Accessibility

Redundant Cues

Status Labeling

Every pollutant card now has both color indicators and text labels (like “Good,” “Moderate,” “Unhealthy”).

This provides redundant ways to understand status, so even users with color-vision deficiencies can easily interpret it.

Redundant Visual Cues for Accessibility

Accessibility

Redundant Cues

Status Labeling

Every pollutant card now has both color indicators and text labels (like “Good,” “Moderate,” “Unhealthy”).

This provides redundant ways to understand status, so even users with color-vision deficiencies can easily interpret it.

Clear Primary AQI Driver Placement

Clarity

Visual Hierarchy

Status Communication

Education

The main AQI-driving pollutant now sits at the top of the row, highlighted with clear status text and more space for a short description.

There’s also room for a “Learn More” button that can link to external resources for deeper explanations.

Clear Primary AQI Driver Placement

Clarity

Visual Hierarchy

Status Communication

Education

The main AQI-driving pollutant now sits at the top of the row, highlighted with clear status text and more space for a short description.

There’s also room for a “Learn More” button that can link to external resources for deeper explanations.

Redundant Visual Cues for Accessibility

Accessibility

Redundant Cues

Status Labeling

Every pollutant card now has both color indicators and text labels (like “Good,” “Moderate,” “Unhealthy”).

This provides redundant ways to understand status, so even users with color-vision deficiencies can easily interpret it.

Redundant Visual Cues for Accessibility

Accessibility

Redundant Cues

Status Labeling

Every pollutant card now has both color indicators and text labels (like “Good,” “Moderate,” “Unhealthy”).

This provides redundant ways to understand status, so even users with color-vision deficiencies can easily interpret it.

Redesign Primary AQI Driver Interaction

Redesign
Primary AQI Driver Interaction

Redesign Individual Pollutants Interaction

Redesign
Individual Pollutants Interaction

Expandable Hourly Graphs

Data Viz

Progressive Disclosure

Interactivity

Time-Series

Tapping a pollutant expands it into its own mini-chart, showing the hourly AQI trend for that specific pollutant.

This helps users quickly track how air quality changes throughout the day.

Measurement Units Added

Units

Scientific Accuracy

Consistency

Each pollutant value now includes the correct measurement unit (µg/m³ or ppm), giving readings more context and scientific clarity.

Clearer Labeling and Actions

Clarity

Affordance/Feedback

IA

Actionability

The expandable section now reads “Individual AQI Pollutants” instead of “See Details”, making it obvious what users will find inside.

I also added a selector box to show which element is active or selected, improving interaction feedback.

Scroll Sideways

Expandable Hourly Graphs

Data Viz

Progressive Disclosure

Interactivity

Time-Series

Tapping a pollutant expands it into its own mini-chart, showing the hourly AQI trend for that specific pollutant.

This helps users quickly track how air quality changes throughout the day.

Expandable Hourly Graphs

Data Viz

Progressive Disclosure

Interactivity

Time-Series

Tapping a pollutant expands it into its own mini-chart, showing the hourly AQI trend for that specific pollutant.

This helps users quickly track how air quality changes throughout the day.

Measurement Units Added

Units

Scientific Accuracy

Consistency

Each pollutant value now includes the correct measurement unit (µg/m³ or ppm), giving readings more context and scientific clarity.

Measurement Units Added

Units

Scientific Accuracy

Consistency

Each pollutant value now includes the correct measurement unit (µg/m³ or ppm), giving readings more context and scientific clarity.

Clearer Labeling and Actions

Clarity

Affordance/Feedback

IA

Actionability

The expandable section now reads “Individual AQI Pollutants” instead of “See Details”, making it obvious what users will find inside.

I also added a selector box to show which element is active or selected, improving interaction feedback.

Clearer Labeling and Actions

Clarity

Affordance/Feedback

IA

Actionability

The expandable section now reads “Individual AQI Pollutants” instead of “See Details”, making it obvious what users will find inside.

I also added a selector box to show which element is active or selected, improving interaction feedback.

Expandable Hourly Graphs

Data Viz

Progressive Disclosure

Interactivity

Time-Series

Tapping a pollutant expands it into its own mini-chart, showing the hourly AQI trend for that specific pollutant.

This helps users quickly track how air quality changes throughout the day.

Expandable Hourly Graphs

Data Viz

Progressive Disclosure

Interactivity

Time-Series

Tapping a pollutant expands it into its own mini-chart, showing the hourly AQI trend for that specific pollutant.

This helps users quickly track how air quality changes throughout the day.

Measurement Units Added

Units

Scientific Accuracy

Consistency

Each pollutant value now includes the correct measurement unit (µg/m³ or ppm), giving readings more context and scientific clarity.

Measurement Units Added

Units

Scientific Accuracy

Consistency

Each pollutant value now includes the correct measurement unit (µg/m³ or ppm), giving readings more context and scientific clarity.

Clearer Labeling and Actions

Clarity

Affordance/Feedback

IA

Actionability

The expandable section now reads “Individual AQI Pollutants” instead of “See Details”, making it obvious what users will find inside.

I also added a selector box to show which element is active or selected, improving interaction feedback.

Clearer Labeling and Actions

Clarity

Affordance/Feedback

IA

Actionability

The expandable section now reads “Individual AQI Pollutants” instead of “See Details”, making it obvious what users will find inside.

I also added a selector box to show which element is active or selected, improving interaction feedback.

New Addition

Dynamic Health Messaging

Accuracy

Content–Data Alignment

Contextual Messaging

Risk Communication

The health message below each monitor now updates based on the AQI level, so users see context-specific guidance instead of the same generic warning.

For example, safe levels show reassuring messages, while higher levels provide relevant health cautions.

Dynamic Health Messaging

Accuracy

Content–Data Alignment

Contextual Messaging

Risk Communication

The health message below each monitor now updates based on the AQI level, so users see context-specific guidance instead of the same generic warning.

For example, safe levels show reassuring messages, while higher levels provide relevant health cautions.

Redesign "Safe" Health Messaging

Redesign "Safe"
Health Messaging

Redesign "Hazardous" Health Messaging

Redesign "Hazardous"
Health Messaging

Dynamic Health Messaging

Accuracy

Content–Data Alignment

Contextual Messaging

Risk Communication

The health message below each monitor now updates based on the AQI level, so users see context-specific guidance instead of the same generic warning.

For example, safe levels show reassuring messages, while higher levels provide relevant health cautions.

Dynamic Health Messaging

Accuracy

Content–Data Alignment

Contextual Messaging

Risk Communication

The health message below each monitor now updates based on the AQI level, so users see context-specific guidance instead of the same generic warning.

For example, safe levels show reassuring messages, while higher levels provide relevant health cautions.

Redesign "Safe" Health Messaging

Redesign "Hazardous" Health Messaging

Compare Monitors Redesign

Compare Monitors

Old Design Findings

Compare Monitors Tab

Expanded Compare Monitors

Monitor Search Results

Visually crowded layout

The tab feels overloaded, too many controls, badges, and labels clustered together with minimal spacing and contrast, so nothing stands out.

Low-contrast labels

Several label colors don’t meet contrast guidelines, making AQI numbers hard to read against their backgrounds.

Dropdown label on the border

The AQI pollutant dropdown uses a label that sits on the bounding box (floating label style) in a way that clips/overlaps, reducing clarity and accessibility.

Repetitive “AQI” labeling

“AQI” appears repeatedly in line items and headers, creating label noise without adding meaning.

Hue-only series differentiation

Monitor series are distinguished only by color, which fails color-blind scenarios and hurts multi-series reading.

Hard-to-see AQI colors in search suggestions

The chips/suggestions rely on subtle hue shifts; in many cases, the AQI value and state aren’t legible at a glance.

Scroll Sideways

Visually crowded layout

The tab feels overloaded, too many controls, badges, and labels clustered together with minimal spacing and contrast, so nothing stands out.

Visually crowded layout

The tab feels overloaded, too many controls, badges, and labels clustered together with minimal spacing and contrast, so nothing stands out.

Low-contrast labels

Several label colors don’t meet contrast guidelines, making AQI numbers hard to read against their backgrounds.

Low-contrast labels

Several label colors don’t meet contrast guidelines, making AQI numbers hard to read against their backgrounds.

Hue-only series differentiation

Monitor series are distinguished only by color, which fails color-blind scenarios and hurts multi-series reading.

Hue-only series differentiation

Monitor series are distinguished only by color, which fails color-blind scenarios and hurts multi-series reading.

Hard-to-see AQI colors in search suggestions

The chips/suggestions rely on subtle hue shifts; in many cases, the AQI value and state aren’t legible at a glance.

Hard-to-see AQI colors in search suggestions

The chips/suggestions rely on subtle hue shifts; in many cases, the AQI value and state aren’t legible at a glance.

Dropdown label on the border

The AQI pollutant dropdown uses a label that sits on the bounding box (floating label style) in a way that clips/overlaps, reducing clarity and accessibility.

Dropdown label on the border

The AQI pollutant dropdown uses a label that sits on the bounding box (floating label style) in a way that clips/overlaps, reducing clarity and accessibility.

Repetitive “AQI” labeling

“AQI” appears repeatedly in line items and headers, creating label noise without adding meaning.

Repetitive “AQI” labeling

“AQI” appears repeatedly in line items and headers, creating label noise without adding meaning.

Visually crowded layout

The tab feels overloaded, too many controls, badges, and labels clustered together with minimal spacing and contrast, so nothing stands out.

Visually crowded layout

The tab feels overloaded, too many controls, badges, and labels clustered together with minimal spacing and contrast, so nothing stands out.

Low-contrast labels

Several label colors don’t meet contrast guidelines, making AQI numbers hard to read against their backgrounds.

Low-contrast labels

Several label colors don’t meet contrast guidelines, making AQI numbers hard to read against their backgrounds.

Dropdown label on the border

The AQI pollutant dropdown uses a label that sits on the bounding box (floating label style) in a way that clips/overlaps, reducing clarity and accessibility.

Dropdown label on the border

The AQI pollutant dropdown uses a label that sits on the bounding box (floating label style) in a way that clips/overlaps, reducing clarity and accessibility.

Repetitive “AQI” labeling

“AQI” appears repeatedly in line items and headers, creating label noise without adding meaning.

Repetitive “AQI” labeling

“AQI” appears repeatedly in line items and headers, creating label noise without adding meaning.

Hue-only series differentiation

Monitor series are distinguished only by color, which fails color-blind scenarios and hurts multi-series reading.

Hue-only series differentiation

Monitor series are distinguished only by color, which fails color-blind scenarios and hurts multi-series reading.

Hard-to-see AQI colors in search suggestions

The chips/suggestions rely on subtle hue shifts; in many cases, the AQI value and state aren’t legible at a glance.

Hard-to-see AQI colors in search suggestions

The chips/suggestions rely on subtle hue shifts; in many cases, the AQI value and state aren’t legible at a glance.

New Design

Redesign Compare Monitors Tab

Updated Color Palette

Updated Search Results

Monitor search options

Redesigned the search results so AQI numbers have high contrast and remain readable against the input background.

Removed the repeated “AQI” text and added a concise secondary label that states the air-quality status (e.g., “Good,” “Moderate”).

Monitor search options

Redesigned the search results so AQI numbers have high contrast and remain readable against the input background.

Removed the repeated “AQI” text and added a concise secondary label that states the air-quality status (e.g., “Good,” “Moderate”).

Monitor tags & toolbar layout

Increased spacing and improved contrast so the tags do not feel cramped next to the “Select 2 Nearby” and “Clear Selected” buttons.

Updated the tag design to improve contrast so the aqi number is clearly visible

Monitor tags & toolbar layout

Increased spacing and improved contrast so the tags do not feel cramped next to the “Select 2 Nearby” and “Clear Selected” buttons.

Updated the tag design to improve contrast so the aqi number is clearly visible

Monitor search options

Redesigned the search results so AQI numbers have high contrast and remain readable against the input background.

Removed the repeated “AQI” text and added a concise secondary label that states the air-quality status (e.g., “Good,” “Moderate”).

Monitor search options

Redesigned the search results so AQI numbers have high contrast and remain readable against the input background.

Removed the repeated “AQI” text and added a concise secondary label that states the air-quality status (e.g., “Good,” “Moderate”).

Monitor tags & toolbar layout

Increased spacing and improved contrast so the tags do not feel cramped next to the “Select 2 Nearby” and “Clear Selected” buttons.

Updated the tag design to improve contrast so the aqi number is clearly visible

Monitor tags & toolbar layout

Increased spacing and improved contrast so the tags do not feel cramped next to the “Select 2 Nearby” and “Clear Selected” buttons.

Updated the tag design to improve contrast so the aqi number is clearly visible

Expanded view for selected monitors

Removed redundant “AQI” labels and strengthened the contrast of the numbers so the key values stand out.

Added a secondary status label for each monitor so users can confirm meaning at a glance without relying only on color.

Added a “Current ” label for the primary monitor

Expanded view for selected monitors

Removed redundant “AQI” labels and strengthened the contrast of the numbers so the key values stand out.

Added a secondary status label for each monitor so users can confirm meaning at a glance without relying only on color.

Added a “Current ” label for the primary monitor

Individual pollutants inside the expanded view

Replaced the tight table layout with roomier dialog-style cards to improve readability for values, units, and labels.

Added explicit status labels to support users with color-vision differences, so severity is clear even without color.

Introduced a circular badge to highlight the primary pollutant, which makes the main driver immediately visible. (We do this in the previous design too.)

Individual pollutants inside the expanded view

Replaced the tight table layout with roomier dialog-style cards to improve readability for values, units, and labels.

Added explicit status labels to support users with color-vision differences, so severity is clear even without color.

Introduced a circular badge to highlight the primary pollutant, which makes the main driver immediately visible. (We do this in the previous design too.)

Updated Expanded Compare Monitors

Expanded view for selected monitors

Removed redundant “AQI” labels and strengthened the contrast of the numbers so the key values stand out.

Added a secondary status label for each monitor so users can confirm meaning at a glance without relying only on color.

Added a “Current ” label for the primary monitor

Expanded view for selected monitors

Removed redundant “AQI” labels and strengthened the contrast of the numbers so the key values stand out.

Added a secondary status label for each monitor so users can confirm meaning at a glance without relying only on color.

Added a “Current ” label for the primary monitor

Individual pollutants inside the expanded view

Replaced the tight table layout with roomier dialog-style cards to improve readability for values, units, and labels.

Added explicit status labels to support users with color-vision differences, so severity is clear even without color.

Introduced a circular badge to highlight the primary pollutant, which makes the main driver immediately visible. (We do this in the previous design too.)

Individual pollutants inside the expanded view

Replaced the tight table layout with roomier dialog-style cards to improve readability for values, units, and labels.

Added explicit status labels to support users with color-vision differences, so severity is clear even without color.

Introduced a circular badge to highlight the primary pollutant, which makes the main driver immediately visible. (We do this in the previous design too.)

Updated Expanded Compare Monitors

Graphs

Improving Graph Accessibility and Consistency

We currently use two types of charts across the JustAir platform

  • the default view and

  • the compare charts.

Both share similar usability and accessibility issues:

Default View

Compare Monitors View

Visual Overload

The charts display too much information at once . With dense X and Y-axis labels, low-contrast label colors, and excessive grid lines that add visual clutter, making it harder to focus on key insights.

Inconsistent Chart Styles

Two different chart styles are used in different sections, which breaks visual consistency. Unifying all graphs across the platform creates a more predictable user experience and improves accessibility.

Keyboard Navigation Support

The graphs already include basic keyboard navigation, which is a strong accessibility feature. My goal is to build on this foundation to make interaction smoother and more intuitive.

Color-Accessibility Gaps

Color-blindness testing reveals that the chart legends rely solely on color to distinguish data series. Without text, pattern, or shape differentiation, users with color-vision deficiencies cannot tell the lines apart.

Cognitive Simplicity for Quick Viewing

For casual or at-a-glance users, displaying a plot point for every hour feels overwhelming and difficult to interpret. Reducing visual density or grouping data improves readability and comprehension.

Scroll Sideways

Visual Overload

The charts display too much information at once . With dense X and Y-axis labels, low-contrast label colors, and excessive grid lines that add visual clutter, making it harder to focus on key insights.

Visual Overload

The charts display too much information at once . With dense X and Y-axis labels, low-contrast label colors, and excessive grid lines that add visual clutter, making it harder to focus on key insights.

Inconsistent Chart Styles

Two different chart styles are used in different sections, which breaks visual consistency. Unifying all graphs across the platform creates a more predictable user experience and improves accessibility.

Inconsistent Chart Styles

Two different chart styles are used in different sections, which breaks visual consistency. Unifying all graphs across the platform creates a more predictable user experience and improves accessibility.

Keyboard Navigation Support

The graphs already include basic keyboard navigation, which is a strong accessibility feature. My goal is to build on this foundation to make interaction smoother and more intuitive.

Keyboard Navigation Support

The graphs already include basic keyboard navigation, which is a strong accessibility feature. My goal is to build on this foundation to make interaction smoother and more intuitive.

Color-Accessibility Gaps

Color-blindness testing reveals that the chart legends rely solely on color to distinguish data series. Without text, pattern, or shape differentiation, users with color-vision deficiencies cannot tell the lines apart.

Color-Accessibility Gaps

Color-blindness testing reveals that the chart legends rely solely on color to distinguish data series. Without text, pattern, or shape differentiation, users with color-vision deficiencies cannot tell the lines apart.

Cognitive Simplicity for Quick Viewing

For casual or at-a-glance users, displaying a plot point for every hour feels overwhelming and difficult to interpret. Reducing visual density or grouping data improves readability and comprehension.

Cognitive Simplicity for Quick Viewing

For casual or at-a-glance users, displaying a plot point for every hour feels overwhelming and difficult to interpret. Reducing visual density or grouping data improves readability and comprehension.

Visual Overload

The charts display too much information at once . With dense X and Y-axis labels, low-contrast label colors, and excessive grid lines that add visual clutter, making it harder to focus on key insights.

Visual Overload

The charts display too much information at once . With dense X and Y-axis labels, low-contrast label colors, and excessive grid lines that add visual clutter, making it harder to focus on key insights.

Inconsistent Chart Styles

Two different chart styles are used in different sections, which breaks visual consistency. Unifying all graphs across the platform creates a more predictable user experience and improves accessibility.

Inconsistent Chart Styles

Two different chart styles are used in different sections, which breaks visual consistency. Unifying all graphs across the platform creates a more predictable user experience and improves accessibility.

Keyboard Navigation Support

The graphs already include basic keyboard navigation, which is a strong accessibility feature. My goal is to build on this foundation to make interaction smoother and more intuitive.

Keyboard Navigation Support

The graphs already include basic keyboard navigation, which is a strong accessibility feature. My goal is to build on this foundation to make interaction smoother and more intuitive.

Color-Accessibility Gaps

Color-blindness testing reveals that the chart legends rely solely on color to distinguish data series. Without text, pattern, or shape differentiation, users with color-vision deficiencies cannot tell the lines apart.

Color-Accessibility Gaps

Color-blindness testing reveals that the chart legends rely solely on color to distinguish data series. Without text, pattern, or shape differentiation, users with color-vision deficiencies cannot tell the lines apart.

Cognitive Simplicity for Quick Viewing

For casual or at-a-glance users, displaying a plot point for every hour feels overwhelming and difficult to interpret. Reducing visual density or grouping data improves readability and comprehension.

Cognitive Simplicity for Quick Viewing

For casual or at-a-glance users, displaying a plot point for every hour feels overwhelming and difficult to interpret. Reducing visual density or grouping data improves readability and comprehension.

The Redesign

Redesign Default View

Redesign Compare Monitors View

Redesign Default Hover/Click View

Redesign Compare Monitors Hover/Click View

Redesign
Compare Monitors Hover/Click View

Visual Consistency Across Graphs

To begin addressing the issues, I focused on making all charts visually consistent.

I adopted the colored AQI blocks from the Compare Charts and applied them to the Default Chart View as well. This creates a unified design language and helps users instantly recognize AQI levels across the platform.

Improving Accessibility for Color-Blind Users

Color-blindness testing revealed that relying solely on color in the Compare Monitors chart made it difficult for some users to distinguish between plotlines.

To fix this, I added non-color-based differentiation using line styles.

This ensures that each monitor’s data is visually distinct even for users with red-green or blue-yellow color vision deficiencies.

I also suggested icon-based differentiation (e.g., squares, triangles, circles). But if that's not possible, line patterns are better for continuous data and easier to maintain.

Simplified and Responsive Chart States

The charts now include distinct interaction states:

Default State: A clean, simplified view for quick scanning.

Hover State: Highlights relevant data points and grid lines on hover for contextual clarity.

Clicked State: Allows for Keyboard navigation and Displays detailed values and interactive labels.

This tiered interaction reduces noise while still offering detail when needed.

Reducing Visual Clutter

I streamlined the axes and grid system to make the data easier to read:

X-axis labels now appear every 5 hours instead of every hour.

Y-axis labels appear only at standard AQI thresholds (50, 100, 150, etc.).

Grid lines are removed from the default view and only appear on hover or click.

Each plotline is labeled directly on the line itself, so users don’t have to look back and forth between the chart and the legend.

These changes significantly improve readability and reduce visual clutter.

Scroll Sideways

Visual Consistency Across Graphs

To begin addressing the issues, I focused on making all charts visually consistent.

I adopted the colored AQI blocks from the Compare Charts and applied them to the Default Chart View as well. This creates a unified design language and helps users instantly recognize AQI levels across the platform.

Visual Consistency Across Graphs

To begin addressing the issues, I focused on making all charts visually consistent.

I adopted the colored AQI blocks from the Compare Charts and applied them to the Default Chart View as well. This creates a unified design language and helps users instantly recognize AQI levels across the platform.

Improving Accessibility for Color-Blind Users

Color-blindness testing revealed that relying solely on color in the Compare Monitors chart made it difficult for some users to distinguish between plotlines.

To fix this, I added non-color-based differentiation using line styles.

This ensures that each monitor’s data is visually distinct even for users with red-green or blue-yellow color vision deficiencies.

I also suggested icon-based differentiation (e.g., squares, triangles, circles). But if that's not possible, line patterns are better for continuous data and easier to maintain.

Improving Accessibility for Color-Blind Users

Color-blindness testing revealed that relying solely on color in the Compare Monitors chart made it difficult for some users to distinguish between plotlines.

To fix this, I added non-color-based differentiation using line styles.

This ensures that each monitor’s data is visually distinct even for users with red-green or blue-yellow color vision deficiencies.

I also suggested icon-based differentiation (e.g., squares, triangles, circles). But if that's not possible, line patterns are better for continuous data and easier to maintain.

Simplified and Responsive Chart States

The charts now include distinct interaction states:

Default State: A clean, simplified view for quick scanning.

Hover State: Highlights relevant data points and grid lines on hover for contextual clarity.

Clicked State: Allows for Keyboard navigation and Displays detailed values and interactive labels.

This tiered interaction reduces noise while still offering detail when needed.

Simplified and Responsive Chart States

The charts now include distinct interaction states:

Default State: A clean, simplified view for quick scanning.

Hover State: Highlights relevant data points and grid lines on hover for contextual clarity.

Clicked State: Allows for Keyboard navigation and Displays detailed values and interactive labels.

This tiered interaction reduces noise while still offering detail when needed.

Reducing Visual Clutter

I streamlined the axes and grid system to make the data easier to read:

X-axis labels now appear every 5 hours instead of every hour.

Y-axis labels appear only at standard AQI thresholds (50, 100, 150, etc.).

Grid lines are removed from the default view and only appear on hover or click.

Each plotline is labeled directly on the line itself, so users don’t have to look back and forth between the chart and the legend.

These changes significantly improve readability and reduce visual clutter.

Reducing Visual Clutter

I streamlined the axes and grid system to make the data easier to read:

X-axis labels now appear every 5 hours instead of every hour.

Y-axis labels appear only at standard AQI thresholds (50, 100, 150, etc.).

Grid lines are removed from the default view and only appear on hover or click.

Each plotline is labeled directly on the line itself, so users don’t have to look back and forth between the chart and the legend.

These changes significantly improve readability and reduce visual clutter.

Old Graph Interaction

Redesign Graph Interaction

Refining Legend Interactions

The Compare Monitors legend interaction is now intuitive and aligned with standard data-visualization behavior

Previously, clicking a label excluded that series and showed the rest, which felt reversed.

Now, clicking a legend label isolates that series, hiding the others.

Users can click additional labels to re-include them.

A “Reset View” button restores all series and returns the chart to its original zoom or position.

This aligns with how most analytics tools like Plotly, Chart.js, and Google Charts handle legend toggling.

Refining Legend Interactions

The Compare Monitors legend interaction is now intuitive and aligned with standard data-visualization behavior

Previously, clicking a label excluded that series and showed the rest, which felt reversed.

Now, clicking a legend label isolates that series, hiding the others.

Users can click additional labels to re-include them.

A “Reset View” button restores all series and returns the chart to its original zoom or position.

This aligns with how most analytics tools like Plotly, Chart.js, and Google Charts handle legend toggling.

Visual Consistency Across Graphs

To begin addressing the issues, I focused on making all charts visually consistent.

I adopted the colored AQI blocks from the Compare Charts and applied them to the Default Chart View as well. This creates a unified design language and helps users instantly recognize AQI levels across the platform.

Visual Consistency Across Graphs

To begin addressing the issues, I focused on making all charts visually consistent.

I adopted the colored AQI blocks from the Compare Charts and applied them to the Default Chart View as well. This creates a unified design language and helps users instantly recognize AQI levels across the platform.

Simplified and Responsive Chart States

The charts now include distinct interaction states:

Default State: A clean, simplified view for quick scanning.

Hover State: Highlights relevant data points and grid lines on hover for contextual clarity.

Clicked State: Allows for Keyboard navigation and Displays detailed values and interactive labels.

This tiered interaction reduces noise while still offering detail when needed.

Simplified and Responsive Chart States

The charts now include distinct interaction states:

Default State: A clean, simplified view for quick scanning.

Hover State: Highlights relevant data points and grid lines on hover for contextual clarity.

Clicked State: Allows for Keyboard navigation and Displays detailed values and interactive labels.

This tiered interaction reduces noise while still offering detail when needed.

Reducing Visual Clutter

I streamlined the axes and grid system to make the data easier to read:

X-axis labels now appear every 5 hours instead of every hour.

Y-axis labels appear only at standard AQI thresholds (50, 100, 150, etc.).

Grid lines are removed from the default view and only appear on hover or click.

Each plotline is labeled directly on the line itself, so users don’t have to look back and forth between the chart and the legend.

These changes significantly improve readability and reduce visual clutter.

Reducing Visual Clutter

I streamlined the axes and grid system to make the data easier to read:

X-axis labels now appear every 5 hours instead of every hour.

Y-axis labels appear only at standard AQI thresholds (50, 100, 150, etc.).

Grid lines are removed from the default view and only appear on hover or click.

Each plotline is labeled directly on the line itself, so users don’t have to look back and forth between the chart and the legend.

These changes significantly improve readability and reduce visual clutter.

Improving Accessibility for Color-Blind Users

Color-blindness testing revealed that relying solely on color in the Compare Monitors chart made it difficult for some users to distinguish between plotlines.

To fix this, I added non-color-based differentiation using line styles.

This ensures that each monitor’s data is visually distinct even for users with red-green or blue-yellow color vision deficiencies.

I also suggested icon-based differentiation (e.g., squares, triangles, circles). But if that's not possible, line patterns are better for continuous data and easier to maintain.

Improving Accessibility for Color-Blind Users

Color-blindness testing revealed that relying solely on color in the Compare Monitors chart made it difficult for some users to distinguish between plotlines.

To fix this, I added non-color-based differentiation using line styles.

This ensures that each monitor’s data is visually distinct even for users with red-green or blue-yellow color vision deficiencies.

I also suggested icon-based differentiation (e.g., squares, triangles, circles). But if that's not possible, line patterns are better for continuous data and easier to maintain.

5. Refining Legend Interactions

The Compare Monitors legend interaction is now intuitive and aligned with standard data-visualization behavior

Previously, clicking a label excluded that series and showed the rest, which felt reversed.

Now, clicking a legend label isolates that series, hiding the others.

Users can click additional labels to re-include them.

A “Reset View” button restores all series and returns the chart to its original zoom or position.

This aligns with how most analytics tools like Plotly, Chart.js, and Google Charts handle legend toggling.

5. Refining Legend Interactions

The Compare Monitors legend interaction is now intuitive and aligned with standard data-visualization behavior

Previously, clicking a label excluded that series and showed the rest, which felt reversed.

Now, clicking a legend label isolates that series, hiding the others.

Users can click additional labels to re-include them.

A “Reset View” button restores all series and returns the chart to its original zoom or position.

This aligns with how most analytics tools like Plotly, Chart.js, and Google Charts handle legend toggling.

Wind Information Panel

I wanted to find a balance between presenting enough wind information and keeping it easy to understand at a glance.

Wind roses were a required element, but showing a full traditional wind rose upfront can feel overwhelming or confusing for many users.

The goal was to offer clarity for people who are new to this kind of data while still providing the depth that more experienced users expect.

Wind Information Panel

Expanded Wind Information Panel

The dashboard shows wind speed and direction upfront, along with a brief contextual message to help users quickly understand current conditions. Additional details about wind behavior appear beneath that, and a button gives users the option to open the full wind rose if they want deeper insights. This structure supports both quick scanning and more advanced exploration, helping users understand real wind patterns that aren’t immediately obvious.

I believe this layout helps users gradually learn how to interpret wind roses by connecting them to the surrounding context. It encourages interactive learning, allowing users to explore and compare patterns to better understand real-world wind behavior. Over time, users can develop the confidence to read wind roses on their own, even without relying on the supplemental explanations.

Below are the different types of wind dialog cases I considered, including edge cases where multiple winds blow with similar strength. The goal here is to make sure the panel covers typical conditions and those less obvious, balanced cases.”

Global UI Improvements

I updated the dashboard’s primary blue to # 0055AA to preserve the JustAir look while passing contrast on light and white surfaces. I wanted to keep the brand hue, so I searched for a nearby blue that meets WCAG AA; this hit the balance between familiarity and legibility.

    

From there, I rebuilt the design system.

Thanks for stopping by !

Thanks for stopping by !

Thanks for stopping by !