A weather and road conditions decision tool for Wyoming drivers and road crews.
Context
My husband is a road-maintenance tech for WYDOT. Before a storm, he and his crew have to make fast, consequential calls – brine or don’t, sand or don’t, get the plows ready or wait – and to make them, they’re stitching together forecasts, road-surface temperatures, WYDOT conditions, and timing windows across a handful of systems that were never meant to be read together. Often on a phone. Often in bad weather.
I built RoadSignal to put that picture into a single glance – and to serve the travelers and residents making the same “is this drive safe?” call from the other side of the windshield.
Role + Stack
Solo – product design, UX/UI, and full build
React Native (Expo) · Node/Express · Supabase · Tomorrow.io (weather) · NWS (official alerts) · Mapbox (geocoding)
Problem
How do you turn scattered, inconsistent public road and weather data into one trustworthy read that different people — a maintenance tech, a traveler, a resident — can each act on in seconds?
And, critically: how do you do that without ever implying more certainty than the data actually supports?
Details worth noting
- Honest data states: fresh · cached · stale · unavailable, so the app never implies certainty it doesn't have
- Impact-level language: Low / Moderate / High / Closed, drawn from real WYDOT feedback
- Data merged from three sources: Tomorrow.io (weather), NWS (official alerts), and WYOROAD (road/district conditions), reconciled into one read
Process
Discovery with a real operator. I worked from actual WYDOT workflows and user feedback, and defined the people the app had to serve: the on-call tech deciding on preventative treatment, the traveler adjusting plans, the resident who just wants the forecast.
Ruthless scoping. I wrote a tiered V1 – must-haves (current conditions, hourly and 7-day forecast, official alerts, freeze risk, road and air temp) separated cleanly from nice-to-haves (radar overlays, app-generated alerts) and later (predictive treatment models) – so the first version shipped instead of sprawling.
Defining the hard concept. “Routes” was ambiguous. I resolved it against how WYOROAD actually structures its data – region / route / direction / from / to – landing on highway segments and districts, not turn-by-turn navigation. That one decision shaped the entire Road screen.
A shared language for risk. I adopted a consistent impact-level system – Low / Moderate / High / Closed – drawn from real WYDOT feedback, so every recommendation across the app speaks the same plain English.
Key Decisions
Honesty over completeness. The non-negotiable principle: if the app doesn’t know, it says so. No fake road-surface forecasts, no invented precision. This is why I designed explicit fresh / cached / stale / unavailable data states – when a maintenance call or a drive depends on it, a confident wrong answer is worse than an honest “unknown.”
A decision layer, not a data dump. One clear, plain-English takeaway per screen instead of a wall of numbers -because the user needs a verdict fast, not a dashboard to interpret.
Foundation before intelligence. The recommendation layer – the brine/sand/prep guidance – was the original vision. But every recommendation is only as trustworthy as the data feeding it, and I was building on free-tier APIs with real limits. So I made the call to cut the recommendation logic from V1 and focus entirely on reliable, honest data pulls first. A decision layer built on flaky data would violate the app’s whole premise. Get the foundation trustworthy; earn the intelligence later.
Outcome
Shipped V1 to the App Store, solo, end to end – design, front end, and the backend that merges the vendor data. Reliable current conditions, hourly and 7-day forecasts, official NWS alerts, freeze-risk awareness, and location and road context – all built on a data layer I could actually trust, on a deliberately lean free-tier stack.
Reflection
V2 is the layer V1 set the table for: the operational recommendations — the brine/sand/prep calls and the early-warning alerts hours ahead of falling snow or high wind — now that the data foundation they depend on is solid and trusted.
