Inspiration

EMERGE's Textbook 1 has a chapter called "Our Eyes in the Sky & On the Ground." I wanted to take that title literally and measure it: for each thing GLOBE volunteers record, how much does a satellite already know, and how many people are actually out there recording it?

The answer turned out to be an inverse relationship. Mosquito habitats, the measurements that remote sensing can't reproduce, are the ones fewest people are making. However, they happen to be the ones tied most directly to human health. Dengue had its worst year on record in 2024: 14.6 million cases, 12,000 deaths, and about half the world's population now living where it can spread. The mosquito that carries it breeds in a bucket, which satellite are physically unable to observe.

As a member of the GeoDI lab, I know how much data volume decides what research can even attempt. I wanted to use this hackathon to build something that thoroughly and graphically explains why GLOBE matters, to an audience who could go out and add to it.

What it does

An educational brief for the general public on how GLOBE works, built around an animated interactive county map of Florida showing GLOBE and ERA5 data across time and protocols.

Four GLOBE protocols are ordered by how well a satellite can already see them, and the number of people behind each one falls at every step:

Protocol Records Observers Counties ERA5 counterpart
Sky conditions 11,273 860 46/67 cloud_cover, same hour
Tree heights 1,813 314 41/67 none
Land cover 808 148 35/67 soil moisture, by analogy
Mosquito habitat 634 73 23/67 none

The map has two views — county density, or every individual reading coloured by what it recorded — plus an ERA5 layer you can slide in over the top. The ERA5 squares are drawn at their true 0.25° size, about 30 km across, so you can compare several observations inside singular cells. For tree height and mosquito habitat the squares render empty, because ERA5 has no variable to put in them.

Left alone, the map demonstrates itself, walking through the four protocols and animating the comparison.

How we built it

Data collection runs through one Python script, groundtruth.py. It downloads GLOBE records for a geographic bounding box, matches each observation to ERA5 at the same coordinate and the same UTC hour, and aggregates to US counties. The GLOBE API handling is built on my earlier project ask-globe, openly available through the GeoDI lab.

ERA5 comes from Open-Meteo's archive. Observations are displayed as ERA5's native 0.25° grid and deduplicated to 1,040 (cell, month) requests, cached on disk.

The site is a single static HTML page, with every number read from the exported data JSON so the visualisations carry over to future GLOBE and ERA5 snapshots.

Method follows EMERGE Textbook 1: Ch.3 L1 for the framing, Ch.2 L3 for the mapping, Ch.4 L5 for the county aggregation. Coding was assisted by Claude Code; the site is published via Vercel.

Challenges we ran into

Two protocols had to be discarded: Initially, pH and dissolved oxygen looked like strong community datasets at 2,309 and 1,721 records. Then I inspected distinct user IDs: 72% and 97% came from a single dedicated volunteer each. Valuable data, but not a demonstration of community observation. The finding became part of the project instead of a dead end — the site now warns users to count observers before counting rows.

The land cover protocol doesn't return what I assumed: After inspecting the data, I found that the GLOBE API response carries no land-cover classification at all. I rebuilt that panel around the site-condition fields it does carry — standing water, mud, dry ground — which fit better for my argument, since those are things ERA5 models but never observes.

Code I used to fix one thing broke another: When working on the map, a global canvas{max-width:100%} rule, added to stop a chart overflowing, later broke the Leaflet's canvas renderer to zero width once I switched the observation layer. This is a common issue when working with agents and vibe coding. Because I am not familiar with the technicality of Leaflet canvases myself, it took three wrong hypotheses and burned a lot of tokens before the problem was fixed, essentially stressing the importance of technical literacy even with vibe coding.

Visualization and design: As an educational site facing the general public, the hard part was deciding what to show and how. Axes, metrics and colour choices all had to be designed rather than defaulted, and the content was reorganised repeatedly to get it clear. Being a hackathon, I had to run the code, the writing, and my own inspection of the data in parallel to stay inside the time. Working with Claude Code, I went through 39 versions of the site, editing code and text by hand and prompting the agent to restructure the page through detailed instructions.

Accomplishments that we're proud of

The script matched 14,528 individual observations to ERA5 reanalysis at the same place and hour. The two correlate at r = 0.480 and differ by 28.6 percentage points on average. ERA5 regresses toward the middlee.g. finding cloud in skies people call empty and lightening skies people call solid, because its cell averages 30 km while a person looks at one sky. On 2,418 occasions ERA5 recorded rain in an hour when the person standing there reported dry ground. The site makes that gap visible rather than asserting it, stressing the uniqueness and importance of crowdsourced observations on environmental data.

Both the script and the site are reusable assets that I am proud of. The former allows effective congregations of two large datasets via API, and modifying the bounding box can change the region. As for the latter, new snapshots can be directly plugged.

Furthermore, this project puts NASA GLOBE in front of a larger audience who can act on it. It potentially allows for more public attention on the work of UF GeoDI and UF EMERGE especially in the state of Florida where we are.

What we learned

That ERA5 and a volunteer are answering different questions at different scales, and the gap between them is exactly the argument for keeping people in the field.

That data-literacy checks belong before analysis, not after; counting distinct observers took ten minutes and changed the entire shape of the project.

What's next for Ground Truth: GLOBE

Point it somewhere it matters more. As of now, the pipeline is region-agnostic. I plan to extend it to Brazil and Guatemala, countries UF GeoDI is already researching.

Close the tree-height loop. GEDI is the one instrument with something to say about canopy height. Comparing it against GLOBE's ground measurements is the obvious next analysis.

Fill the blank counties. 44 of Florida's 67 counties have no mosquito habitat observation at all. That's not a county without mosquitoes; it's a county where nobody has looked. The cheapest improvement on the whole page needs a phone and the GLOBE Observer app.

Hand the observer-count caution back to EMERGE. This project can potentially help with the preexisting EMERGE textbook, providing more experience and hints regarding GLOBE datasets. For example, it can contribute a suggestion to Textbook 1, Chapter 1 Lesson 6 that GLOBE volume and GLOBE participation are not the same number.

Built With

Share this project:

Updates

Submission history