Design process

From midterm prototype to final dashboard

The visualization went through three distinct directions before landing here - a static wildfire map, a hex-dot Investment Explorer, and an abandoned Observable recovery-timeline prototype. What survived is the risk/growth/investment framing, because it tested best with the people we actually put in front of it.

Where it started

Iteration one: a static map of historical LA wildfires as circles sized by acres burned and colored by decade
Iteration 1 - a static wildfire map. Fire history only, no investment framing.
Iteration two: the midterm Investment Explorer using hex-dot texture in a bright editorial palette
Iteration 2 - the midterm hex-dot Investment Explorer. Editorial, but hard to read as a market map.
Abandoned Observable prototype titled Burning Value, showing recovery timelines for Topanga, Calabasas, Agoura Hills, and Malibu
Abandoned direction - an Observable recovery-timeline prototype. Dropped after the risk/growth framing tested better.
Midterm dashboard with the household income layer active but the legend still showing the wildfire risk color scale
The stale-legend bug: income layer active, wildfire risk legend still on screen. Fixed in change 03.

Usability study

Nine participants each chose a persona to role-play - prospective homebuyer, homeowner, investor, real estate professional, or policymaker - and worked through three task sets: wildfire risk assessment, housing market recovery, and an investment recommendation they had to justify. All nine completed every task with minimal or no assistance.

Usability study summary slide: nine participants, six tasks, and main findings about the Investment Score, layer controls, clickable polygons, and search
Usability study summary - participants, tasks, and the findings that drove the change log below.

What worked

  • Tasks completed with little to no assistance.
  • Read as visually polished and professional.
  • Choropleth and wildfire layer interpreted correctly.
  • The Investment Category layer narrowed choices quickly.
  • Value in having wildfire, housing, and investment data in one place.

What didn't

  • The Investment Score was used but not understood.
  • Layer controls were overlooked entirely by some users.
  • Users expected ZIP polygons themselves to be clickable.
  • A search bar was requested for faster navigation.
  • Popups wanted more: insurance cost, inventory, school ratings, rental yield, fire history.
PriorityFindingImprovementStatus
MustThe Investment Score's calculation wasn't understoodⓘ explainer next to the scoreDone
MustLayer controls were overlookedEnlarged, bordered, labeled "Map layers - toggle to explore"Done
ShouldUsers expected ZIP polygons to be clickableClick/tap popups on every ZIP polygonDone
ShouldNo fast way to locate a neighborhoodZIP/city search boxDone
CouldRequests for insurance costs, rental yield, inventory, school dataAdditional popup datasetsNot this pass - blocked on sourcing new data
CouldInvestment terminology unfamiliar to less experienced usersGlossary and tooltipsPartially done
Won'tPredict future home values or insurance premiums-Out of scope

Four of the six actionable findings - both Must Haves and both Should Haves - are in the current build. The remaining Could Haves are blocked on sourcing new datasets rather than on interface work, which makes them the natural next step.

Change log

Change 01

Before

Iteration 1 had no investment framing - just historical fire locations sized by acres burned, with no way to compare neighborhoods as opportunities.

After

Added an Investment Score and ranked "Top Picks" markers.

Turns "here's where fires happened" into "here's where to look first."

Change 02

Before

Hex-dot texture map in a bright editorial palette - reads like a data-journalism graphic.

After

Smooth ZIP-boundary choropleth, closer to a Zillow/Redfin-style market map.

More context and more trust - testers described the result as "something Zillow or Redfin could build."

Change 03

Before

The legend was only ever correct for the default layer; switching layers left a stale or missing scale. A real bug, present since the midterm build.

After

One legend panel that re-renders to match whichever layer is active.

A color scale that doesn't match the screen is worse than no legend - it actively misleads.

Change 04

Before

"10-Year Price Appreciation (Fraction)," "Investment Opportunity Score," the percentile formula spelled out in the header.

After

Plain-language labels ("Price Growth," "Investment Score") and a one-click ⓘ explainer.

Answers the study's #1 finding - testers could see the score but not explain it, and wanted the dashboard to work "without me explaining it."

Change 05

Before

Dark, saturated "financial terminal" palette for the Investment Category layer.

After

Soft pastel palette plus matching pastel pins, checked for legibility on every layer.

More approachable on first impression without losing readability.

Change 06

Before

No search; only the numbered pins were clickable and ZIP polygons responded to hover.

After

ZIP/neighborhood search box, clickable ZIP polygons, enlarged and labeled layer control.

Testers asked for search directly and expected polygons to respond to a click.

Change 07

Before

Default system sans-serif throughout, same as any generic web page.

After

Cormorant Garamond for headlines, Inter for body copy and data.

A boutique real-estate feel instead of a generic corporate report.

Change 08

Before

Six togglable layers with no framing - users had to invent their own question.

After

The masthead opens with one question: "Which LA County ZIP codes are still worth the wildfire risk?"

Gives the visualization a single clear narrative instead of undirected exploration.

Bugs only a live map could surface

Layer-switch reliability

The original exclusivity logic reacted to Leaflet's internal overlayadd/overlayremove events, which could fire twice per click and sometimes leave a toggle with no visible change. Rewritten to react to the checkbox's own click event, then re-verified that exactly one layer is ever active.

Mobile layout

The masthead height was hardcoded for desktop line-wrapping, so on narrow screens the wrapped text overlapped the layer control. Fixed by measuring the rendered height in JS.

Pin numeral legibility

Zoomed into the numbered pins and found a bare "1" in the display serif rendering as a plain vertical stroke, easily misread as a capital "I." Pin numerals now use a sans-serif face with unambiguous digits.

Where it landed

The final dashboard as shipped, across desktop, mobile, and the Investment Type layer.

Final wildfire risk and investment dashboard on desktop, showing the wildfire risk choropleth, layer controls, and numbered top-pick markers
Final - desktop. One question in the masthead, a legend that tracks the active layer, and pastel top-pick markers.
Final dashboard on a narrow mobile viewport with the masthead text wrapping above the map
Final - mobile. Masthead height is measured at runtime so wrapped text never overlaps the layer control.
Final dashboard with the Investment Type layer active, showing pastel categories for opportunity zone, red flag, safe bet, and low priority
Final - Investment Type layer in the pastel palette, with a matching category legend.