Hailprint
An open hail-exposure map for Harris County that grades itself against NOAA storm reports.

Hailprint draws the MRMS MESH hail swath for each storm date over Harris County, Texas. It counts the HCAD parcels inside each size class and scores the swath against SPC hail reports at every whole-km radius. Every hail size on the site is a radar-estimated hail size with a confidence band: the published skill ceiling is an HSS of about 0.38 at 30 mm. The impact layers (warnings, power, internet) show their own sources and make no claim about a cause.
Site: https://hailprint.tomnguyen.me
Features
- Storms: one workspace per storm date. The map draws seven nested size classes (0.75 to 2.50 in) and the SPC report points. A map click opens an inspector with the size class at that point and the nearest report.
- Parcels: the parcel count per size class and per ZIP code, from HCAD footprints with the owner fields dropped at load.
- Score: the contingency table (hits, misses, false alarms, correct negatives) with POD, FAR, CSI, and HSS. A slider re-scores in the browser at any radius from 0 to 20 km.
- Scorecard: the pooled table over every published storm date, as a table, a 2 by 2 grid, and a threshold curve with the literature HSS line.
- Try it: tune the radius, check one point against every storm date, swipe-compare two storm dates, and copy the commands that rebuild one date.
- Method: five short pages on the data, the storm date, the size classes, the scoring, and the limits.
- Pipeline: the run log, the archive coverage per year, and the data sources.
- Receipts: every number opens a chip with its source, product, file, run time, and confidence band.
How it works
| Step | Command | Output |
|---|---|---|
| Archive index | hailprint index |
One row per MESH archive day from one S3 bucket listing |
| Candidate days | hailprint candidates |
Harris County hail days from the SPC WCM database and daily CSVs, ranked |
| Swath | hailprint ingest |
The 12Z daily max cropped to the county, dissolved into one polygon per size class |
| Parcels | hailprint parcels |
Distinct parcel counts per size class and per ZIP |
| Score | hailprint score |
Per-report distances and the contingency table for each storm date |
| Warnings | hailprint warnings |
NWS severe thunderstorm, tornado, and flash flood warning polygons for each storm date |
| EAGLE-I | hailprint eaglei |
One Parquet per year of county power outages, from the ORNL EAGLE-I download |
| Power | hailprint power |
Customers out and share out per metro county and 15-minute step, for each storm date |
| ODIN | hailprint odin |
One 15-minute snapshot of the open ODIN incidents, added to the file of the UTC day |
| Internet | hailprint internet |
Internet reachability per metro county and 15-minute step, from the IODA signal, for each storm date |
| Publish | hailprint publish |
Validated JSON under site/data/, each file with a receipt; --with-internet adds internet.json |
scripts/nightly.sh runs the steps for new storm dates. scripts/hailprint.cron starts it at 14:00 UTC and runs hailprint odin every 15 minutes. scripts/deploy.sh uploads the site to Vercel.
Documentation
- Getting started: requirements, install, data sources, commands, and checks.
- Operations: the nightly run, the cron entry, the deploy, and the
.envrules. - Site: routes, data path, basemap, and dev harness.
- Glossary and decisions.
- Documentation index: plans, research, and learn-loop entries.
Weekly reports: 01 · 02 · 03 · 04 · 05 · 06 · 07 · 08
Ground rules
- Outputs say "radar-estimated hail size" with a confidence band. They make no claim about what the hail did to a property.
- No homeowner names, mailing addresses, or contact data. Owner fields are stripped from HCAD parcels at load.
- Harris County only, HCAD footprints only, in v1.
- No secrets in the repo. The docs name each variable, never its value.
