Skip to content

InfraHub

Designing Google Maps for road maintenance.

Built for the U.S. state agencies that maintain public roads. It started as a single-screen freelance brief, became a demo for a startup accelerator, and grew into the product they use today.

Role
Product designer
Timeline
Aug 2023 – present
Team
2 cofounders, 2 devs
infrahub.com — County View
Washington County
PCI71
GoodFairPoor
43%48%9%
US-26Sunset HwyGood
90Route Score
88PCI
8.6Centerline Miles
43.0Lane Miles
Murray BlvdGood
83Route Score
81PCI
8.7Centerline Miles
34.8Lane Miles
OR-8Canyon RdFair
74Route Score
72PCI
10.4Centerline Miles
41.6Lane Miles
Allen BlvdPoor
52Asset Score
48PCI
3.0Centerline Miles
6.0Lane Miles
OR-217Good
87Route Score
85PCI
5.7Centerline Miles
17.1Lane Miles
Cornell RdGood
79Route Score
77PCI
12.8Centerline Miles
25.6Lane Miles
OR-210Scholls Ferry RdFair
70Route Score
67PCI
5.9Centerline Miles
23.6Lane Miles
OR-10Farmington RdFair
67Route Score
64PCI
11.3Centerline Miles
45.2Lane Miles
Hall BlvdPoor
46Asset Score
43PCI
5.4Centerline Miles
10.8Lane Miles
SW 185th AveFair
64Route Score
61PCI
8.3Centerline Miles
24.9Lane Miles
Cedar Hills BlvdGood
84Route Score
82PCI
3.2Centerline Miles
6.4Lane Miles
Walker RdFair
66Route Score
63PCI
7.1Centerline Miles
21.3Lane Miles
Streets
1 mi

4→1

Four disconnected tools became one product on a map

10

screens — All shipped and live, county map to state dashboard

YC '23

Earned a Y Combinator interview, though InfraHub didn't get in

Overview

Helping road agencies plan years of maintenance on one map.

InfraHub is software for the state agencies that maintain public roads, the Departments of Transportation, or DOTs. It helps them plan maintenance across a budget set years ahead. Everything they look after counts as an asset, from the road surface to the signs and guardrails along it.

Engineering built the product from my Figma, and I was the only designer across all three phases. It is live at infrahub.com, and I built the figures here in code, with help from AI. The demos run as real interfaces, played on scroll.

The arc

Phase 1 · 2023

Prototype

One-screen brief → YC demo

Phase 2 · 2024

Production rebuild

Live app, shipped

Phase 3 · 2024–25

Multi-year planning

Year board + budget forecast, shipped

Each phase answered a different question: can it work, can it ship, can it plan years ahead.

Problem

DOTs run road maintenance on notepads, Excel, and email.

InfraHub's cofounder and CEO laid it out in an early brief:

"The typical DOT today has limited to no information on their assets, uses notepads and static excel files to plan their work, executes the work via email/text/phone calls, and has effectively 0 reporting capability."

That's four separate jobs: understanding what you have, scheduling and budgeting the work, forecasting what that budget buys, and reporting on it. They were spread across notepads, spreadsheets and email, and reporting barely happened. InfraHub puts them in one place, on a map.

county-roads-2023.xlsx
C3fx41
A
B
C
D
E
F
1
Road
Miles
PCI
Condition
Last work
Next plan
2
OR-8 (TV Hwy)
6.0
76
Good
emailed crew 4/12
3
Murray Blvd
3.2
41
Poor
called Dave
?
4
Cornell Rd
4.8
58
Fair
5
Walker Rd
2.9
63
Fair
text 3/30
6
185th Ave
5.1
38
Poor
?
7
Baseline Rd
3.7
81
Good
8
Farmington Rd
4.4
55
Fair
call 2/2
9
Scholls Ferry
6.3
47
Poor
?
RoadsPlan (empty)+
My illustration of the status quo: one spreadsheet doing the job of four tools, and failing at three of them.

What grounded it

Four things were settled before I drew a screen.

The CEO had worked with a state Department of Transportation as a consultant, so he knew how its planners worked: who spots a problem, who schedules the fix, and how far ahead the budget is set.

Findings → decisions

Real DOT users at the CEO's consulting client already liked a road-condition map.

Bet the whole product on the map.

The person who spots a problem is the one who schedules the repair.

Create a job from any road or asset.

The CEO made office staff the main user over field crews, on a guess.

Every screen designed for a desktop.

Agencies commit budgets years ahead, so one-year plans never matched how they work.

Planning had to span multiple years.

What I had to go on, and the first decision each one drove.

He was still consulting for that DOT, so he showed the screens to users there and reported back. They liked the condition map and said they'd use it to group jobs by area. He and his cofounder also took it to trade exhibitions, with banners and cards I designed.

How it works

The map works one county at a time, three levels deep.

A county is the area a single planner is responsible for. The map goes three levels deep: the county, the streets in it, and the detail of any one road.

The four parts

UnderstandMap ViewCounty map, every road by condition
WorkPlanSchedule + budget the work, one job list
ForecastAnalyzeBudget scenarios vs. projected condition
ReportDashboardState rollup: condition, heat map, spend
One productInfraHub
Four parts, one product, all reading from the same county map.

Phase 1 · 2023

Three decisions from the first version that stuck.

InfraHub's CEO already had a working tool, and he hired me through Upwork to redesign it, one contract at a time for the whole project.

"Pretty average design, so I'd like to improve a lot here (particularly on the UX, how things flow together)."

My prototype carried his pitch into an interview at Y Combinator, the startup accelerator; he didn't get in, and he went full-time two months later.

County View

The 2023 tool, and the V1 redesign.

Before
The original InfraHub county view, 2023 — a dark map of a county's road network coloured by pavement condition, with a route-list panel on the right.
  • Eight numbers and two dropdowns. The Poor share is cut off.
  • Six numbers a card, so only three fit.
  • Good roads are teal, not green.
After
LocationWashington County
Centerline Miles
90.4
Lane Miles
300.3
Pavement Condition Index
71
43%
Good
48%
Fair
9%
Poor
Search
Pavement Condition Index
0
100
Filter
100 ft
Streets
  • Three groups: county, miles and PCI.
  • One panel lists the streets and opens a road in place.
  • Good, fair and poor in green, amber and red.
What the CEO handed me, with its problems marked, and my V1 redesign answering each one.

One plan was enough to ship.

My first sketch stacked several plans over a shared backlog, the pool of jobs nobody has scheduled yet. The CEO asked for one, and the DOT users he was showing it to ran one plan at a time. So we cut the stack to one plan, and years arrived later as columns inside it.

infrahub.com — Plan (V1, 2023)
The V1 multi-plan layout, rebuilt. Stacked plans push the backlog below the fold; pinning it would push the plans down.

Every colour had to mean something.

The CEO wanted the interface clean, but colouring every road by condition let his client's users spot the failing ones at a glance. Green and red are also the two a colour-blind reader can't tell apart, so in the panels every condition colour has its word beside it. That held through every phase.

The colour rule

Color = condition

Good75–100
Fair55–74
Poor0–54

Everything else = grayscale

Panels, bars, and text
Borders and dividers
The map underneath
Roads take the colour of their PCI, a condition score from 0 to 100. The failing ones are the first thing you see.

No icon kit covers DOT assets.

With one generic pin for every asset, a planner couldn't tell a sign from a guardrail on the map. No single library covers all nineteen road asset types, so I took the icons that existed and drew the rest myself, from signs and guardrails to curbs and crossings.

The asset system

Point14 assets, each drawn as a condition chip.
Stop
Yield
Warning
Fire Hydrant
Signal
Crosswalk
Curb Ramp
Rail Crossing
Drain Inlet
Manhole
Street Light
Street Tree
Bike Route
Work Zone
Line7 assets, each drawn as a pattern beside the road.
Road
Guardrail
Concrete Barrier
Curb & Gutter
Sidewalk
Lane Striping
Bike Lane
Area3 assets, each drawn as a tinted polygon.
Rest Area
Retention Pond
Maintenance Yard
ConditionLayered over any form.

Point

Line

Area

Each asset is one icon. The condition color is added when it's drawn, so the same icon covers good, fair, and poor.

How each asset type reads on the map: point, line, or area.

Phase 2 · 2024

The rebuild made the map the product.

By 2024 an engineer was building from my Figma. I tried the navigation as a rail and as a top-bar menu, with the streets list docked and floating. Every version gave the map a box to share with the controls. The map is what people come for, so I made it work the way the CEO had asked from the start:

"We're basically building a ‘Google Maps’, but for a specific use case, Departments of Transportation… The goal is to enable the DOTs to see / interact with those objects in a similar way to how you can interact with restaurants and shops on Google Maps." — the CEO, in the first brief

Navigation · explored

Making room for the map.

Icon rail · docked panel
InfraHub V2 brainstorm — County View with an icon rail down the left edge and the streets list docked to the right edge.
Icon rail · floating panel
InfraHub V2 brainstorm — County View with an icon rail down the left edge and the streets list floating over the map.
Top-bar menu · docked panel
InfraHub V2 brainstorm — County View with a module-switcher menu in the top bar and the streets list docked to the right edge.
Top-bar menu · floating panel
InfraHub V2 brainstorm — County View with a module-switcher menu in the top bar and the streets list floating over the map.
The live product · V2
InfraHub V2, live — County View with the navigation collapsed to a hamburger, an edge-to-edge map of Washington County coloured by pavement condition, with the top bar, the streets list and the map controls floating over it.
Four layouts from the V2 brainstorm, and the one that shipped: the map fills the screen, and everything floats on it.

The map shows more detail the closer you zoom.

The prototype only placed point assets, but the real product also needed lines, like curbs and guardrails, that stay legible at every zoom. Showing everything at once muddied the map, so the map scales detail to the zoom.

Detail follows the zoom

Zoomed out1/3

Assets group into a single cluster.

Mid-zoom2/3

The cluster splits apart.

Up close3/3

Each asset and line pattern reads on its own.

The same assets at three zooms: clustered far out, individual up close. Live map slices, not screenshots.

Condition and asset type filter the map together.

The first version only filtered by pavement condition, and the rebuild added asset type. A planner looking for poor-condition guardrails needs both filters at once, so I put them in one panel.

infrahub.com — County View · Filter
Washington County
PCI71
GoodFairPoor
43%48%9%
US-26Sunset HwyGood
90Route Score
88PCI
8.6Centerline Miles
43.0Lane Miles
Murray BlvdGood
83Route Score
81PCI
8.7Centerline Miles
34.8Lane Miles
OR-8Canyon RdFair
74Route Score
72PCI
10.4Centerline Miles
41.6Lane Miles
Allen BlvdPoor
52Asset Score
48PCI
3.0Centerline Miles
6.0Lane Miles
OR-217Good
87Route Score
85PCI
5.7Centerline Miles
17.1Lane Miles
Cornell RdGood
79Route Score
77PCI
12.8Centerline Miles
25.6Lane Miles
OR-210Scholls Ferry RdFair
70Route Score
67PCI
5.9Centerline Miles
23.6Lane Miles
OR-10Farmington RdFair
67Route Score
64PCI
11.3Centerline Miles
45.2Lane Miles
Hall BlvdPoor
46Asset Score
43PCI
5.4Centerline Miles
10.8Lane Miles
SW 185th AveFair
64Route Score
61PCI
8.3Centerline Miles
24.9Lane Miles
Cedar Hills BlvdGood
84Route Score
82PCI
3.2Centerline Miles
6.4Lane Miles
Walker RdFair
66Route Score
63PCI
7.1Centerline Miles
21.3Lane Miles
Streets
1 mi
Both filters in one panel: the condition slider above a single list of asset-type toggles, all controlling the same map.

A design system to keep it consistent.

With an engineer building from my Figma, one part had to look and behave the same wherever it appeared. I built a design system for it. One job card, for example, serves both the plan and a road’s detail panel, edited in place in both.

The InfraHub design system in Figma. Drag and zoom the canvas, or (Figma asks you to log in).

Phase 3 · 2024–25

Planning five years ahead, with AI finding the work.

The plan already had two views, a table and a map that stay in sync.

infrahub.com — Plan · List + Map
Washington County
PCI71
GoodFairPoor
43%48%9%
Search jobs
$727.7K / $1M
est $35.5K
Plan
1 mi
Plan before the year board: the same job list as a table and as a map, where picking a job flies the map to its road.

A board for planning across years, with AI suggesting the jobs.

Users wanted five years, and DOTs commit budgets that far out, so I added a board of year columns, like Trello. The CEO wanted the AI to find the jobs worth doing across thousands of roads. I designed its suggestions as cards the planner accepts or dismisses, so the decision stays with them.

infrahub.com — Plan · Multi-year Kanban
Washington County
PCI71
GoodFairPoor
43%48%9%
Search jobs
$727.7K / $1M
est $35.5K
Plan
1 mi
A board with a column per year. The AI fills the backlog on the left and tags each suggestion with where it came from. Refresh swaps the set, and you drag what you accept into a year.

Seeing what the budget buys.

Analyze shows where the county's road condition ends up under different budgets, before any money is committed.

infrahub.com — Plan / Analyze
Washington County
PCI71
GoodFairPoor
43%48%9%
20264$49.5K
20273$206K
20283$235K
20293$65K
20303$172.2K
Allen Blvd
OR-210Scholls Ferry Rd
SW 185th Ave
Backlog3est $35.5K
6
Plan
Search jobs
$727.7K / $1M
1 mi
The plan's budget, projected forward. Raising a year's spend bends the condition curve above it, so you see the trade-off while the number can still change.

A dashboard for the whole network.

The state-level view goes back to the first version, which I designed from the CEO's brief in 2023. It rolls the whole network up into the few numbers a director reports on.

infrahub.com — Report
Washington County
PCI71
GoodFairPoor
43%48%9%
1 mi
State Level Overview
Pavement Condition IndexGood
77
Centerline Miles
1,541mi
Lane Miles
3,289mi
Heat Map
Pavement Condition Index
6192
Key Components Overview
Pavement Index by YearPavement Index
Asset Condition
Asset
Quantity
% Defective
Pavement Index
1,541 miles
13.4%
Bridges and NBIS Culverts
137
8.7%
Crossline Pipes
10,447
28.6%
Non-NBIS Culverts
498
11.2%
Drainage
5,624
19.2%
Shoulders
824 miles
22.3%
Traffic Devices
4,117
2.3%
Signs
13,221
12.9%
Guardrails
275 miles
3.1%
Striping
2,568 miles
34.5%
Planning
Total Planned SpendAsset
$17.2M
Completed$4.3M
In Progress$4.1M
Delayed$0.8M
Not Started$8M
By status, $M / year
Pavements
Resurfaced
42/60mi
Preserved
151/165mi
Bridges
Rehabilitated
5/8
Repaired
24/28
Active Jobs
Route
Status
Treatment
Cost
Hwy 101
Not Started
Shoulder Maintenance
$35,000
I-95
In Progress
1.5" Resurfacing
$180,000
Mount Vernon Rd
Completed
Crack Seal
$12,000
Birch Lane
Delayed
Add Speed Bump
$5,000
Cedar Road
In Progress
Install Safety Signage
$4,000
US-26
In Progress
Mill & Overlay
$220,000
Route 9
Not Started
Bridge Deck Repair
$95,000
Riverside Dr
Not Started
Full-Depth Reclamation
$310,000
Highland Rd
In Progress
Culvert Replacement
$64,000
County Road 12
Completed
Chip Seal
$41,000
Elm Street
Completed
Pothole Patching
$8,500
Maple Ave
Not Started
Restriping
$18,000
3rd Avenue
Delayed
Sidewalk ADA Ramps
$22,000
Lakeshore Blvd
Not Started
Guardrail Upgrade
$27,000
Oak Hill Rd
Not Started
Fog Seal
$9,800
Report
Counties: AllSystems: All
The reporting screen: a condition score, a county heat map, and the spend and delivery breakdowns a director reports on.

Outcome + reflection

All four jobs now live in one product.

Ten screens shipped across three phases, and the work is still going. An agency that ran this on spreadsheets and email can now do it in one product.

I've never used the finished product myself. The CEO put it plainly: "InfraHub is going good, we are just growing slower than expected."

What shipped.

  • Map View: what the county has, and what condition it's in.

  • Plan: which jobs happen, when, and what they cost.

  • Analyze: which roads a budget saves.

  • State-level Dashboard: how the whole state is doing.

“…understanding when to take directions and when to push back with new and better ideas.”

Cofounder & CEO, InfraHub · in his review of the work

What slipped

The build never quite matched the design.

The CEO and I were specific about all of it: spacing, type, colour, icons, states. A lot of that drifted once engineering built it. I raised it and we fixed some. Getting the product working came first, so the rest shipped as built.

What I learned.

  • I’d stay until the build matched the design: between contracts, designs got rewritten in code without me, and small differences shipped. Next time I’d also ask to ship the front end myself.

  • The CEO’s DOT experience was my best research: it settled four decisions before I drew a screen, and users at his consulting client saw the first version.

  • One plan first, years when users needed them: the DOT users ran one plan at a time, so designing for several would have solved a problem nobody had yet.

Credits

Designed alongside the two cofounders, with two engineers building it and a teammate working with the agencies.

Next project · 02 / 03