2025-2026

Envizom Data Tables

One table component serving 4 modules across thousands of rows of regulatory air quality data, with filtering built for analysts.

Product Design

Sustainability

1 table design, 4 modules, and filtering that did not exist before

Envizom, Oizom's air quality platform, runs on tables. Reports, alerts, data validation and complaints are all fundamentally lists of readings, and the data behind them reaches compliance filings and government submissions.

I rebuilt the table as 1 component with cell height as a parameter, which let it serve 4 modules without a redesign for each. Then I added the 3-layer filter system and in-cell flagging that the old software had no answer for.

I was the only designer on the platform. That constraint is the reason this decision exists.

Service

Branding & Identity

Timeline

6 Weeks

Client

Nova Ventures

Location

Falls Church, VA

The table looked like the least interesting thing in the platform. It turned out to be the decision that made shipping 12 modules possible.

Problem

3 filter options against thousands of rows, and 4 different table views showing the same data.

The data volume and the filtering did not match. These devices produce continuous readings across multiple pollutants, multiple sites and multiple countries. The old software offered 3 filter options against that. A technical analyst looking for every hour where PM 2.5 breached a threshold while wind speed stayed low had no way to ask the question.

There were 4 table implementations with overlapping names. Reports, alerts, validation and complaints each had their own, which meant 4 sets of columns, 4 sort behaviours and 4 things to maintain.

Validating a bad reading meant opening a form. On a validation pass someone works through hundreds of rows marking outliers. A form per reading turns an afternoon into a week.

And AQI colours were applied to the numbers themselves. Yellow text on white sits at roughly 1.5:1 contrast. On a product where a misread value has health consequences, that is a correctness problem, not a polish one.

Solution

Make the variation a parameter instead of a redesign, then build the filtering an analyst actually needs.

Cell height became a preference, not a layout. 4 steps, set as a workspace default and adjustable per user, with content reflowing rather than stretching. Reports and alerts run at the comfortable variant because they are scanned. Validation and complaints run dense because they are worked row by row and every visible row is one less scroll. Same component, same columns, same filter grammar, same sort behaviour. When the same object appears in 4 contexts, the variation should be a parameter, not a redesign.

I moved the AQI colour instead of changing it. The bands are regulatory so I could not darken the yellow. The number returned to default text colour and the band moved to a small filled swatch beside it. Both encodings survive, the swatch stays small because it is no longer carrying legibility duty, and a table can now show 90 coloured indicators and still read as calm.

Flagging moved into the cell. Right click a reading, pick from 8 flag states that distinguish Maintenance from Calibration from Out of range, with bulk flagging available and every row still individually editable. I rejected keeping the form. The container was fighting the behaviour.

Concept

Conditional filtering did not exist in the old product. I introduced it and it changed who could use the software.

3 filter mechanisms, because there are 3 different questions. Basic filters are toggles on data families, one tap, no thinking, and they cover most people most of the time. Range filters are sliders paired with typed inputs and steppers, each bound carrying its AQI swatch so an analyst sees which band a threshold sits in while setting it. Someone exploring drags, someone with a number in mind types, someone nudging a boundary steps.

Conditional filters are the layer I argued for. Nested condition groups rather than a flat list, with Where, and, or connectors, drag to reorder, and operators typed to the data so dates offer Newest to Oldest where measurements offer Low to High. It is boolean logic handed to people who will never see a parenthesis.

That one addition is what let the technical analysts use the product directly instead of exporting everything to a spreadsheet first. The table stopped being a place to look at data and became a place to interrogate it.

More Works

(NK® — 02)

©2024

FAQ

01

What does a project look like?

02

How is the pricing structure?

03

Are all projects fixed scope?

04

What is the ROI?

05

How do we measure success?

06

What do I need to get started?

07

How easy is it to edit for beginners?

08

Do I need to know how to code?

2025-2026

Envizom Data Tables

One table component serving 4 modules across thousands of rows of regulatory air quality data, with filtering built for analysts.

Product Design

Sustainability

1 table design, 4 modules, and filtering that did not exist before

Envizom, Oizom's air quality platform, runs on tables. Reports, alerts, data validation and complaints are all fundamentally lists of readings, and the data behind them reaches compliance filings and government submissions.

I rebuilt the table as 1 component with cell height as a parameter, which let it serve 4 modules without a redesign for each. Then I added the 3-layer filter system and in-cell flagging that the old software had no answer for.

I was the only designer on the platform. That constraint is the reason this decision exists.

Service

Branding & Identity

Timeline

6 Weeks

Client

Nova Ventures

Location

Falls Church, VA

The table looked like the least interesting thing in the platform. It turned out to be the decision that made shipping 12 modules possible.

Problem

3 filter options against thousands of rows, and 4 different table views showing the same data.

The data volume and the filtering did not match. These devices produce continuous readings across multiple pollutants, multiple sites and multiple countries. The old software offered 3 filter options against that. A technical analyst looking for every hour where PM 2.5 breached a threshold while wind speed stayed low had no way to ask the question.

There were 4 table implementations with overlapping names. Reports, alerts, validation and complaints each had their own, which meant 4 sets of columns, 4 sort behaviours and 4 things to maintain.

Validating a bad reading meant opening a form. On a validation pass someone works through hundreds of rows marking outliers. A form per reading turns an afternoon into a week.

And AQI colours were applied to the numbers themselves. Yellow text on white sits at roughly 1.5:1 contrast. On a product where a misread value has health consequences, that is a correctness problem, not a polish one.

Solution

Make the variation a parameter instead of a redesign, then build the filtering an analyst actually needs.

Cell height became a preference, not a layout. 4 steps, set as a workspace default and adjustable per user, with content reflowing rather than stretching. Reports and alerts run at the comfortable variant because they are scanned. Validation and complaints run dense because they are worked row by row and every visible row is one less scroll. Same component, same columns, same filter grammar, same sort behaviour. When the same object appears in 4 contexts, the variation should be a parameter, not a redesign.

I moved the AQI colour instead of changing it. The bands are regulatory so I could not darken the yellow. The number returned to default text colour and the band moved to a small filled swatch beside it. Both encodings survive, the swatch stays small because it is no longer carrying legibility duty, and a table can now show 90 coloured indicators and still read as calm.

Flagging moved into the cell. Right click a reading, pick from 8 flag states that distinguish Maintenance from Calibration from Out of range, with bulk flagging available and every row still individually editable. I rejected keeping the form. The container was fighting the behaviour.

Concept

Conditional filtering did not exist in the old product. I introduced it and it changed who could use the software.

3 filter mechanisms, because there are 3 different questions. Basic filters are toggles on data families, one tap, no thinking, and they cover most people most of the time. Range filters are sliders paired with typed inputs and steppers, each bound carrying its AQI swatch so an analyst sees which band a threshold sits in while setting it. Someone exploring drags, someone with a number in mind types, someone nudging a boundary steps.

Conditional filters are the layer I argued for. Nested condition groups rather than a flat list, with Where, and, or connectors, drag to reorder, and operators typed to the data so dates offer Newest to Oldest where measurements offer Low to High. It is boolean logic handed to people who will never see a parenthesis.

That one addition is what let the technical analysts use the product directly instead of exporting everything to a spreadsheet first. The table stopped being a place to look at data and became a place to interrogate it.

More Works

(NK® — 02)

©2024

FAQ

01

What does a project look like?

02

How is the pricing structure?

03

Are all projects fixed scope?

04

What is the ROI?

05

How do we measure success?

06

What do I need to get started?

07

How easy is it to edit for beginners?

08

Do I need to know how to code?

2025-2026

Envizom Data Tables

One table component serving 4 modules across thousands of rows of regulatory air quality data, with filtering built for analysts.

Product Design

Sustainability

1 table design, 4 modules, and filtering that did not exist before

Envizom, Oizom's air quality platform, runs on tables. Reports, alerts, data validation and complaints are all fundamentally lists of readings, and the data behind them reaches compliance filings and government submissions.

I rebuilt the table as 1 component with cell height as a parameter, which let it serve 4 modules without a redesign for each. Then I added the 3-layer filter system and in-cell flagging that the old software had no answer for.

I was the only designer on the platform. That constraint is the reason this decision exists.

Service

Branding & Identity

Timeline

6 Weeks

Client

Nova Ventures

Location

Falls Church, VA

The table looked like the least interesting thing in the platform. It turned out to be the decision that made shipping 12 modules possible.

Problem

3 filter options against thousands of rows, and 4 different table views showing the same data.

The data volume and the filtering did not match. These devices produce continuous readings across multiple pollutants, multiple sites and multiple countries. The old software offered 3 filter options against that. A technical analyst looking for every hour where PM 2.5 breached a threshold while wind speed stayed low had no way to ask the question.

There were 4 table implementations with overlapping names. Reports, alerts, validation and complaints each had their own, which meant 4 sets of columns, 4 sort behaviours and 4 things to maintain.

Validating a bad reading meant opening a form. On a validation pass someone works through hundreds of rows marking outliers. A form per reading turns an afternoon into a week.

And AQI colours were applied to the numbers themselves. Yellow text on white sits at roughly 1.5:1 contrast. On a product where a misread value has health consequences, that is a correctness problem, not a polish one.

Solution

Make the variation a parameter instead of a redesign, then build the filtering an analyst actually needs.

Cell height became a preference, not a layout. 4 steps, set as a workspace default and adjustable per user, with content reflowing rather than stretching. Reports and alerts run at the comfortable variant because they are scanned. Validation and complaints run dense because they are worked row by row and every visible row is one less scroll. Same component, same columns, same filter grammar, same sort behaviour. When the same object appears in 4 contexts, the variation should be a parameter, not a redesign.

I moved the AQI colour instead of changing it. The bands are regulatory so I could not darken the yellow. The number returned to default text colour and the band moved to a small filled swatch beside it. Both encodings survive, the swatch stays small because it is no longer carrying legibility duty, and a table can now show 90 coloured indicators and still read as calm.

Flagging moved into the cell. Right click a reading, pick from 8 flag states that distinguish Maintenance from Calibration from Out of range, with bulk flagging available and every row still individually editable. I rejected keeping the form. The container was fighting the behaviour.

Concept

Conditional filtering did not exist in the old product. I introduced it and it changed who could use the software.

3 filter mechanisms, because there are 3 different questions. Basic filters are toggles on data families, one tap, no thinking, and they cover most people most of the time. Range filters are sliders paired with typed inputs and steppers, each bound carrying its AQI swatch so an analyst sees which band a threshold sits in while setting it. Someone exploring drags, someone with a number in mind types, someone nudging a boundary steps.

Conditional filters are the layer I argued for. Nested condition groups rather than a flat list, with Where, and, or connectors, drag to reorder, and operators typed to the data so dates offer Newest to Oldest where measurements offer Low to High. It is boolean logic handed to people who will never see a parenthesis.

That one addition is what let the technical analysts use the product directly instead of exporting everything to a spreadsheet first. The table stopped being a place to look at data and became a place to interrogate it.

More Works

©2024

FAQ

What does a project look like?

How is the pricing structure?

Are all projects fixed scope?

What is the ROI?

How do we measure success?

What do I need to get started?

How easy is it to edit for beginners?

Do I need to know how to code?

Create a free website with Framer, the website builder loved by startups, designers and agencies.