Embedding Atlas
Ask eye about a US place and get a cited, dated public record: where it comes from, when it was read, and what it leaves out.
A photorealistic 3D globe that fuses live public signals: every aircraft broadcasting ADS-B, ships on AIS, satellites propagated from CelesTrak elements, earthquakes as USGS reports them, open-data public cameras, upcoming rocket launches. And the thing the others don't do: the water that keeps communities alive. Rivers, lakes and reservoirs with their live gauges, the aquifers under them, this week's drought, and turbidity computed in your browser from the latest Sentinel-2 pass, with a community water report that shows its arithmetic. And, from the same public sources, the economy in aggregate: every harbour on Earth with US port volumes, every US land border crossing with monthly truck counts, countries shaded by trade with their partners drawn as arcs, and jobs, wages, home values and rents for every US county, with a market report that prints its formulas. And hazards and land: every current US wildfire perimeter with its containment, NASA's satellite fire hotspots, NWS warnings and GDACS disaster alerts with the severity their publishers give, FEMA flood zones, wetlands with the year they were mapped, and public and protected lands with their owners, managers and easement holders, a space-weather panel, NASA's live stream from the ISS, and tools that measure distance, area and ground elevation. And terrain and soils: 3D terrain with no key, USGS shaded relief, slope and 2 ft contours, NRCS soil survey map units with their farmland class and crop productivity index, wildfire hazard potential, land cover and sea level rise scenarios, a click on the ground that asks each publisher what is under it, and an elevation profile along any path. And infrastructure and geohazards: transmission lines, pipelines, every US power plant of 1 MW or more, rail, public-use airports, dams, Quaternary faults, landslides, geology and the PLSS survey grid with T-R-S search, AirNow air quality monitors (built, switched off until the operator returns AirNow's data-user form), conflict events GDELT codes from the news, cameras from six transport agencies, and a drawn area that lists what is inside it, watches it for arrivals and departures and prints a land report with its formulas. And parcels: lot lines from county and state parcel services, and a click on one for its record as its source publishes it, owner included where the source publishes one, with no search from a name to what anyone owns. And zoning, permits and licences: the zoning district ten cities' own GIS services put any point in, with its overlays and ordinance, the building permits seven cities issued in the last 30 days, licensed premises from five registries by trade name, and EPA's Clean Water and Clean Air Act facilities and the Corps of Engineers' permit actions anywhere in the United States. Dark HUD, scanlines, cinematic camera, voice control. Starts with zero API keys. MIT licensed.
Live: https://arxiviq.com (also https://gods-eye-view-rust.vercel.app; deploys from master). One hosting caveat: OpenSky refuses Vercel's egress, so the zoomed-out aircraft view there falls back to adsb.lol around the view centre plus the military feed; run it locally or add OpenSky credentials for the full global picture.
| Community water report over San Antonio | Sentinel-2 turbidity chips on Calaveras and Braunig lakes |
|---|
| |
| Night side, NASA Black Marble | Public camera dossier | Replay: ISS orbit at T−90 min |
|---|
| | |
Water: rivers, lakes, aquifers, and what the satellite sees
Four layers and one report, all keyless, all labelled by what they are.
| Layer | What it holds | Where it comes from |
|---|
| Surface water (on by default) | Rivers and lakes worldwide. Below 1,500 km camera altitude: every USGS stream and reservoir gauge in view with its latest flow, stage, temperature, dissolved oxygen, conductance, pH and turbidity; NWS flood category merged onto the gauge; Texas reservoirs with percent full. Each quality parameter is screened against a cited freshwater threshold and the site gets a screening index whose formula is printed next to it. Select a gauge for its 365-day trace and where today sits in it. | USGS Water Data API (latest-continuous, daily), NOAA NWPS, TWDB, Natural Earth 50 m |
| Aquifers & drought | This week's US Drought Monitor D0–D4 polygons draped on the terrain. Below 1,500 km: USGS monitoring wells with depth-to-water or water-level elevation and the national aquifer each well taps (Edwards, Ogallala, Floridan…). Select a well for its year of daily levels. | USGS Water Data API (latest-daily, monitoring-locations, national-aquifer-codes), USDM via the NDMC ArcGIS service |
| Turbidity (Sentinel-2) · ESTIMATE | Below 300 km over water: the browser finds the latest Sentinel-2 L2A scene on or before the mission clock (set the clock back, e.g. say "rewind 240 hours" or run gev.run("set_time", { offset_minutes: -14400 }), and it picks the newest scene before that time; the ±24 h slider rarely crosses a revisit), range-reads B04/B03/B08/B8A/SCL straight from the public COG bucket in a Web Worker, masks water, runs the Dogliotti (2015) semi-analytical turbidity algorithm on every water pixel and reports 640 m chips as median / p10–p90 FNU, drawn as a raster and as clickable chips. Where a USGS turbidity gauge sits inside a chip, its latest reading is shown next to the estimate, and its mean within ±2 h of the overpass when USGS still holds instantaneous values for that window, so the gap is visible. | Copernicus Sentinel-2 via Element 84 Earth Search (STAC + COGs), Dogliotti et al. 2015, USGS continuous |
| Rivers and streams (NHD) | A picture at every height: the USGS National Hydrography Dataset as The National Map draws it (streams, rivers, canals and water bodies; refreshed September 2026); while it is on, Surface water stops drawing Natural Earth's generalised rivers. Click the ground for the NHDPlus V2 reach the point drains to: its name, NHD type, stream order, drainage area and two modelled mean annual flows (EROM gauge-adjusted and runoff-only, cfs; model output, not a measurement; -9999 reads "not published"). Then trace it: (100 km), , and (150 km). The same three buttons are on every USGS gauge. A river path by flowline, not the HUC-12 chain of "Watersheds downstream". |
Community water report (top bar → Water, or say "water report for San Antonio"): drought class at the camera target, capacity-weighted reservoir storage within 150 km, gauge flood status and quality within 75 km, wells and named aquifers within 75 km, satellite turbidity within 30 km, and a supply-stress estimate that prints its weights, its normalised terms and which terms were missing. Every line links to the feature it came from.
What the turbidity layer is and is not. It is the physics "teacher" that the TurbidityVision project (a separate, distilled LightGBM model; its explainer is the reference for the recipe below) learns from: T = A·ρw / (1 − ρw/C) with Dogliotti's published red (A 228.1, C 0.1641) and NIR (A 3078.9, C 0.2112) coefficients, blended between ρ_red 0.05 and 0.07, on the water mask SCL 6 ∪ (NDWI > 0.05 ∧ ρB08 < 0.10) minus cloud, shadow, snow and saturated classes. The distilled model's boosters are not bundled here. The numbers are estimates of a physical quantity from reflectance, not measurements, not regulatory values; the chip dossier says so, the layer tag says so, and the p10–p90 is the spread inside the chip, not model uncertainty.
Validation before shipping: the pipeline in lib/water/ was run on the explainer's own Bexar County scene S2A_14RNT_20250118_0_L2A and reproduced its per-reservoir medians (Calaveras 4.47 vs 4.44 FNU, Braunig 4.02 vs 4.04, Mitchell Lake 15.98 vs 15.7). The same run settled the DN→reflectance question empirically: on this bucket ρ = DN/10000 passes the dark-water / land-NDVI / negative-fraction check and the STAC offset −0.1 metadata does not (70 % negative reflectances), so the worker tries both conventions on every scene, keeps the one that passes and prints the check in the dossier.
Trade, commerce and home values
Three more layers and a second report. Same rules: keyless, published values only, estimates labelled with their arithmetic. These three are aggregates by design: counties, metros, states, harbours and ports of entry.
| Layer | What it holds | Where it comes from |
|---|
| Ports & trade | 3,807 harbours from the NGA World Port Index with size, harbour type, channel and pier depths, facilities and LOCODE (large ones from orbit, every one below 250 km). 45 of the 55 port authorities in the BTS Port Performance dataset (the ones that name a harbour city; ten river districts are left off) carry its statistics: container TEU and total tonnage by year with the national rank, imports / exports / empties, top commodities, vessel calls. Every US land port of entry with 25 months of trucks, trains, buses, personal vehicles and pedestrians (BTS Border Crossing Entry Data, latest month). Countries shaded by goods-and-services trade with GDP, exports, imports, trade share of GDP and container throughput from the World Bank; select a country and its top export markets and import sources arrive as arcs from WITS TradeStats. | NGA Pub 150 (bundled snapshot, scripts/economy-data.mjs refreshes it), data.bts.gov, World Bank WDI + WITS, Natural Earth 110 m |
| Jobs & wages | Every county (states above 2,500 km): establishments, third-month employment, total quarterly wages and the average weekly wage from the BLS Quarterly Census of Employment and Wages for the newest quarter published, with BLS's own over-the-year changes. Glyphs colour by the jobs change; select a county for its private-sector NAICS mix with location quotients. Cells BLS withholds stay blank. | BLS QCEW open-data CSV (industry/10 for every area, area/<fips> on selection), Census TIGERweb generalized polygons |
| Home values · ESTIMATE | Every county Zillow models (about 3,070) filled by the one-year change in the typical home value, with the five-year change, the typical rent where ZORI covers it (about 1,390 counties), price-to-rent, and on selection a ten-year trace against the national value plus a mortgage-against-wages line: principal and interest on the typical home at this week's Freddie Mac rate, as a share of one average job's pay in that county, with the formula printed. | Zillow Research ZHVI and ZORI public CSVs (data through Zillow), FRED MORTGAGE30US, Census TIGERweb |
Market report (top bar → Market, or say "market report for Austin"): the county under the camera target with its home value and rent changes against the metro and the nation, the affordability estimate, jobs and wages with the sectors concentrated there, the ports and border crossings within 200–250 km ranked by volume, a national pulse from FRED and the BTS supply-chain indicators (mortgage rate, unemployment, retail sales, trade balance, housing starts, Case-Shiller, containerized imports, Shanghai→LA box rate, ships waiting for a berth, diesel), and a momentum index: a weighted mean of the published one-year changes in home values, rents, jobs and wages, each clipped to a stated scale, weights printed, missing terms listed. It is an index of published changes, not a forecast and not advice.
Where the numbers come from and what was checked before shipping: the Census Bureau's data API now requires a key, so nothing here uses it; county geometry comes from TIGERweb's generalized services, which answered a Texas-sized box (429 counties at 1:20M) in about half a second. BLS QCEW answered 2026 Q1 for all 3,275 county totals with no suppressed county totals (sector cells can be). Zillow's county file carried a July 2026 value for all 3,071 counties and a five-year comparison for 3,020. BTS port authorities were placed by matching their harbour city to a World Port Index entry within 150 km of the geocoded city; the four with no WPI entry (Palm Beach district, Pittsburgh, South Louisiana, St. Louis) sit at the city and say so in the dossier; ten river districts that name no city are left off. WITS's newest bilateral year was 2023 at the time of writing, and the arcs say which year they are.
Hazards & land
Six more layers, a panel and three tools. Same rules: keyless, each value as its publisher sent it, and every severity in the publisher's own words. A source that rates nothing (EONET volcanoes, an NWS alert marked "Unknown", FEMA zone D) is drawn in its own "not rated" violet and says so; it is never drawn as calm.
| Layer | What it holds | Where it comes from |
|---|
| Wildfires (US) | Every current US wildland fire in the interagency system: perimeters with acres, percent contained, discovery date and how old the perimeter is, counted from the time WFIGS says the perimeter was captured (about a quarter of current perimeters publish no capture time; those say so rather than borrow the record's edit time, which can run weeks later), and the incident point for fires with no perimeter yet. The "current" services keep a fire until it is declared contained, controlled or out, so a 100 %-contained fire can still show; containment is on every feature and a fire that reports none says "not reported", never 0. Prescribed fires are violet. | NIFC WFIGS Current Interagency Fire Perimeters + Current Wildland Fire Incident Locations (IRWIN) |
| Active fires | Every thermal hotspot NASA's satellites saw in the last 24 hours, worldwide: VIIRS 375 m (Suomi NPP, NOAA-20) and MODIS 1 km (Terra, Aqua), with fire radiative power and acquisition time. The server reads the three 24 h files (about 19 MB) every 30 minutes and cuts them to the view; above 5,000 in a view they are binned and each cell shows its brightest detection with the count it stands for; the field, the strata rail and a construct's "inside" list count a cell as those detections, not as one. Confidence stays on each instrument's scale (VIIRS low / nominal / high, MODIS 0–100 %). A hotspot is a hot pixel, not a confirmed fire. | NASA LANCE FIRMS global 24 h CSVs |
| Hazard alerts | Active NWS watches, warnings and advisories with severity, urgency and certainty; every event GDACS marks current worldwide (cyclones, floods, droughts, volcanoes, wildfires, earthquakes) with GDACS's Green / Orange / Red level, Orange and Red labelled on the globe; NASA EONET open volcano events. An NWS alert is drawn as the polygon NWS published, or else as the counties its SAME codes list (and says so); marine and zone-only alerts with no county are counted in the layer note, not drawn. GDACS's RSS feed is the list (it carries every event type and says which are current; ended ones are left out), merged with GDACS's latest-100 list and a search for current Orange and Red events, so the highest-rated can never fall off a capped list; the note says "GDACS list may be incomplete" when it might be. Two other layers draw some of the same events, and this one steps aside only while they are on and drawing the event themselves: a GDACS quake that the USGS 24 h feed also has (within 100 km and 30 min) is left to the Earthquakes layer, and only when GDACS rates it Green (Orange, Red and unrated quakes always stay); an NWS alert rated Severe or Extreme is left to Live warnings (the constructs layer below, whose feed asks NWS for exactly those) only when that feed outlined it (the server marks it ) and Live warnings holds it on the map right now. An alert Live warnings could not outline (its zone lookups are capped), a live feed that failed, and a Live warnings layer that is erroring or still loading all leave the alert here, so a warning is never hidden from both layers. Moderate, Minor and unrated NWS alerts always stay here, and with both layers off every event is drawn here; the layer note counts what was left to whom and what stayed, and why. Toggling either layer re-sorts what is already loaded, without a refetch. Each source gets 20 s; a slow one is left out of that answer (and named) rather than holding up the rest. |
Hazard history (click a county on the National Risk Index, Social vulnerability or Wildfire risk ranks layers): the county's FEMA disaster declarations since 1953 per year by type (major disaster, emergency, fire management) and the newest ones by name; the U.S. Drought Monitor's weekly drought index since 2000 and this week's D0-D4 shares; NOAA Climate at a Glance annual temperature and precipitation since 1895 with the 1901-2000 mean (computed, labelled); NOAA SPC tornadoes per year since 1950; USGS landslide susceptibility; and NOAA NCEI Storm Events reports per year since 1996 for hail, thunderstorm wind, flash floods and every other type NWS logs by county (tornadoes are SPC's; a type's year that was mostly logged by forecast zone is blank, never 0; Alaska's rows are NCEI's own areas and get none). A declaration is a federal decision, not a measure of damage; a year with no declaration or tornado is left out, not drawn as 0, until the zero rule is decided. Connecticut's planning regions get drought only, because FEMA, NOAA and USGS publish its old counties. From /api/hazards?op=history; MCP county_history with topic: "hazards".
Space weather (top bar → sun, or the Space chip on a phone): the planetary Kp index for the last three days from GFZ Potsdam, recent values labelled preliminary as GFZ marks them, with NOAA's G-scale level when Kp reaches 5; solar flares of the last seven days and space-weather notifications of the last three from NASA's DONKI, "none reported" when the list is empty, and DONKI's own disclaimer that NOAA SWPC is the official source for forecasts.
ISS live stream: select the ISS (satellites layer) and its dossier embeds NASA's own stream from the station. The server asks YouTube's official oEmbed endpoint about one stream id, NASA's "Live Video from the International Space Station (Official NASA Stream)", every 30 minutes: it must be embeddable, on NASA's own channel (https://www.youtube.com/@NASA; display names are not unique) and titled as the Space Station stream. If any check fails the block is not shown and /api/space?op=iss-stream says why (the page's CSP allows exactly one frame host, https://www.youtube-nocookie.com); when NASA replaces the stream, the id in lib/space/sources.ts is updated by hand. No YouTube page is fetched: YouTube's Terms of Service bar automated access other than by search engines. The player is 200 px tall, YouTube's minimum embedded viewport, does not autoplay and has nothing drawn over it.
Measure (top bar → ruler, or the Measure chip on a phone): click the globe to lay out a path (geodesic length on the WGS84 ellipsoid) or an area (area on the equal-area authalic sphere, Rq = 6,371,007.2 m, perimeter as geodesics), with the formula printed under the readout; or click the ground for its elevation from USGS 3DEP with the source DEM's resolution. The drawn shape travels in share links. Esc leaves the tool and keeps the shape. While a tool is on, clicks place points instead of selecting, and a shift-click or long-press is a measure click, not a compare pin.
What was checked before shipping (2026-09-25): WFIGS answered with 167 perimeters and 460 incident points; FIRMS's NOAA-20 file held 102,124 detections; NWS had 545 active alerts, of which 64 carried a polygon; the batch zone endpoint returns zones without geometry, which is why the county fallback exists. FEMA resets a share of connections, so its route retries; each land box is cached for a day.
Re-checked 2026-09-26: GDACS's RSS feed listed 280 events, 226 of them current, while EVENTS4APP stops at the latest 100; the merged list held 243 current events, the only current Orange one being tropical cyclone ONE-26 (five Orange droughts and an Orange flood in the feed had ended, and GDACS marks them not current). 39 of 162 current WFIGS perimeters published no capture time. FEMA's layer 28 answered 243 zones for the downtown San Antonio box the preset loads, one with a published base flood elevation (634.5 ft NAVD88); the NWI answered 395 polygons around Mitchell Lake, 394 of them in two projects mapped from March 1983 colour-infrared imagery at 1:58,000; PAD-US answered 1,402 areas around Government Canyon State Natural Area (12,344 acres, open access, GAP 2), 742 of them easements. A 2° Front Range box (Denver and Boulder) is 1.3 MB and the Bay Area 0.9 MB after the 600-unit cap and part trimming; before them the Front Range was 4.8 MB, over the 4.5 MB Vercel allows a function response.
Terrain, soils and land cover
Seven picture layers, 3D terrain with no key, an elevation profile and a click on the ground that asks what is under it. Same rules: keyless, each value as its publisher sent it, and each picture its publisher's own rendering. A picture has no feature to click, so while one of these layers is on, a click on the ground below 150 km opens a ground here dossier: the soil, the hazard class, the land cover class, the slope or the elevation at that point, each asked of the service that draws it, and only for the layers that are on.
| Layer | What it holds | Where it comes from |
|---|
| Shaded relief | USGS's hillshade of the national elevation data, from orbit to street scale. USGS caches it to level 13 (about 17 m a pixel at 30° N); closer in, the globe magnifies level 13. A click gives the ground elevation from 3DEP with the source DEM's resolution. | USGS The National Map, Shaded Relief (3DEP; GMTED2010 at small scales) |
| Slope (3DEP) | Below 250 km: slope as USGS renders it from the 3DEP bare-earth DEM (1 m lidar where flown), in USGS's own colours, yellow to red as it steepens. A click gives the slope in whole degrees from 3DEP's "Slope Degrees" function. | USGS 3DEP dynamic elevation service, through /api/terrain |
| Contours 2 ft (3DEP) | Below 4 km: the 2 ft contour lines USGS draws from the same DEM, unlabelled, recoloured from black on white to pale lines on transparent so they read on the dark globe. Where the DEM under them is the 1/3 arc-second one (about 10 m) rather than lidar, a 2 ft interval shows more detail than the data holds; the click answer gives the source DEM's resolution, so you can tell which. | USGS 3DEP "Preset 2ft Contour Interval", through /api/terrain |
| Soils (SSURGO) | Below 40 km: NRCS soil survey map units outlined with their map symbols. The click answer: the map unit, NRCS's farmland classification for it, its main soil with its share of the unit, and that soil's NCCPI, NRCS's National Commodity Crop Productivity Index (0 to 1, with NRCS's own class words). A soil NRCS did not rate says "not rated", never 0. The survey area and the date its data was last saved come with it. A survey rating, never a price or a parcel score. | NRCS Soil Data Mart WMS; Soil Data Access in two queries (point to map unit, map unit to components) |
| Wildfire hazard potential · ESTIMATE | USFS Wildfire Hazard Potential 2023 in its seven classes (very low to very high, non-burnable, water) at 270 m for the conterminous US, landscape as of the end of 2020. In USFS's words, "an index that quantifies the relative potential for high-intensity wildfire that may be difficult to manage"; "On its own, WHP is not an explicit map of wildfire threat or risk", and it is not a forecast. The class labels and colours are the service's own legend: its point answer is the class code only. | USDA Forest Service, Wildfire Hazard Potential 2023 (Dillon 2023) |
| Land cover (NLCD 2021) | Below 2,500 km: the 2021 National Land Cover Database classes at 30 m for the conterminous US, in MRLC's legend colours. A class is what the pixel looked like to the classifier, not a land use or a zoning designation. |
Every picture has an opacity slider under its row, and the three with classes show their legend there.
FEMA's own flood map. Below 5 km the Flood zones layer also draws FEMA's rendering of the same zones (layer 28 only) across the whole view, through /api/terrain. The clickable zones over it are still the ones loaded inside the dashed box, and "outside the box: not loaded" still holds for them.
3D terrain with no key. Settings → Display → 3D terrain. With a Cesium ion token it is Cesium World Terrain, as before; without one it is AWS Terrain Tiles in the terrarium encoding, decoded in the browser into Cesium heightmap tiles. The tiles merge USGS 3DEP (about 10 m across most of the US), SRTM, GMTED2010, ETOPO1 and other national models by place. They carry ETOPO1's sea floor, which would leave ships and every layer drawn at 0 m floating over a drained ocean, so the globe draws any height below sea level at sea level; nothing that reports a height does. A slider exaggerates the relief from 1× to 3×; it stretches what you see, never a number. Known limit: lines drawn at 0 m (a measured path, rivers) can pass under hills while terrain is on.
Elevation profile. Draw a path with Measure → Distance and press Profile: 200 samples evenly spaced along the path, each height bilinear between the four nearest pixels of the same terrain tiles, at the deepest zoom that needs 16 tiles or fewer. The panel prints the start, end, lowest and highest heights, the climb and descent (the sums of the rises and of the falls between samples, which grow as the spacing shrinks), the spacing, the zoom and the pixel size there. It works worldwide and reads the tiles straight from AWS, with no call to this app's server.
What was checked before shipping (2026-09-26): every endpoint answered from this machine with Origin: https://eye.jcamd.com. Terrarium pixels decoded at four San Antonio points (Brackenridge Park, downtown, Government Canyon, Mitchell Lake) at zooms 12 and 15 agreed with USGS EPQS within 1.9 m. Soil Data Access answered each of the two queries in 170–370 ms: at 29.28° N, 98.45° W, San Antonio clay loam, 1 to 3 percent slopes, all areas prime farmland, NCCPI 0.455; open ocean answers {}, which the API returns as no map unit. WHP answered class 7 (water) on Canyon Lake and 6 (non-burnable) downtown, which pins its legend order; a 0.05° grid west of Colorado Springs answered classes 3 to 5 on the slopes and 6 in the city. MRLC's PALETTE_INDEX is the NLCD class code (24 downtown, 11 on Canyon Lake, 52 in the Hill Country). 3DEP rendered a 512 px slope tile in 1.6–3.7 s and a 2 ft contour tile in 0.6–1.7 s, which is why those go through a route the edge caches; the USGS relief cache stops at level 13 (level 14 is a 404) and NOAA's sea level caches at level 16.
Not built: 3D buildings. OpenFreeMap serves buildings only as Mapbox vector tiles (its building layer at zooms 13–14, with render_height and render_min_height), and CesiumJS draws no vector tiles. Buildings from it need a protobuf decoder and a per-tile extrusion pipeline that also seats each building on the terrain, which is its own piece of work; it is left for later rather than half done.
Infrastructure, geohazards, air and events
Twelve more layers, two panels and a search. Same rules: keyless, each value as its publisher sent it, sentinels dropped rather than shown. Owners and operators appear as the public registry publishes them (a transmission line's owner, a pipeline's operator, a railroad's reporting marks, a power plant's reporting entity), in the dossier only: ⌘K never reads them, they are never part of a feature's name, and nothing is joined across sources. Private-use airports, dam owner and designer names, and NID's representative field are not requested at all.
| Layer | What it holds | Where it comes from |
|---|
| Transmission lines | Below 500 km: lines of 69 kV and above coloured by voltage (765, 500, 345, 220–287, 100–161, under 100 kV, DC), with the owner, type, status and the substations HIFLD names at each end. HIFLD's -999999 "no voltage" and its UNKNOWN<n> / "NOT AVAILABLE" substations are dropped, not shown. HIFLD archived the layer; its last data update was 2024-09-30, and every line says so. | HIFLD U.S. Electric Power Transmission Lines (archive), hosted by Esri's Federal User Community |
| Pipelines (EIA) | Below 1,200 km: natural gas (interstate, intrastate, gathering), crude oil trunk, petroleum product and hydrocarbon gas liquids lines, with the system names and operators EIA publishes. EIA's generalized national maps: no diameter, pressure or depth, and not for locating a line (call 811). | EIA pipeline maps, hosted by Esri's Federal User Community |
| Power plants | Every US plant with generators of 1 MW or more from the newest EIA-860M monthly inventory (16,187 plants in August 2026, 1,487 of them planned only), coloured by the technology with the most nameplate capacity and sized by it: nameplate MW by technology, generator counts and statuses, planned additions and when, sector, balancing authority and the reporting entity. A generator EIA lists without a nameplate value is counted, never added as 0 MW. Outside the US, the nuclear plants Wikidata holds (286), with status and capacity only where Wikidata has them: capacity is the best-rank statement (the preferred one when Wikidata marks one) with its dates, and a plant with several figures Wikidata does not date is drawn unsized. From orbit, US plants of 500 MW or more; 50 MW below 1,500 km; all below 250 km. | EIA-860M (bundled monthly snapshot; node scripts/infra-data.mjs refreshes it), Wikidata (CC0) |
| Rail network | Below 120 km: main lines, branches, yards and sidings, Amtrak and commuter service, STRACNET, track counts and the owning railroads' reporting marks, with FRA's codes decoded from the service's own domains. Out-of-service and abandoned lines are dashed; track physically removed and rail-trails are left out. | FRA / BTS NTAD North American Rail Network |
| Airports (public use) | Below 2,500 km: FAA public-use airports, heliports and seaplane bases (PRIVATEUSE = 0 only) with the FAA location id, ICAO code, field elevation and whether an instrument approach is published. Not for navigation. | FAA Aeronautical Information Services, ADDS Airports |
Public cams now also draws Caltrans's CWWP2 cameras (all 12 districts, about 3,600), DriveBC's HighwayCams (about 1,030), Fintraffic's road weather cameras (about 810) and LTA's Singapore traffic images, beside TfL and NYC DOT, each within reach of the view. Every agency was added after reading its terms, which the dossier and the attribution name: Caltrans ("considered in the public domain"; CWWP2: "no charge for the use of this data"), the Open Government Licence – British Columbia for the BC Data Catalogue's HighwayCams dataset, CC BY 4.0 for Digitraffic, and the Singapore Open Data Licence for data.gov.sg. Two agencies were left out after reading theirs: TxDOT publishes no reuse terms for its ITS camera feed (its website disclaimer grants none, and its GIS data "was produced for internal use"), and Rijkswaterstaat's camera list is its website's own backend with no published terms and video embeds with no still. DriveBC and Caltrans publish a compass word for some cameras; the dossier shows it as published, and no bearing is drawn.
Area (Measure → Area, then What's inside): the drawn area as an area of interest. Inside lists what the loaded layers hold inside it, by layer, and saves it as GeoJSON (with the area) or CSV. Watch reports what arrives and what leaves among the layers that come and go (aircraft, ships, earthquakes, active fires, wildfires, hazard alerts, live warnings, news events; aircraft by ICAO hex and ships by MMSI, with the callsign or registration and the vessel name as each feed reports them, the operator's decision): the first pass sets the baseline silently, and so does a layer's first answer for another view or from other sources (Aircraft's OpenSky falling back to adsb.lol, Ships without Digitraffic or without a live AISStream socket); a layer switched off, failing or still loading never counts as leaving; Hazard alerts sits out while Earthquakes or Live warnings is on, because it hands some events to them; aircraft and active fires pause while the area is out of view, because they load only what is near the camera; aircraft also pause while the area reaches past what their last answer covered (adsb.lol's circle of at most 250 nm around the view centre, as the route snaps it, or the box OpenSky was asked for), and a new circle or box is a new baseline, so an airframe crossing the rim of the query is never logged as crossing the area's edge; ships pause for AISStream's first 6 minutes after it connects, while its vessel table fills in; the log keeps the newest 500 events, and the panel and the CSV's last row say how many earlier ones were dropped; and a redrawn area starts a new watch. Report is the land report: the drawn area, the share of it in each FEMA flood zone, NWI wetland type and PAD-US fee unit by access and manager (samples on a regular grid inside the area, about 2,500; share = samples in the class / samples the layer loaded), the length of each class of transmission line, pipeline, rail and fault inside it (200 m steps counted by their midpoints), and the points inside with the sums their publishers give (a plant's nameplate MW, dams by hazard potential). Every figure prints its arithmetic; a layer that is off or failing is listed under Not included, never counted as zero, and samples outside the box a layer loaded are "not loaded", never "none", and so is a pipeline commodity whose service did not answer; a length or count over an area that runs past a layer's loaded box, or from an answer that hit a record limit or was coarsened, says it is partial, and the plant sum names what it leaves out (planned-only plants, generators with no nameplate value, Wikidata's plants, the size floor at that camera height). Picture layers (land cover, hazard classes, slope, soils, geology) are not summed; the report says so. The area and the open panel travel in share links (shape=a:…&aoi=1).
What's here (right-click the globe, or ⌘K → What's here for the camera target): the constructs stack at the point (country, state, county, city, ZIP code area, subwatershed, NWS office), the 3DEP ground elevation, the Macrostrat unit, the PLSS township, range and section, and the nearest features the layers that are on have loaded, each asked of its own source and each saying so when that source did not answer. No address is reverse-geocoded. It travels in links as here=lat,lon.
What was checked before shipping (2026-09-26, every endpoint from this machine with Origin: https://eye.jcamd.com, and every layer's own request run against the new routes): HIFLD answered 303 segments around Round Rock (33 at 345 kV); EIA's four pipeline services 1,500 segments around the Houston Ship Channel; FRA 1,858 segments around Kansas City; FAA 333 public-use facilities in an 8° Texas box; NID 465 dams around the Highland Lakes, with Mansfield Dam's 3,223,000 acre-ft; USGS 1,865 fault traces around the Bay and 1,905 landslides around Seattle; BLM 728 sections around Oklahoma City and 23 sections named T12N R3W S33 across the PLSS states; Macrostrat the Pikes Peak batholith at 38.85° N, 104.95° W; AirNow 3,592 active sites for 20:00 UTC; GDELT 954 conflict events at 301 cities in three hours (4,166 non-conflict and 586 country- or state-level rows left off). The EIA-860M page links monthly files that are not published yet (they redirect); the script takes the newest that answers with a workbook (August 2026, last modified 2026-09-23). Two things did not work and are not used: the USACE NID CSV and GeoPackage exports carry owner names (the public feature service used here does not), and images.drivebc.ca, the image host the DriveBC dataset lists, reset every connection from this machine, so stills come from DriveBC's own www.drivebc.ca/images/<id>.jpg for the same camera ids.
Parcels & ownership
One layer, Parcels, and one route. Below 2 km the layer draws lot lines from the county or state parcel service for the ground in view, inside a dashed box that says what was loaded. Below 5 km, a click on the ground (or on a lot line, or on a zoning district with Zoning on too) asks for the parcel at that point and opens its record as the source publishes it: parcel id, site address, owner names (or why there are none), mailing address, values each with the source's own label and year, exemption, use, zoning, year built, area with its basis, last sale, legal description, the Public Land Survey section from BLM where there is one, the USDOT National Address Database points on the parcel, and the source's own record page wherever it publishes one. Keyless, and each record relayed as published: nothing is added to it and nothing is joined to it from another source.
Owners appear only in the record of the one parcel you click. Lot lines carry the parcel id and use class and nothing else, so panning across a town collects no names. There is no search from a name to what someone owns: the route takes a point or a box and refuses owner, name, q, where, search and query outright, the ⌘K palette searches a parcel's id and never its owner, taxpayer or mailing fields, and no query is ever built from an owner field.
| Where | Source (keyless) | Owner names | Notes |
|---|
| Texas, except Harris County | TxGIO StratMap Land Parcels, the statewide composite of the appraisal-district rolls (tax year 2025) | yes | Answers identify only, so lot lines come from an identify over the box. Travis County records link to the Travis Central Appraisal District's own page. A probe in downtown Laredo (Webb County) returned no parcel, so Webb County is unconfirmed. |
| Harris County, TX | Harris Central Appraisal District (HCAD) | yes, except accounts HCAD flags confidential | Tax year 2026, appraised and market value, and HCAD's new-owner date. |
| Maricopa County, AZ | Maricopa County Assessor | yes | Full cash and limited property value; the zoning placeholder "CONTACT LOCAL JURISDICTION" is not shown as a zone. Links to the Assessor's parcel page. |
| Los Angeles County, CA | LA County Assessor parcels | not published | Roll values, use, legal description; links to the Assessor portal. |
| Cook County, IL | Cook County GIS parcels, and the Assessor's parcel-address table read by that parcel's PIN | yes | Assessed values with the Assessor's certification label; links to the Assessor's PIN page. |
| King County, WA | King County parcels | not published | Appraised land and improvements, zoning; the taxpayer is on the Assessor's eRealProperty page, linked. |
| City of Detroit, MI | City of Detroit parcel file | taxpayers, labelled as such | The rest of Wayne County is not covered. |
| Wisconsin | Statewide Parcel Map (V12) | yes | Click only: a point answers in about a second, but every box query took 25–45 s when probed, so no lot lines are drawn. |
| North Carolina | NC OneMap parcels | yes | Mailing fields are shifted in some counties, so the mailing address is one line in the published order. |
| Montana | Montana Cadastral Framework (Department of Revenue) | yes | Tax year 2026. |
| Minnesota | MnGeo open parcels | yes | Only the counties that opt in (Hennepin among them). A tax year or deeded area of 0 is shown as not recorded. No use class: MnGeo's is the homestead classification in many counties, so lot lines carry the parcel id only. |
Everywhere else the dossier says no keyless parcel service is wired there, which is not a finding that there is no parcel. Tennessee's statewide service needs a token and OpenAddresses needs an account, so neither is used.
What is withheld, and why. Only what a source itself suppresses, handled so the suppression holds:
- An owner field that marks the name as withheld is shown as withheld, and the mailing address goes with it. Sources write the marker in their own words ("CURRENT OWNER", "Current Co-Owner", "SUPPRESSED OWNER", "Name Withheld", a name followed by "(REDACTED)"), so the test is by word: any owner, co-owner, care-of or taxpayer name with CONFIDENTIAL, REDACTED, SUPPRESSED or WITHHELD in it as a word, or that is exactly "CURRENT OWNER" or "CURRENT CO-OWNER". An entity whose name contains one of those words is withheld too, which errs on the safe side. This word test is the only guard for Texas confidential owners (Tax Code 25.025) in the StratMap counties, since StratMap carries no confidentiality flag.
- An owner field that holds a placeholder that is not a name and not a withholding marker ("UNKNOWN OWNER", "OWNER UNKNOWN", "NAME NOT AVAILABLE") is shown as not published.
- HCAD marks confidential accounts in
confidential_flag and replaces the owner with "CURRENT OWNER", but its service still sends the mailing address. This app treats the flag as the source's own suppression: owner withheld, mailing address and new-owner date left out.
- New Jersey's Daniel's Law restricts disclosing the home addresses of the people it covers, and NJOGIS removes owner names from its parcel services. This app goes one step further than NJOGIS: it never asks the New Jersey service for the owner mailing fields it still carries, since those can be a protected person's home, and it shows no New Jersey owner from any other source.
- Owner-occupancy flags (homestead, owner-occupied, principal-residence share) are never asked for, including a class field that encodes one: Maricopa's legal class (3.1 is a primary residence, 4.2 a rental) and Minnesota's use class (in many counties the homestead classification itself) are left out. Every adapter asks for an explicit field list (
lib/parcels/adapters.ts, tested against a payload captured from each service), never *.
- NAD's licence says the database is not intended for use as a mailing list; the address points appear one parcel at a time.
Nothing a source suppresses is looked up anywhere else. A record that changes at its source (a new confidentiality flag, a sale) changes here within about a day, when its cached copy expires.
Asking for a record to be withheld here. If a record is about you and you do not want it shown in this app, open an issue on this repository that says only that you want a parcel record withheld: no name, no address, no parcel id. Issues here are public and show the GitHub account that opened them. A maintainer will reply with a private way to send the details. A request is honoured by adding the parcel's id to lib/parcels/suppressed.ts; the dossier then says a record at that point is withheld on request, and the source's own record is untouched. A legal suppression (a Texas confidentiality request to the appraisal district, a Daniel's Law request) belongs with the source, and this app follows the source's flag.
Politeness. One request per second per parcel host, a five-minute pause for a host after a 429 or a 503, and caches: a parcel record for a day, a box of lot lines for a week, a county lookup for 30 days, NAD points for a week. NAD's hosted layer is slow (seven seconds for an 80 m radius when probed), so a click waits 2.5 s for it and the dossier asks again separately when it has not answered.
What was checked before shipping (2026-09-26): every adapter answered a point query at a publicly owned parcel with its explicit field list, and each payload is a test fixture. Lot-line boxes the layer asks for answered in 0.4–1.4 s at most sources, 3.3 s in Albany, 9.9 s in Tallahassee and 23 s in Columbus; a box downtown returned 499 parcels around the Alamo, 746 around Houston City Hall and 751 around the Montana Capitol, and the record limit was reached in downtown Chicago, Minneapolis, Albany, Trenton, Annapolis and Boston, where the layer note says to zoom in. The Travis Central Appraisal District link that TCAD's layer publishes points at a stage. host that redirects to the production portal; it is shown as published.
Zoning, permits and licences
Four more layers and a dossier for any point. Same rules: keyless, each value as the city or agency published it, and a place that is not covered says so instead of showing an empty map.
| Layer | What it holds | Where it comes from |
|---|
| Zoning | Click the ground below 15 km for the zoning district the city's own GIS puts that point in: the district string as published (DOC1 U/450-U, C6-4.5, [LF1-WH1-5][P2-FA][CPIO]), the city's description and category, overlays and special districts, ordinance, effective date, zoning case and the link to the code chapter, wherever the city publishes them. New York adds the Zoning Tax Lot Database row of the tax lot under the point (MapPLUTO is asked for the lot's BBL and nothing else). A condominium's billing lot (lot 75xx, which MapPLUTO returns for a condo building such as One57) has no row there, and a street has no lot, so there the overlays, special districts and limited-height district come from DCP's own layers at the point; if those do not answer either, the dossier says the overlays are unknown, never that there are none. Below 4 km, district outlines inside a dashed 1.7 km box for Seattle, Denver, New York, Chicago, Dallas, San Antonio, Austin, Los Angeles and San Francisco, coloured the way zoning maps usually are (residential yellow, commercial red, industrial purple), the colour read from the city's own category words or, for New York and Chicago, from the district letters their codes define; a city that publishes neither gets a colour per district code, and nothing more is read into it. Houston answers that it has no zoning ordinance. With Parcels on, a click below 5 km opens the parcel instead, inside a district too; switch Parcels off to read zoning up close. | Seattle OPCD/SDCI, Denver, NYC Department of City Planning (districts, MapPLUTO, Zoning Tax Lot Database), Chicago, Dallas, San Antonio, Austin, LA City Planning (GeoHub), SF Planning; Census TIGERweb incorporated places |
| Building permits | Below 6 km: permits the cities list as issued in the last 30 days, inside a dashed 1.7 km box, larger dots for larger jobs, coloured by the city's own words (new construction, demolition, alterations, trade work). Each opens with its number, type, work, description, valuation under the name of the column it came from ("reported cost", "estimated project cost", "total job valuation"; they do not measure the same thing), fee, status, dates, site address, the parcel key the city prints on it (BBL, TCAD id, SCHEDNUM, PIN, block/lot), the zoning printed on it (Los Angeles, Seattle), the contractor company and the city's record link. Newest 500 per city; the note says when that cap is hit. | Chicago, Austin, Seattle, Denver (residential), NYC DOB NOW, Los Angeles, San Francisco DBI |
| Business licences | Below 3 km: licensed premises inside a dashed 1.1 km box, by trade name. A legal or registrant name is shown only where there is no trade name and it ends in an entity form (LLC, Inc, Corp, Ltd…); otherwise no name is shown and the dossier says why. It is requested only for that test and to compare it with the trade name: a trade name that is the registrant's own name, where the registrant is not a company (a sole proprietor trading under their own name), is not shown either (on 2026-09-26, 46 of the 1,000 licences Chicago returned for a Loop box, and 96 of the 1,000 locations San Francisco returned for a Financial District box). A trade name is otherwise shown as published and can contain a person's name. A licence at an address with an apartment or unit number (APT, UNIT, a bare #) is withheld altogether: a heuristic for a business run from a home, counted in the note and named as a heuristic. |
Which city a point is in comes from the Census incorporated place under it, never a bounding box: Bellaire and West University Place sit inside Houston's box and have their own zoning, so they get "not covered", not "no zoning". A point with no district polygon (Austin leaves streets out of its layer) says "no district polygon here: a street, water or a gap", never "unzoned"; San Antonio's UZROW is reported as street right-of-way. Every answer carries coverage: each source the box meets and its state (covered, partial when a cap was hit, error when it did not answer this time), and for the cities with nothing drawn, why: Dallas stale (its Socrata feed stopped in August 2020 and its ArcGIS layer at fiscal 2024), Houston no permit records (it publishes monthly counts only), San Antonio not wired (its permit table mixes lon/lat and State Plane coordinates in text columns, and its newest rows carry none), Denver commercial token required. A permit, a licence and a facility are named by their number (and a licence by its trade name); addresses, contractors, facility and project names are in the dossier only and never searched.
What was checked before shipping (2026-09-26), each with the box the layer asks for: around Seattle's Central Library, 125 district outlines and 52 codes, the library itself DOC1 U/450-U, Downtown Office Core 1, ordinance 125291, in effect since 2017-05-14; the Chicago Loop, 211 permits in 30 days and 159 outlines, 125 of them planned developments; Midtown Manhattan hit the 500-permit cap in 1.7 km and 30 days, and held 1,422 licensed premises in 1.1 km (889 liquor licences, 533 city premises licences; 31 withheld at unit addresses). San Antonio maps zoning lot by lot, 2,258 districts in 2 km of downtown, over its 2,000-record limit, which is why the outline box is 1.7 km (1,413 districts in one 1.7 km box of downtown, 972 in the box around the Alamo). San Francisco's old portal host, data.sfgov.org, answers any $select with a 403 and redirects everything else to data.sf.gov, which takes $select and simplifies outlines on the server: 413 districts in the 1.7 km box around Union Square, 173 KB, and a point answer of 197 bytes at City Hall. Denver's commercial permit layer answered "Token Required". Along the Houston Ship Channel ECHO listed 301 NPDES and 65 air facilities, 29 with a violation or noncompliance in its words and 10 it lists as Unknown; the Corps' search answered its 300-action maximum, but only 172 of them lay in the box: it answers a box's actions first and then pads the answer with actions from anywhere in the country (Charleston, Sacramento, New Orleans...), so only those in the box are kept, and its total (109,678) is the national count, so it is not relayed. In downtown Los Angeles the home-business heuristic withheld 395 of 1,000 business registrations, most of them offices written as "#302"; the note counts them.
Constructs: the world laid over the world
The layers above show the physical world. Constructs shows the frames laid over it, and ties every point of view together through the one thing they share: location. Switch it on and the camera target grows a tethered spiral of the constructs it sits inside, smallest nearest the ground. In downtown Austin that is 31 of them: flood zone, tract, ZIP code area, state house district, subwatershed, school district, city, county, NWS zone and office, subbasin, ecoregions, metro area, congressional district, basins up to the Texas-Gulf water region, state, census division and region, EPA and FEMA regions, Federal Reserve district, time zone, country. Each is coloured by the question it answers (who governs it, who speaks for it, who serves it, how it is counted, where its water goes, what grows there, what threatens it, which federal office answers for it). Select one and its outline floats at its height over a dashed footprint on the ground, and the panel joins it to everything loaded on the globe inside it: the gauges in a watershed, the companies in a congressional district, the wells in a county. Select any gauge, well, company or aircraft and the panel lists the constructs it sits in.
Emergence. A construct has no sensors of its own, so its state comes from the physical twin. Construct field tiles the whole view with one point of view's constructs and floats them as a plate above the globe. Which kind emerges depends on the zoom: water regions from orbit give way to subwatersheds over a county, states to counties to cities, congressional to state house districts. Each unit's column of light and colour rise with the physical signals loaded inside it (gauges, aircraft, ships, earthquakes, company headquarters, bank offices), recomputed every few seconds. Switch the heat to streamflow vs normal and the field shows what its rivers are doing rather than where the instruments are: every gauge's latest flow is placed among the USGS daily-mean percentiles for today's date, and each watershed takes the median of its gauges, coloured in the WaterWatch classes from much below normal (red) through normal (green) to much above (blue), its column rising with the distance from normal either way. Where the water goes walks the USGS drainage links from any point to the ocean and draws the path, then joins every gauge and well along it (downtown Austin reaches Matagorda Bay in 29 subwatersheds). What drains here reads the same links backwards: the whole catchment of a point as the smallest set of whole watersheds (downtown Austin: 832 subwatersheds, 90,411 km², drawn as 16 subbasins, 38 watersheds and 78 subwatersheds), then reads the gauges inside it near the outlet against normal for the day, so you see what is coming down the river toward you. Live warnings are the constructs that are born and die: every NWS alert rated Severe or Extreme, drawn as the area the forecaster drew (or the zones they named), breathing while it is in force and fading as it expires; select one to join it to the gauges and everything else inside it. Teleport (top bar, or say "teleport") flies to wherever the world is doing something unusual right now, NWS warnings and M4.5+ earthquakes in the order the agencies rate them, and lands in the constructs world with the right layers on; autoplay tours them. The Civic & planning lens (?lens=civic) opens on all of it.
| Construct field: Texas subbasins lit by the gauges, aircraft and companies inside them | Where the water goes: Denver to the Gulf through 217 subwatersheds |
|---|
| |
| Streamflow vs normal: Texas watersheds coloured by where their gauges' flow sits among today's USGS percentiles (red much below, green normal, blue much above) | Teleport: landed on a live NWS flood warning on the Mississippi, the warning selected as a construct and joined to the gauge inside it |
| |
Relations are only those the unit systems define (GEOID and HUC nesting, OMB metro delineation) or an agency publishes (NWS zone to office, state to federal region, WBD downstream HUC). An upstream that fails is named as missing, never treated as absent. /api/fabric serves the stack (op=stack, JSON or CSV), the field (op=field) and the trace (op=downstream, op=outlines) and the catchment (op=upstream, op=units); /api/water?op=normals serves the daily flow percentiles and /api/live the warnings and earthquakes, as do the MCP tools place_fabric, place_compare, construct_field, downstream, upstream, flow_normals and live_events. Sources are Census TIGERweb, USGS WBD and 3DEP, EPA ecoregions, FEMA NFHL, NWS and Natural Earth, all keyless. The design, the guarantees and the roadmap are in docs/CONSTRUCTS.md.
Lenses: who is looking
The first visit asks one question, Who is looking?, and the answer sets the layers, the landing view, the first panel and the order of the phone nav. Every layer stays one tap away; change lens any time from the aperture button (top bar on desktop, first chip on a phone), a permalink (?lens=water), or by voice ("I'm a hydrologist", "switch lens to trader"). A lens is one object in lib/personas/registry.ts, so adding one is a data change.
| Lens | Who | Turns on | Lands on | Opens |
|---|
| Real estate | Agents, investors, appraisers, relocation | Home values, jobs & wages, surface water | Austin housing | Market report; screener preset on momentum |
| Economist | Macro, regional and labour economists, journalists | Jobs & wages, ports & trade, home values | The United States | Signals (all categories), releases next |
| Trader | Equity, commodity and macro traders | Public companies, ports & trade, ships, aircraft | Los Angeles and Long Beach | Signals (freight); screener on ports losing TEU |
| Water & ecology | Biologists, hydrologists, utilities, conservation | Surface water, aquifers & drought, turbidity | Calaveras and Braunig lakes | Water report; signals (water) |
| Supply chain | Logistics, shipping, freight and trade operations | Ports & trade, ships, aircraft | The Laredo crossings | Signals (freight); screener on crossings by trucks |
| Public finance | Bankers, municipal analysts, grant writers, local government | Bank branches, federal spending, jobs & wages, surface water | Travis County | Market report; signals (labour) |
| Civic & planning | Planners, local government, journalists, civic technologists | Constructs, construct field, live warnings, surface water, public companies, banks, earthquakes | Downtown Austin | Layers (the field controls) |
| Explorer | Everyone else | Aircraft, ships, satellites, earthquakes, launches, surface water | Orbit | Nothing; the classic spy-satellite view |
Each lens shows a Start here card with three first steps that open the right panel when tapped; dismiss it once and it stays dismissed for that lens. On phones the heavy live layers (aircraft, satellites) stay off until you switch them on. Explore lists the lens's curated places first.
For practitioners: history, screens, signals, releases, watchlists, desk mode
The globe is the front door; the rest of this section is for analysts, economists and traders who need the same public numbers as time series, tables and feeds. Every route below is keyless, CORS-open, returns a provenance envelope (data, provenance[], generatedAt, caveats[]), answers format=csv where the payload is tabular, and is described at /api/openapi. The practitioner guide is docs/API.md.
| What | Where | Notes |
|---|
| Nowcast series from the live feeds | /api/series, docs/SNAPSHOTS.md | A GitHub Actions cron samples the feeds every three hours and commits counts to data/series/: vessels within reach of 54 major ports (all, stationary, moving), aircraft over 19 cargo hubs (all, cargo carriers), eight river gauges, Texas reservoir storage, daily earthquake counts. Counts only, never an MMSI or a hex code. Read with op=get&id=snapshot:port-vessels-stationary:USLAX&rollup=daily-mean. |
| Backfilled indices | /api/economy/history, docs/HISTORY.md | Ten years of monthly ZHVI and ZORI, quarterly QCEW jobs, wages and establishments, the weekly Freddie Mac rate, and the momentum and affordability indices computed for every month, per county or nationally. op=ic&h=12 runs a cross-sectional information-coefficient test of the home-only momentum signal against the next twelve months of home-value change. Descriptive, not a forecast. |
| Screener | /api/screen, docs/SCREENER.md, top bar → Screen | Rank and filter every county, state, harbour, land crossing or country: kind=county&q=home.yoyPct>5 AND jobs.yoy.emp<0 SORT momentum DESC LIMIT 50. Percentile ranks with pct=1, a field registry with fields=1, six presets in the panel, click a row to fly there, ?screen=county:<query> shares one. |
| Named indicators | /api/indicators, docs/INDICATORS.md, top bar → Signals | Nineteen signals with thresholds and a why-it-matters line: Mississippi at Memphis and St. Louis, Ohio at Louisville, Missouri at St. Joseph, Hoover releases, Texas reservoirs, Laredo trucks, LA + Long Beach TEU, ships waiting for a berth, the Shanghai–LA box rate, diesel, WTI, the 30-year mortgage rate, starts, permits, Case-Shiller, unemployment (Sahm-style), the trade balance, retail sales. Levels marked are ours, not official. |
Public companies, banks and federal dollars. Three more layers from regulators' own APIs, all keyless and public domain: every listed company in SEC EDGAR at its registered business address (filings, XBRL revenue, income, assets, equity, cash and debt with their periods, ratios that print their formulas, a sector-to-ETF bridge stated as a convention; /api/companies, docs/COMPANIES.md); every FDIC-insured office with Summary of Deposits, a county's deposit market with the top banks and an HHI, quarterly ROA, ROE and noncurrent loans per institution, bank failures by year; and USAspending obligations by county and award family for the latest complete fiscal year with dollars per covered job, top recipients, awarding agencies and NAICS mix (/api/finance, docs/FINANCE.md). Company-level and institution-level only: no officers, insiders or shareholders. The market report lists the companies headquartered in the county, its jobs mix folded into GICS sectors, and where the finance section is wired, its deposit market and federal dollars. The companies layer ships with a 25-company fixture; node scripts/companies-data.mjs builds the full bundle from EDGAR (about 6,000 filers at the SEC's 8 requests per second).
Explore it
Every view is a link. Share in the top bar copies one that carries the camera target, the layers, the mission clock and the selected object; Explore opens curated places, a guided tour, and exports.
| Start here | What loads |
|---|
| Calaveras & Braunig, San Antonio | Sentinel-2 turbidity chips beside USGS turbidity gauges, with the community water report open |
| Edwards Aquifer wells | Wells named by aquifer, drought class, gauges with full quality panels |
| Highland Lakes, Austin | TWDB reservoirs with percent full; the report weights storage by capacity |
| Lake Mead & Hoover Dam | Dozens of turbidity and oxygen gauges plus satellite chips |
| Chesapeake Bay | Estuary turbidity, gauges on the tributaries |
| Western Lake Erie | Open-water chips, Maumee gauges, inland wells |
| Lake Okeechobee | Canal gauges, basin wells, lake chips |
| Mississippi & Atchafalaya | NWS flood categories along the lower river |
| Rio Grande at El Paso | A groundwater story: wells, aquifers, drought |
| The planet's water |
Link parameters: lens (who is looking; sets layers, panel and camera unless the link carries its own), lat, lon, h (camera height in metres), hd / p (heading, pitch), layers (comma list of layer ids, exactly these on), t (mission clock, ISO; omitted while live), sel=layer:id (selected object, best effort once its feed loads), report=1 (water report open), market=1 (market report open), space=1 (space-weather panel open), shape=a:lon,lat;lon,lat;… or shape=l:… (a drawn area or line, up to 60 vertices, shown with its measurement; written last and unescaped so it stays readable), ground=lat,lon (a ground-here answer asked at that point once the camera is there, of the picture layers the link turns on), terrain=1.5 (3D terrain on at that vertical exaggeration, 1 to 3), slr=3 (the sea level rise scenario in feet, 1 to 10; written while that layer is on), aoi=1 (the Area panel open on the drawn area), here=lat,lon (a what's-here answer asked at that point once the camera is there), parcel=lat,lon (the parcel identified at that point, 5 decimals; turns the parcels layer on and opens its record once the camera arrives), zoning=lat,lon (the zoning answer at a clicked point, 5 decimals; the Zoning layer switches on and the point's dossier opens once the camera is there), embed=1 (no HUD chrome, for iframes; data credits stay).
Embed it:
<iframe src="https://eye.jcamd.com/?lat=29.28&lon=-98.34&h=60000&layers=water,turbidity&embed=1"
width="960" height="600" style="border:0" allow="clipboard-write" loading="lazy"></iframe>
Take the data with you: the Area panel saves everything loaded inside a drawn area as GeoJSON or CSV and its watch log as CSV; Explore → Take the data with you saves every loaded gauge reading as CSV, the turbidity chips as GeoJSON polygons with scene provenance, every loaded county or state with its home value, rent, jobs and wages as CSV, and the loaded harbours and crossings with their volumes as CSV; both reports have copy-as-text and JSON buttons in their headers.
Use the data without the globe
/api/water is a keyless, CORS-open JSON API over the same public sources, edge-cached by op. Call it from a notebook, a script or your own page:
# Community water report for a point (drought, reservoirs, gauges, wells, stress estimate with its formula)
curl "https://eye.jcamd.com/api/water?op=report&lon=-98.49&lat=29.42"
# Latest USGS gauge readings in a box (flow, stage, temp, DO, conductance, pH, turbidity, reservoir level/storage)
curl "https://eye.jcamd.com/api/water?op=gauges&bbox=-98.6,29.2,-98.2,29.6"
curl "https://eye.jcamd.com/api/water?op=gauges&bbox=-98.6,29.2,-98.2,29.6¶m=63680" # turbidity only
# NWS flood categories, Texas reservoirs, USGS wells with aquifer names, this week's Drought Monitor polygons
curl "https://eye.jcamd.com/api/water?op=nwps&bbox=-98.6,29.2,-98.2,29.6"
curl "https://eye.jcamd.com/api/water?op=twdb"
curl "https://eye.jcamd.com/api/water?op=wells&bbox=-98.6,29.2,-98.2,29.6"
curl "https://eye.jcamd.com/api/water?op=drought"
# The NHDPlus V2 reach a point drains to, then where its water goes (USGS NLDI + EPA NHDPlus V2.1)
curl "https://eye.jcamd.com/api/water?op=reach&lon=-116.2023&lat=43.6150"
curl "https://eye.jcamd.com/api/water?op=trace&comid=23398863&mode=down" # main stem downstream, 100 km
curl "https://eye.jcamd.com/api/water?op=trace&comid=23398863&mode=gauges&distance=150" # USGS gauges upstream
curl "https://eye.jcamd.com/api/water?op=trace&comid=23398863&mode=basin" # the drainage basin
# FEMA National Risk Index: county rows (join by STCOFIPS) or tract polygons
curl "https://eye.jcamd.com/api/hazards?op=nri&bbox=-99,29,-98,30"
curl "https://eye.jcamd.com/api/hazards?op=nri&level=tract&bbox=-98.55,29.40,-98.45,29.50"
# CDC PLACES: one measure for every county, a county's tracts, or every measure for one county
curl "https://eye.jcamd.com/api/civic?op=health&level=county&measure=DIABETES"
curl "https://eye.jcamd.com/api/civic?op=health&level=tract&measure=DIABETES&counties=48453"
curl "https://eye.jcamd.com/api/civic?op=health&level=place&fips=48453"
# CDC/ATSDR SVI 2022: every county, the tracts in a box, or one county or tract; FEMA's NRI row for the same FIPS
curl "https://eye.jcamd.com/api/civic?op=svi&level=county"
curl "https://eye.jcamd.com/api/civic?op=svi&level=tract&bbox=-97.8,30.2,-97.6,30.4"
curl "https://eye.jcamd.com/api/civic?op=svi&level=place&fips=48453"
curl "https://eye.jcamd.com/api/hazards?op=nri&fips=48453"
# HIFLD hospitals: the full record in a box, or every open hospital nationally (short record)
curl "https://eye.jcamd.com/api/infra?op=hospitals&bbox=-97.8,30.2,-97.65,30.4"
curl "https://eye.jcamd.com/api/infra?op=hospitals&bbox=-180,-90,180,90"
# NCES public schools, 2024-25: a box of at most 0.2 degrees
curl "https://eye.jcamd.com/api/civic?op=schools&bbox=-97.8,30.2,-97.7,30.3"
# FCC broadband (BDC December 2025 via Esri): every county, the H3 hexagons in a box, or one county
curl "https://eye.jcamd.com/api/civic?op=broadband&level=county"
curl "https://eye.jcamd.com/api/civic?op=broadband&level=hex&bbox=-97.76,30.25,-97.72,30.29"
curl "https://eye.jcamd.com/api/civic?op=broadband&level=place&fips=48453"
# USFS Wildfire Risk to Communities ranks: every county, the communities in a box, or one GEOID
curl "https://eye.jcamd.com/api/hazards?op=wrc&level=county"
curl "https://eye.jcamd.com/api/hazards?op=wrc&level=place&bbox=-105.4,39.9,-105.1,40.1"
curl "https://eye.jcamd.com/api/hazards?op=wrc&level=fips&fips=08013"
# BIA trust land (Land Area Representation), national
curl "https://eye.jcamd.com/api/land?op=tribal"
# County hazard history: FEMA declarations, USDM drought, NOAA climate, SPC tornadoes, USGS landslide susceptibility
curl "https://eye.jcamd.com/api/hazards?op=history&fips=48453"
curl "https://eye.jcamd.com/api/hazards?op=history&fips=48453&years=10&declarations=20"
curl "https://eye.jcamd.com/api/hazards?op=history&lon=-105.5&lat=39.7&part=landslide"
curl "https://eye.jcamd.com/api/hazards?op=history&fips=48453&part=storms"
# HUD housing vouchers by tract and Qualified Census Tracts: a box of at most 0.3 degrees, or one tract
curl "https://eye.jcamd.com/api/civic?op=housing&bbox=-97.9,30.15,-97.6,30.45"
curl "https://eye.jcamd.com/api/civic?op=housing&level=place&fips=48453002220"
# ...with HUD's Difficult Development Areas and LIHTC properties (five or more units) in the same box
curl "https://eye.jcamd.com/api/civic?op=housing&bbox=-97.9,30.15,-97.6,30.45&part=dda,lihtc"
# One site: 365 days of daily means, or instantaneous values in a window
curl "https://eye.jcamd.com/api/water?op=history&site=USGS-08180800¶m=00060"
curl "https://eye.jcamd.com/api/water?op=matchup&site=USGS-08181500¶m=63680&from=2026-09-02T15:25:56Z&to=2026-09-02T19:25:56Z"
The catalogue. Every layer is one or more curated collections, and each collection has a card: what one record is and is not, who publishes it and on what terms (with the credit line they ask for), what it covers, how current it is and where that was read, what is left out and why, the caveats, which fields may be searched or embedded (never an address, a contact or a name that can be a person's), and the call that serves it. Browse it at /catalog; the same cards are JSON:
curl "https://eye.jcamd.com/api/catalog" # every collection, and the layers not yet catalogued
curl "https://eye.jcamd.com/api/catalog?id=nrhp-listed" # one card
curl "https://eye.jcamd.com/api/catalog?layer=crithab" # a layer's collections
/api/economy does the same for trade, jobs and home values:
# Market report for a point: home values vs metro and nation, rents, affordability estimate with its formula,
# jobs and sector concentration, nearest ports and crossings, national pulse, momentum index
curl "https://eye.jcamd.com/api/economy?op=report&lon=-97.75&lat=30.3"
# Counties in a box (jobs, wages, home values, rents, geometry), or every state
curl "https://eye.jcamd.com/api/economy?op=areas&bbox=-98.5,29.8,-97,31"
curl "https://eye.jcamd.com/api/economy?op=areas&level=state"
# One county's private-sector NAICS mix with location quotients; the same plus metro / state / US home values
curl "https://eye.jcamd.com/api/economy?op=sectors&fips=48453"
curl "https://eye.jcamd.com/api/economy?op=context&fips=48453"
# Harbours in a box (min=large|medium|small|all) with BTS volumes; every US land border crossing
curl "https://eye.jcamd.com/api/economy?op=ports&bbox=-96,28.5,-93.5,30.5&min=all"
curl "https://eye.jcamd.com/api/economy?op=border"
# Countries with World Bank indicators; a country's top partners; the national pulse
curl "https://eye.jcamd.com/api/economy?op=countries"
curl "https://eye.jcamd.com/api/economy?op=partners&iso3=USA"
curl "https://eye.jcamd.com/api/economy?op=pulse"
Every response carries provenance (one record per upstream release, estimates with their formula) and generatedAt; tabular ops answer format=csv with the same provenance as # footer lines (pd.read_csv(url, comment="#")). The practitioner routes (/api/series, /api/economy/history, /api/screen, /api/indicators, /api/releases, /api/watch, /api/companies, /api/finance, /api/mcp) follow the same envelope; see the section above and /api/openapi.
/api/hazards, /api/land, /api/parcels and /api/space do the same for the hazards & land layers and parcels, with the same envelope and a caveats list that says what each answer is not (not a warning service, not a forecast, not permission to enter):
# Current US wildfire perimeters (containment, perimeter capture time) and incident points without a perimeter
curl "https://eye.jcamd.com/api/hazards?op=wildfire"
# FIRMS hotspots of the last 24 h in a box, as rows (see `columns`); binned to `max` (500-8000, default 5000)
curl "https://eye.jcamd.com/api/hazards?op=fires&bbox=-125,32,-114,42"
# NWS alerts (polygon or listed counties; those the Live warnings feed outlined carry liveOutlined), current GDACS events (quakes USGS also has carry alsoInUsgs), EONET volcanoes
curl "https://eye.jcamd.com/api/hazards?op=alerts"
# FEMA flood zones, NWI wetlands with their imagery years (boxes up to ~9 km), National Register listings NPS
# publishes as non-restricted (up to ~13 km; polygons=1 adds boundaries), PAD-US public lands with owners (up to 2 degrees)
curl "https://eye.jcamd.com/api/land?op=flood&bbox=-98.50,29.41,-98.47,29.44"
curl "https://eye.jcamd.com/api/land?op=wetlands&bbox=-98.45,29.26,-98.41,29.30"
curl "https://eye.jcamd.com/api/water?op=impaired&bbox=-76.62,39.26,-76.58,39.30" # EPA ATTAINS impaired waters (303(d)) in a box
curl "https://eye.jcamd.com/api/water?op=pfas&bbox=-75.54,40.12,-75.40,40.26&polygons=1" # PFAS in drinking water (UCMR 5) per water system, on service areas
curl "https://eye.jcamd.com/api/land?op=historic&bbox=-77.04,38.88,-77.02,38.90&polygons=1"
curl "https://eye.jcamd.com/api/land?op=historic&bbox=-71.14,42.36,-71.12,42.38&polygons=1&nhl=1" # National Historic Landmarks only (the "Landmarks only" chip)
curl "https://eye.jcamd.com/api/land?op=heritage&kind=battlefields&bbox=-77.5,39.5,-77.0,40.0" # ABPP study and core areas (also kind=units, nha, whs)
curl "https://eye.jcamd.com/api/land?op=publiclands&bbox=-99,29.3,-98.5,29.8"
# Ground elevation from USGS 3DEP (metres, with the source DEM resolution)
curl "https://eye.jcamd.com/api/land?op=elevation&lon=-98.47&lat=29.465"
# USFWS critical habitat (final and proposed) containing a point: species, listing status, Federal Register rule
curl "https://eye.jcamd.com/api/land?op=crithab&lon=-97.7713&lat=30.2638"
# The parcel at a point as its county or state publishes it (owner, addresses, values, use, area, sale, legal,
# the source's record link), with NAD address points and the PLSS section; lot lines in a small box (id and use only)
curl "https://eye.jcamd.com/api/parcels?lon=-95.3693&lat=29.7604"
curl "https://eye.jcamd.com/api/parcels?mode=outlines&bbox=-95.372,29.758,-95.366,29.764"
curl "https://eye.jcamd.com/api/parcels?mode=addresses&lon=-112.0181&lat=46.5857"
# Kp (GFZ, preliminary values marked), DONKI flares and notifications; NASA's ISS stream after its oEmbed check
curl "https://eye.jcamd.com/api/space?op=weather"
curl "https://eye.jcamd.com/api/space?op=iss-stream"
/api/terrain and /api/soil serve the terrain and soil pictures and the answers behind the ground dossier:
# Slope, 2 ft contours, NLCD land cover, FEMA's flood map: one 512 px PNG per Web Mercator tile (z/x/y)
curl -o slope.png "https://eye.jcamd.com/api/terrain?op=tile&product=slope&z=13&x=1855&y=3393"
# The WHP class, the NLCD class or the 3DEP slope at a point, with the class table the service publishes
curl "https://eye.jcamd.com/api/terrain?op=point&product=firehazard&lon=-104.95&lat=38.85"
# Esri World Imagery Wayback's release index (release id and publication date, newest first); tiles come from Esri
curl "https://eye.jcamd.com/api/terrain?op=wayback"
curl "https://eye.jcamd.com/api/terrain?op=waybackdate&release=10&z=18&lon=-122.42&lat=37.77" # when that release's pixels were captured
curl "https://eye.jcamd.com/api/terrain?op=topo&lon=-122.42&lat=37.77" # USGS topo editions and sheets at a point, 1879-2006
curl "https://eye.jcamd.com/api/terrain?op=naip&lon=-93.62&lat=41.59" # NAIP years and flight dates at a point (Planetary Computer STAC)
curl "https://eye.jcamd.com/api/terrain?op=naipmosaic&year=2014" # the 2014 mosaic's tile template
# Every terrain picture: source, zoom range, class tables, caveats, and the terrain tiles' required attribution
curl "https://eye.jcamd.com/api/terrain?op=products"
# The SSURGO soil at a point (map unit, farmland class, components with NCCPI), or one map unit's components
curl "https://eye.jcamd.com/api/soil?op=point&lon=-98.45&lat=29.28"
curl "https://eye.jcamd.com/api/soil?op=mapunit&mukey=390497"
/api/infra, /api/cameras, /api/air and /api/events do the same for the infrastructure, camera, air quality and news event layers:
# Transmission lines (HIFLD archive), EIA pipelines, FRA rail, FAA public-use airports, NID dams in a box
curl "https://eye.jcamd.com/api/infra?op=transmission&bbox=-97.9,30.1,-97.5,30.5"
curl "https://eye.jcamd.com/api/infra?op=pipelines&bbox=-96,29,-94,31"
curl "https://eye.jcamd.com/api/infra?op=rail&bbox=-98.8,29.2,-98.3,29.6"
curl "https://eye.jcamd.com/api/infra?op=airports&bbox=-102,26,-94,34"
curl "https://eye.jcamd.com/api/infra?op=dams&bbox=-98.8,29.2,-98.3,29.6"
# EIA-860M power plants (and Wikidata nuclear plants outside the US); min=MW sets a floor
curl "https://eye.jcamd.com/api/infra?op=plants&bbox=-180,-90,180,90&min=500"
# USGS Quaternary faults and landslides, BLM PLSS sections, a T-R-S search, the Macrostrat unit at a point
curl "https://eye.jcamd.com/api/infra?op=faults&bbox=-122.5,37.5,-121.8,38.0"
curl "https://eye.jcamd.com/api/infra?op=landslides&bbox=-122.4,47.5,-122.2,47.7"
curl "https://eye.jcamd.com/api/infra?op=plss&level=section&bbox=-97.7,35.3,-97.3,35.7"
curl "https://eye.jcamd.com/api/infra?op=plss-search&q=T12N%20R3W%20S33%20OK"
curl "https://eye.jcamd.com/api/infra?op=geology&lon=-104.95&lat=38.85"
# Agency cameras (caltrans, drivebc, digitraffic, lta, tfl, nyc)
curl "https://eye.jcamd.com/api/cameras?source=caltrans"
# AirNow monitors in a box (rows named by `columns`, PRELIMINARY; 404 until AirNow is switched on,
# see the Air quality layer above); GDELT conflict events folded by city
curl "https://eye.jcamd.com/api/air?op=sites&bbox=-99,29,-98,30"
curl "https://eye.jcamd.com/api/events?op=conflict&hours=3"
/api/zoning and /api/permits do the same for the zoning, permits and licences layers. Every permits answer carries coverage: each source the box meets with its state (covered, partial, error, stale, no-feed, token-required, not-wired) and the reason:
# The zoning district at a point (state: district | right-of-way | no-district | no-ordinance | not-covered)
curl "https://eye.jcamd.com/api/zoning?op=point&lon=-122.3325&lat=47.6067"
# District outlines in a box (code and colour family; ask op=point for the rest), and which cities are wired
curl "https://eye.jcamd.com/api/zoning?op=districts&bbox=-122.345,47.5975,-122.325,47.6125"
curl "https://eye.jcamd.com/api/zoning?op=coverage"
# Building permits issued in the last 30 days (days=7-90), licensed premises, EPA ECHO facilities and Corps actions
curl "https://eye.jcamd.com/api/permits?op=building&days=30&bbox=-87.64,41.8775,-87.62,41.8925"
curl "https://eye.jcamd.com/api/permits?op=licences&bbox=-73.9925,40.745,-73.9775,40.755"
curl "https://eye.jcamd.com/api/permits?op=environmental&bbox=-95.2,29.7,-95.05,29.8"
# EPA Superfund (SEMS), TRI, RCRA hazardous-waste and Brownfields listings in a box (a regulatory status, not contamination)
curl "https://eye.jcamd.com/api/permits?op=contaminants&bbox=-95.3,29.7,-95.15,29.8"
curl "https://eye.jcamd.com/api/permits?op=contaminants&bbox=-122.05,37.35,-121.95,37.45&polygons=1" # with Superfund site boundaries and NPL status
curl "https://eye.jcamd.com/api/permits?op=ust&bbox=-96,28,-92,32" # leaking underground storage tanks counted by county (EPA UST Finder)
curl "https://eye.jcamd.com/api/permits?op=tri&trifid=77012HLLPT9701M&year=2024" # what a TRI facility reported releasing, per medium and unit
Water boxes are clamped to 4° and snapped to a 0.5° grid, economy boxes to 18° and a 1° grid, fire boxes to a 1° grid, flood and wetland boxes to 0.08° and a 0.02° grid, public-land boxes to 2° and a 0.25° grid, parcel outline boxes to 0.01° and a 0.002° grid (a parcel point to 5 decimals), zoning outline boxes to 0.04° and a 0.0025° grid, permit boxes to 0.03°, licence boxes to 0.02° (both on the 0.0025° grid), environmental boxes to 0.2° and a 0.05° grid, so nearby callers share a cache entry. Zoning answers are held a day, permits 30 minutes and licences an hour (Los Angeles, which updates weekly and monthly, 6 hours), environmental permits 6 hours. Responses carry source, cacheAge and, for the report, globe: the permalink that opens the same point on the globe. The report from the API has no satellite turbidity term (that runs in a browser) and says so in caveats. Please keep the upstreams' terms in mind; the route already rate-gates and backs off on their behalf.
Quick start
git clone https://github.com/jcdavis131/gods-eye-view
cd gods-eye-view
npm install # also copies Cesium's static assets into public/cesium
npm run dev # http://localhost:3000
That is the whole setup. No account, no token, no .env. Everything below the fold works on free public endpoints.
Pinokio users: add this folder (or the repo URL) in Pinokio and press Install, then Start. pinokio.js, install.js, start.js, update.js and reset.js are in the repo root.
What you get with no keys
| Layer | Source (no key) | Refresh | Notes |
|---|
| Aircraft | adsb.lol point query (≤ 250 nm around the view) + its global military-flagged feed; OpenSky when zoomed out | 10 s | Positions are dead-reckoned between reports for up to 90 s. OpenSky anonymous quota is 400 credits/day; the server caches 90 s and the HUD shows credits left. |
| Ships | Digitraffic (Fintraffic) AIS | 20 s | Real AIS, Baltic Sea coverage. No mock ships anywhere; the layer says what it covers. |
| Satellites | CelesTrak GP elements, SGP4 via satellite.js | 2 h | Fully time-scrubbable. Propagation runs in a Web Worker, so the ~11k "all active" group (opt-in) stays smooth. Default groups: stations, brightest, GPS, military, weather. |
| Earthquakes | USGS all-magnitudes, past 24 h | 60 s | Sized and coloured by magnitude. |
| Public cams | TfL JamCams + NYC DOT + Caltrans CWWP2 + DriveBC + Digitraffic + LTA | 5 min | Open-data agency cameras with live stills in the info panel, each added after reading its terms. Positions only. |
| Launches |
Optional keys (all entered in the app, none required)
Press Keys in the top bar or hit ,. Keys live in localStorage and are only ever sent to this app's own /api routes (as request headers) or to the vendor SDK they belong to (voice).
| Key | Unlocks |
|---|
GOOGLE_MAPS_API_KEY | Google Photorealistic 3D Tiles (buildings, trees, terrain). |
CESIUM_ION_TOKEN | Cesium World Terrain instead of the keyless AWS Terrain Tiles when 3D terrain is on. |
ADSBX_RAPIDAPI_KEY | ADS-B Exchange as an alternative aircraft source. |
OPENSKY_CLIENT_ID / OPENSKY_CLIENT_SECRET | 4000 OpenSky credits/day for the global view. |
AISSTREAM_KEY | Global AIS via AISStream websocket (free key). |
WINDY_WEBCAMS_KEY | Windy public webcams worldwide, nearest 50 to the view. |
ELEVENLABS_AGENT_ID (+ ELEVENLABS_API_KEY for private agents) | ElevenLabs Conversational AI voice agent. |
VAPI_PUBLIC_KEY + VAPI_ASSISTANT_ID | Vapi realtime voice agent. |
Controls
- Drag to orbit, scroll to zoom, middle-drag or ctrl-drag to tilt.
- Click any object for its dossier; Follow locks the camera to it (your orbit offset is kept while it moves). With Zoning on and the camera below 15 km, a click on the ground (or a district) opens the zoning at that point instead; with Parcels on too, below 5 km that click opens the parcel (the Parcels bullet below).
⌘K / Ctrl+K search flights, ships, satellites and cameras by callsign, name, MMSI, ICAO hex or NORAD id, or geocode a place. It matches names and published identifiers (a parcel id among them) and place names only (a permit, licence or action number, a zoning code), never an owner, taxpayer, operator, manager, easement-holder, licensee, applicant or contractor field, nor an address.
- With Parcels on and the camera below 5 km, a click on the ground opens the record of the parcel under it; lot lines draw below 2 km. With Zoning on too, parcels win every click on the ground below 5 km, including a click inside a drawn zoning district or on its outline (districts draw below 4 km); zoning answers from 5 to 15 km. Switch Parcels off to read zoning up close. Any other object picked (an aircraft, a ship, a camera, a power line) still opens its own dossier. A parcel or zoning click comes before a terrain, soil or land cover picture's: turn Parcels and Zoning off (whichever are on) to ask the ground what is under it.
- Explore opens curated places, the guided tour and exports; Share copies a permalink to exactly this view.
- With a terrain, soil or land cover picture on, a click on the ground opens what is under it (soil, hazard class, land cover, slope, elevation). Settings → Display turns on 3D terrain and sets its exaggeration.
- Right-click the globe for what's here at that point. With a drawn area, Measure's What's inside opens the Area panel (inside, watch, land report).
⌘K also finds a PLSS township or section by its description: T12N R3W S33, optionally with a state (… OK).
- Measure (ruler) turns clicks into a path (with an elevation profile), an area or an elevation reading;
Esc leaves the tool and keeps the shape, which travels in the share link. Space (sun) opens the space-weather panel.
- Timeline scrubs ±24 h. Satellites and launches propagate to any time. Live layers hold their last known state and are flagged
LAST KNOWN; nothing is synthesised for the past.
- Idle for 12 s and the camera drifts in orbit (cinematic mode, toggle in settings).
Voice control
Three providers share one command registry (lib/voice/commands.ts):
| Provider | Needs | How |
|---|
| Browser (default) | nothing | Web Speech API + a small local intent parser (lib/voice/intent.ts). Chrome/Edge/Safari. |
| ElevenLabs | agent id | Conversational AI agent; every command is registered as a client tool so the agent calls the globe directly. |
| Vapi | public key + assistant id | Web SDK call; function tools are advertised on the call as async client tools and results are posted back as system messages. |
For ElevenLabs and Vapi, configure tools on the vendor side with these names and schemas (also available at runtime as window.atlas.commands and toolDefinitions()):
[
{ "name": "fly_to_place", "parameters": { "place": "string", "altitude_km": "number?" } },
{ "name": "show_layer", "parameters": { "layer": "aircraft|ships|satellites|earthquakes|cameras|launches|water|groundwater|turbidity|trade|commerce|realestate|companies|banks|spending|occupations|weather|wildfire|fires|hazards|flood|wetlands|publiclands|relief|slope|contours|soils|firehazard|landcover|sealevel|transmission|pipelines|plants|rail|airports|dams|faults|landslides|geology|plss|events|parcels|zoning|permits|licences|envpermits|sports|constructs|field|alerts", "on": "boolean", "place": "string?" } },
{ "name": "find_object", "parameters": { "query": "string", "follow": "boolean?" } },
{ "name": "follow_selected", "parameters": { "on": "boolean" } },
{ "name": "set_time", "parameters": { "offset_minutes": "number?", "live": "boolean?" } },
{ "name": "home_view", "parameters": {} },
{ "name": "water_report", "parameters": { "place": "string?" } },
{ "name": "explore_preset", "parameters": { "preset": "string?", "tour": "boolean?" } },
{ "name": "describe_view", "parameters": {} },
{ "name": "open_panel", "parameters": { "panel": "screener|indicators|releases|movers|watchlist|desk|hud", "on": "boolean?" } },
{ "name": "screen", "parameters": { "kind": "county|state|port|crossing|country", "query": "string" } },
{ "name": "watch_selected", "parameters": {} },
{ "name": "set_vintage", "parameters": { "date": "string?" } },
{ "name": "set_lens", "parameters": { "lens": "realestate|economist|trader|water|logistics|banking|explorer" } }
]
Vapi tools must be marked async: true (the browser executes them; there is no server webhook).
Architecture
browser ─────────────────────────────────────────────────────────────────────────────┐
│ │
│ components/hud/* HUD: layer panel, info panel, timeline, search, voice │
│ │ zustand (lib/store) │
│ ▼ │
│ components/globe/LayerHost.tsx one tanstack-query per enabled layer │
│ │ fetch() → GeoJSON FeatureCollection │
│ ▼ │
│ lib/layers/<name>.ts normalise upstream JSON → GeoJSON (pure, inspectable) │
│ │ │
│ ▼ │
│ lib/globe/renderer.ts LayerRenderer: billboards / points / polylines / labels /│
│ ground polygons / raster overlay │
│ lib/water/* Dogliotti physics, UTM, quality screening, water report; │
│ turbidity.worker.ts reads Sentinel-2 COGs in a Worker │
│ lib/globe/styles.ts glyph, colour, label, position-at-time per layer │
│ │ │
│ ▼ │
│ components/globe/CesiumGlobe.tsx CesiumJS viewer, imagery, picking, follow, │
│ cinematic drift, clock sync │
└─────────────────────┬──────────────────────────────────────────────────────────────┘
│ fetch /api/* (optional keys travel as x-gev-* headers)
▼
app/api/<layer>/route.ts thin proxies: CORS, polite User-Agent, gzip, in-memory
TTL cache, per-upstream rate gate, 429 back-off
app/api/{hazards,land,space} hazards & land API: WFIGS, FIRMS, NWS, GDACS, EONET, FEMA NFHL,
NWI, PAD-US, EPQS, GFZ, DONKI; the same envelope (lib/server/respond.ts)
app/api/infra transmission (HIFLD archive), EIA pipelines, FRA rail, FAA airports,
USACE NID, EIA-860M + Wikidata plants (bundled), USGS Qfaults and
landslides, BLM PLSS + T-R-S search, Macrostrat units
app/api/{air,events} AirNow hourly monitors (preliminary); GDELT conflict events by city
app/api/{terrain,soil} rendered terrain / land cover / flood-map tiles (edge-cached PNGs),
class and slope at a point, SSURGO soils in two SDA queries
app/api/parcels parcel at a point / lot lines in a box: one adapter per county or
state service (lib/parcels), NAD address points, BLM PLSS
app/api/{zoning,permits} zoning, permits, licences: city zoning GIS and permit portals, licence
registries, EPA ECHO, USACE ORM; one gate per host (lib/civic/request.ts)
app/api/{series,screen,indicators,releases,watch,companies,finance,economy/history}
practitioner API: provenance envelopes, CSV, OpenAPI at /api/openapi
app/api/mcp/route.ts MCP (Streamable HTTP, stateless) over the same routes
lib/series/* time-series store (file, GitHub raw, memory) + snapshot collectors
.github/workflows/snapshot.yml cron that commits data/series every three hours
│
▼
adsb.lol · OpenSky · Digitraffic · AISStream · CelesTrak · USGS · TfL · NYC DOT ·
Windy · Launch Library 2 · Overpass · Nominatim · Esri · NASA GIBS · Google · Cesium ion ·
USGS Water Data · NOAA NWPS · TWDB · US Drought Monitor · NIFC WFIGS · NASA FIRMS ·
NWS · GDACS · NASA EONET · FEMA NFHL · USFWS NWI · USGS PAD-US · USGS 3DEP EPQS ·
GFZ Kp · NASA DONKI · YouTube oEmbed (NASA's ISS stream) · USGS 3DEP · NRCS Soil Data Access ·
MRLC NLCD · county and state parcel services · USDOT NAD · city zoning and permit portals
(Seattle, Denver, NYC, Chicago, Dallas, San Antonio, Austin, LA, SF) · NY SLA · EPA ECHO ·
USACE ORM ·
(browser-direct, CORS open:) Earth Search STAC · sentinel-cogs S3 · AWS Terrain Tiles ·
USGS Shaded Relief · NRCS soils WMS · USFS WHP · NOAA sea level rise · Macrostrat tiles ·
Caltrans CWWP2 · DriveBC · Digitraffic weather cameras · data.gov.sg (camera stills) ·
(server:) HIFLD/EIA via Esri · BTS NTAD · FAA ADDS · USACE NID · USGS Qfaults · USGS landslides ·
BLM CadNSDI · Macrostrat API · EPA AirNow files · GDELT exports · BC Data Catalogue
Why proxies at all? OpenSky locks CORS to its own origin, adsb.lol and Overpass send no CORS headers, Nominatim requires a User-Agent browsers cannot set, Digitraffic requires gzip plus a client header, and CelesTrak asks for at most one fetch per group every two hours. The routes pass upstream JSON through untouched (big payloads are trimmed and say so with trimmed: true), so the network tab is the audit trail. The hazards and land routes add their own reasons: the FIRMS files are about 19 MB of CSV that the server cuts to the view, the NWS alert feed is 2.8 MB trimmed to what the layer shows, FEMA resets connections and needs retries, a 2° PAD-US box has to be capped and trimmed to stay under the platform's response limit, and the ISS stream has to pass its oEmbed check before anything is embedded. The parcels route exists so that county servers see one polite, cached request per parcel or box rather than one per visitor, and so that no owner name leaves the server except in the record of the one parcel clicked. The zoning and permits routes add theirs: the Corps' ORM search sends no CORS headers, ECHO answers in two steps (a query id, then its rows, which are what is cached), the city is picked from a Census place lookup before any zoning service is asked, and every portal is asked for named columns, so no mailing address, phone, applicant or contact name is requested.
Open the console and type gev for a live handle: gev.globe.getState(), gev.features(), gev.say("show me ships near Helsinki"), gev.run("set_time", { offset_minutes: -60 }).
Layer API
A layer is one file in lib/layers/ exporting a LayerDefinition:
import type { LayerDefinition, FetchContext, FetchResult } from "./types";
export const myLayer: LayerDefinition = {
id: "mything", // add to LayerId in lib/layers/types.ts
label: "My thing",
description: "Where it comes from and what it means.",
color: "#7CFFB2",
updateIntervalMs: 30_000,
defaultEnabled: false,
viewDependent: true, // refetch when the camera settles somewhere new
viewKey: (view) => `${view.lon.toFixed(1)},${view.lat.toFixed(1)}`, // optional, coarse by default
simulated: false, // true ONLY for simulations; shown loudly in the UI
timeDependent: false, // true to refetch when the mission clock changes day (satellite scenes)
dependsOn: ["earthquakes"], // optional: other layers refine() reads; a change in one re-runs refine, not fetch
estimate: undefined, // short caption when the layer computes rather than relays; shows an ESTIMATE tag
attribution: "Upstream name (licence)",
async fetch(ctx: FetchContext): Promise<FetchResult> {
// ctx.view = camera target/height/bbox, ctx.keys = optional operator keys,
// ctx.now = wall clock, ctx.missionTime = timeline clock, ctx.signal = abort,
// ctx.options = settings prefs
const res = await fetch(`/api/mything?...`, { signal: ctx.signal });
const data = await res.json();
return {
collection: { type: "FeatureCollection", features: [/* GeoJSON Features with BaseProps */] },
source: "upstream name",
fetchedAt: Date.now(),
note: "coverage caveat shown in the HUD",
};
},
// optional: what of the fetched result to draw given the dependsOn layers. ctx.layersOn = on/off,
// ctx.answering = has an answer on the map (not failed, not still loading), ctx.holds(layer, id) =
// that layer holds the feature now. Runs on each fetch and on each change in those layers.
refine: (result, ctx) => result,
};
Every feature carries BaseProps (lib/layers/types.ts): id, layer, name, optional kind, heading, altitude, speed, observedAt, source, simulated, details (rendered verbatim in the info panel), imageUrl, extra.
Register it in lib/layers/index.ts and give it a LayerStyle in lib/globe/styles.ts:
export const myStyle: LayerStyle = {
color: "#7CFFB2",
icon: (f) => "dot", // glyph from lib/globe/icons.ts, or null for a point
label: (f) => f.properties.name,
labelMax: 60, // label everything while the layer is small
trail: true, // keep a position history for the selected object
position: (f, timeMs) => [lon, lat, alt], // optional: moving objects
selectedLines: (f, timeMs) => [{ positions, color, width }], // optional: orbit / track
lines: (f) => [{ positions, color, alpha }], // optional: polylines (rivers, roads); Multi* geometries work
polygons: (f) => [{ rings, color, alpha }], // optional: filled ground polygons (drought classes)
overlay: (features) => ({ image, west, south, east, north }), // optional: one raster over the collection
tiles: ({ meta }) => [{ key, kind: "xyz", url, maximumLevel, alpha, z, credit, maxHeight }], // optional: a publisher's tiled picture (lib/globe/tiles.ts)
labelAlways: (f) => f.properties.kind === "major", // optional: keep a label regardless of labelMax
};
Rules the codebase keeps: never invent a value the upstream did not send (unknown heading stays undefined, AIS sentinels 511/360 are dropped), never count simulated features as live, never let a key reach third-party JavaScript except the SDK it belongs to.
Contributing
See CONTRIBUTING.md: the ground rules (public infrastructure, land and events; no named-individual search and no search from a person's or an owner's name to what they own; never invent a value; keyless first; polite to upstreams), how to add a layer or an Explore preset, and how to report a wrong number with a permalink.
Ethics guardrails
This project shows public infrastructure, public land and public events. It is a way to look at the world's shared systems, not at people.
- No face recognition, no person tracking, no named-individual search, no licence plates, no phone signals. No code path identifies a person from a face, a track, a licence plate or a phone signal, and no search goes from a person's name to what they own; none will be merged.
- Parcels, addresses and ownership are in scope, and as much of them as the public sources publish: they come as each source publishes them (a county parcel service, a federal land inventory such as PAD-US with its owners, managers and easement holders), with that source's own fields and terms, and nothing is added. What stays out is the search from an owner to its holdings: ⌘K never reads an owner, operator, manager or easement-holder field, so an owner's name finds land only where the publisher's own name for the unit contains it (a PAD-US unit name as PAD-US writes it). The palette searches feature names and an explicit list of published identifiers, categories and place names (callsign, registration, MMSI, NORAD id, fire id, ticker, sector, county…;
lib/search/allowlist.ts, tested). Institutions (public companies, banks) are found by the names their regulators publish, and a bank branch's name includes its bank ("Wells Fargo Bank · CONGRESS AVENUE BRANCH", from FDIC's institution and office names), so typing a bank's name in ⌘K, in voice "find" or in the desk table's filter lists the loaded branches of that bank. The desk table's filter matches every column of the economy layers it shows, a branch's bank among them; none of those layers carries an owner of land.
- Permits, licences and environmental permits come as their registries publish them. Every portal is asked for named columns, and no applicant, owner, contact or filing-representative name is asked for (Chicago's fifteen permit contacts, New York's applicant and owner, Austin's contractor and applicant names, a phone or mailing address anywhere); the Corps' applicant strings, which embed personal names, are never kept. Some names that can be a person's are requested or shown, and these are they: a licence registry's legal or registrant name (NY SLA, Chicago, San Francisco, Los Angeles, NYC DCWP) is requested only to test whether it is a company's and whether the trade name is that same name, and is discarded on the server otherwise; the contractor Austin, Seattle and Denver print on a permit, and the project name the Corps gives an action, are shown in the dossier as published and can be a person's name (a Corps project name that opens "Surname, Given" is withheld). Licences are shown by trade name, except a trade name that is a non-company registrant's own name, and a licence at an apartment or unit address is withheld as a home-business heuristic, counted and called a heuristic. Owner and officer registries (Chicago's Business Owners, Texas TDLR, Washington L&I principals) are not read. Features are named by their permit, licence or action number (a licence by its trade name), and ⌘K reads none of the address, contractor, facility, project or licensee fields. Zoning is regulation of land, as each city publishes it; where a city has no zoning (Houston) the dossier says so, and where no polygon covers a point it never says "unzoned".
If you build on this, keep the list above intact. It is the point.
What eye measures
One number: searches in a week that open a cited record. It is counted with Vercel Web Analytics, which sets no cookies, and it is off until Web Analytics is enabled for the project in the Vercel dashboard; until then the script is not served and nothing is sent.
- Page views carry the path only. eye keeps its state (layers, the view box, a selection) in the query string and the fragment, and both are stripped before anything leaves the browser (
stripUrl in lib/analytics/events.ts). Vercel's script also reports the referrer, the outside page a visitor came from, as that page sent it; eye does not alter it.
search, once each time the ⌘K palette closes after a query: results, a bucket (0, 1-3, 4-8, 9+), and kind, which result groups showed (objects, meaning, catalog, plss, place, joined by +, or none).
result_open, when a palette row is opened: group, the layer id from eye's own list or catalog, plss, place, other; and source, always palette.
record_open, when a record's dossier opens: layer, a layer id from eye's own list, and via, search (a palette result or a catalogue card from it) or map (a click on the globe: an object, a parcel, a zoning district). A parcel or zoning click counts when it is made, even if nothing is found under it, and records opened from the side panels (screener, watchlist, area, reports) are not counted, so map is approximate. catalog is reserved; the catalogue page sends nothing of its own.
No query text, no query length, no coordinates and no record ids are sent, ever. Every event goes through one typed wrapper that drops anything off those lists, and a test feeds an address-shaped query through every helper and checks it never reaches a payload.
Data sources and attribution
adsb.lol (ODbL) · OpenSky Network · ADS-B Exchange · Fintraffic / Digitraffic (CC BY 4.0) · AISStream.io · CelesTrak · USGS Earthquake Hazards Program · USGS Water Data API (public domain) · NOAA National Water Prediction Service · Texas Water Development Board · U.S. Drought Monitor (National Drought Mitigation Center, USDA, NOAA) · Natural Earth (public domain) · Copernicus Sentinel-2 L2A (ESA, free and open) via Element 84 Earth Search and the AWS sentinel-cogs registry of open data · Dogliotti, A. I., Ruddick, K. G., Nechad, B., Doxaran, D., Knaeps, E. (2015), A single algorithm to retrieve turbidity from remotely-sensed data in all coastal and estuarine waters, Remote Sensing of Environment 156, 157–168 · Benson & Krause (1984) for oxygen saturation · EPA National Recommended Water Quality Criteria for the screening thresholds · Transport for London Open Data · NYC DOT · Windy.com · The Space Devs Launch Library 2 · OpenStreetMap contributors (ODbL) via Overpass and Nominatim · Esri World Imagery (Esri, Vantor, Earthstar Geographics, and the GIS User Community) and its World Imagery Wayback releases (same attribution; Esri Master License Agreement, tiles loaded from Esri and not exported offline; the linked ArcGIS Terms of Use page was not read for this layer) · Historical Topographic Map Collection courtesy of the U.S. Geological Survey, Esri (USGS maps public domain; Esri's hosting under the Esri Master License Agreement), with each sheet's GeoPDF and GeoTIFF from USGS TNM Access · NASA GIBS / VIIRS Black Marble · Zillow Research ZHVI and ZORI (data through Zillow, free for public use with attribution) · U.S. Bureau of Labor Statistics QCEW (public domain) · U.S. Census Bureau TIGERweb (public domain) · U.S. Bureau of Transportation Statistics: Border Crossing Entry Data, Port Performance Freight Statistics, Supply Chain and Freight Indicators (public domain) · NGA World Port Index, Pub 150 (public domain) · World Bank World Development Indicators and WITS TradeStats (CC BY 4.0) · FRED, Federal Reserve Bank of St. Louis (series from Freddie Mac, Census, BEA, EIA, BLS, S&P Dow Jones) · U.S. Securities and Exchange Commission EDGAR APIs (public domain; fair-access policy) · Federal Deposit Insurance Corporation BankFind Suite (public domain) · USAspending.gov (public domain) · U.S. Census Bureau ZCTA-to-county relationship file · USGS Watershed Boundary Dataset and 3DEP Elevation Point Query Service (public domain) · EPA Level III and IV Ecoregions (public domain) · FEMA National Flood Hazard Layer (public domain) · NOAA National Weather Service api.weather.gov (public domain) · National Interagency Fire Center, WFIGS (IRWIN; NIFC: "not legal documents", no warranty) · NASA FIRMS: we acknowledge the use of data from the NASA LANCE FIRMS (https://earthdata.nasa.gov/firms), part of the NASA Earth Science Data and Information System (ESDIS) · National Weather Service alerts (public domain) · GDACS, Global Disaster Alert and Coordination System, European Commission Joint Research Centre (the feed's own notice: "European Union (CC BY 4.0), reuse is allowed, provided appropriate credit to GDACS is given") · NASA EONET (Earth Observatory Natural Event Tracker) and the Smithsonian Global Volcanism Program it links · FEMA National Flood Hazard Layer · U.S. Fish and Wildlife Service, National Wetlands Inventory · National Park Service, Cultural Resources GIS, National Register of Historic Places spatial data (public, non-restricted listings; general reference only, not Section 106 compliance) · U.S. Fish and Wildlife Service, threatened and endangered species critical habitat, final and proposed (FWS: the GIS files are not the legal source of critical habitat boundaries; ) · NOAA National Marine Fisheries Service, All NMFS Critical Habitat (public domain; the eCFR text is the legal boundary) · U.S. EPA Office of Pesticide Programs, Endangered Species Range Areas (data stewards USFWS Ecological Services and NOAA Fisheries; US EPA Data Licensing Agreement for public use) · U.S. Geological Survey Gap Analysis Project (GAP), 2025, Protected Areas Database of the United States (PAD-US) 4.1, · USGS 3D Elevation Program, Elevation Point Query Service · GFZ Potsdam, Kp index (CC BY 4.0; recent values preliminary) · NASA Community Coordinated Modeling Center, DONKI · U.S. Geological Survey, The National Map: 3D Elevation Program (3DEP) dynamic elevation service and the Shaded Relief tile cache (3DEP; USGS EROS GMTED2010) · USDA Natural Resources Conservation Service, Soil Survey Geographic Database (SSURGO), through Soil Data Access and the Soil Data Mart WMS · Dillon, Gregory K. 2023. Wildfire Hazard Potential for the United States (270-m), version 2023. 4th Edition. Updated 17 July 2024. Fort Collins, CO: Forest Service Research Data Archive. · Multi-Resolution Land Characteristics Consortium / USGS, National Land Cover Database 2021 · NOAA Office for Coastal Management, Sea Level Rise Viewer data · Terrain Tiles on the AWS Registry of Open Data (Mapzen / Tilezen), whose required attribution is: ArcticDEM terrain data DEM(s) were created from DigitalGlobe, Inc., imagery and funded under National Science Foundation awards 1043681, 1559691, and 1542736; Australia terrain data © Commonwealth of Australia (Geoscience Australia) 2017; Austria terrain data © offene Daten Österreichs – Digitales Geländemodell (DGM) Österreich; Canada terrain data contains information licensed under the Open Government Licence – Canada; Europe terrain data produced using Copernicus data and information funded by the European Union - EU-DEM layers; Global ETOPO1 terrain data U.S. National Oceanic and Atmospheric Administration; Mexico terrain data source: INEGI, Continental relief, 2016; New Zealand terrain data Copyright 2011 Crown copyright (c) Land Information New Zealand and the New Zealand Government (All rights reserved); Norway terrain data © Kartverket; United Kingdom terrain data © Environment Agency copyright and/or database right 2015. All rights reserved; United States 3DEP (formerly NED) and global GMTED2010 and SRTM terrain data courtesy of the U.S. Geological Survey · NASA's ISS live stream, embedded from NASA's own YouTube channel with YouTube's embedded player. Terms read for it (2026-09-26): the YouTube Terms of Service (effective 2023-12-15), which allow showing videos "through the embeddable YouTube player" and bar automated access other than by public search engines, so no YouTube page is fetched and the stream is checked only through the official oEmbed endpoint; the YouTube API Services Developer Policies (III.E.4.i data sharing on player load and autoplay, III.F.3 no gating of playback, III.I.6 no modifying or blocking the player, III.I.21 no nested iframes); and YouTube's Required Minimum Functionality for embedded players (a viewport of at least 200 x 200 px and nothing drawn over the player; its autoplay rules do not apply because the player does not autoplay) · Homeland Infrastructure Foundation-Level Data (HIFLD), U.S. Electric Power Transmission Lines (archive; "Last Data Update: 09/30/2024"), hosted by Esri's Federal User Community (the hosted item states the Esri Master License Agreement) · U.S. Energy Information Administration, natural gas, crude oil, petroleum product and HGL pipeline maps (public domain; hosted by Esri's Federal User Community under the Esri Master License Agreement) and Form EIA-860M, Preliminary Monthly Electric Generator Inventory (public domain) · Wikidata (CC0 1.0), nuclear power plants · Federal Railroad Administration and Bureau of Transportation Statistics, NTAD North American Rail Network Lines ("a work of the United States government … available for unrestricted public use"; acknowledgment of FRA and BTS) · Federal Aviation Administration, Aeronautical Information Services, Airports ("The data provided is for public use") · U.S. Army Corps of Engineers, National Inventory of Dams · U.S. Geological Survey, Quaternary Fault and Fold Database of the United States · Belair, G.M., Jones, E.S., Luna, L.V., and Mirus, B.B., 2019, Landslide Inventories across the United States (ver. 3.0, February 2025): U.S. Geological Survey data release, , and the inventories it compiles · Bureau of Land Management, National PLSS CadNSDI · Macrostrat (CC BY 4.0) and the geologic maps each unit cites · Caltrans CWWP2 CCTV (Caltrans Conditions of Use: "considered in the public domain"; CWWP2: "There is no charge for the use of this data"), read 2026-09-26 · Contains information licensed under the Open Government Licence – British Columbia (DriveBC HighwayCams, BC Data Catalogue), read 2026-09-26 · Fintraffic / digitraffic.fi, road weather cameras, CC BY 4.0 · Contains information from Traffic Images accessed daily from data.gov.sg, which is made available under the terms of the Singapore Open Data Licence version 1.0 () · U.S. EPA AirNow and the federal, state, local and tribal agencies that report to it (AirNow Data Exchange Guidelines, last updated August 2025: data are preliminary, credit the reporting agencies and AirNow, disseminate as received, make reliance known and keep contact details current; the layer is off until the operator returns that form) · The GDELT Project, ("any use or redistribution of the data must include a citation to the GDELT Project and a link to this website") · Parcels, credited to each publisher: Texas Geographic Information Office (TxGIO) StratMap Land Parcels, from the Texas appraisal districts named in each record; Harris Central Appraisal District; Travis County and the Travis Central Appraisal District; Maricopa County Assessor's Office; Los Angeles County Office of the Assessor; Cook County GIS and Cook County Assessor's Office (Cook County open data terms); King County GIS Center and Department of Assessments; City of Detroit; Wisconsin State Cartographer's Office and Department of Administration, Statewide Parcel Map (V12); NC Center for Geographic Information and Analysis (NC OneMap); Montana State Library and Department of Revenue; Minnesota Geospatial Information Office and the counties that opt in; Florida Department of Revenue and the county property appraisers; MassGIS (Bureau of Geographic Information); Vermont Center for Geographic Information; Utah Geospatial Resource Center and the county assessors; Ohio Geographically Referenced Information Program (OGRIP) and the county auditors; NJ Office of GIS (NJOGIS) and the MOD-IV tax list; NYS Office of Information Technology Services and Department of Taxation and Finance, with the contributing counties; State of Connecticut Office of Policy and Management (CC0); MD iMAP, Maryland Department of Planning and State Department of Assessments and Taxation · U.S. Department of Transportation, National Address Database (not intended for use as a mailing list) · Zoning, permits and licences, with each source's terms as read on 2026-09-26: City of Seattle, Office of Planning and Community Development and Department of Construction and Inspections, Current Land Use Zoning Detail (PDDL) and Building Permits (public domain) · City and County of Denver, Zoning and Residential Construction Permits (provided as is, without warranty, per Denver's use constraints) · NYC Department of City Planning, Zoning Districts and MapPLUTO (MapPLUTO for informational purposes, no warranty; asked for the tax lot's BBL only) and the Zoning Tax Lot Database, NYC Department of Buildings DOB NOW approved permits and NYC Department of Consumer and Worker Protection issued licences (no licence stated in the dataset metadata; NYC Open Data terms of use) · City of Chicago zoning districts, building permits and business licenses, carried with the city's required disclaimer on the site (in the About dialog and in the dossier of every Chicago zoning district, permit and licence) and in the API's , verbatim: "This site provides applications using data that has been modified for use from its original source, , the official website of the City of Chicago. The City of Chicago makes no claims as to the content, accuracy, timeliness, or completeness of any of the data provided at this site. The data provided at this site is subject to change at any time. It is understood that the data provided at this site is being used at one's own risk." · City of Dallas Base Zoning (no licence stated in the metadata; Dallas OpenData terms) · City of San Antonio CoSA Zoning (provided as is, without warranty) · City of Austin, Geospatial Services - Data Development, zoning (acknowledgment requested and given here; no warranty) and issued construction permits (public domain) · City of Los Angeles Department of City Planning generalized zoning (LA GeoHub), building permits (no licence stated) and Office of Finance active businesses (CC0 1.0) · San Francisco Planning Department zoning districts, Department of Building Inspection permits and Treasurer and Tax Collector registered business locations (ODC PDDL) · New York State Liquor Authority active licenses (no licence stated in the metadata; Open NY terms of use) · U.S. EPA ECHO Clean Water Act and Clean Air Act facility searches (public domain; ECHO asks bulk users to use its data downloads, and this app asks per view box, one request every two seconds, cached six hours) · U.S. Army Corps of Engineers Regulatory Request System public permit search, ORM (public domain; an undocumented public API, treated as unstable) · U.S. Environmental Protection Agency, Office of Water, ATTAINS assessment units from state, territorial and tribal Integrated Reports (EPA EGAC: approved for use, no liability, not EPA's official position) · U.S. EPA Toxics Release Inventory, Form R and Form A, through the Envirofacts data service (US federal public data; contact and certifier fields are dropped by allowlist) · U.S. EPA Envirofacts EMEF facility points: Superfund (SEMS), Toxics Release Inventory, RCRAInfo and ACRES Brownfields (US federal public data; the service's copyright text is "EPA OMS"; its terms page was not read) · U.S. EPA, Office of Land and Emergency Management (EPA_GEO), National NPL Superfund Site Boundaries (US EPA Data Licensing Agreement for public use; EPA does not vouch for the accuracy, completeness or currency of the data, and it is not for establishing liability or cost recovery) and EPA's Superfund National Priorities List (NPL) Sites with Status Information · U.S. EPA UST Finder, county layers: EPA's Office of Underground Storage Tanks, EPA's Office of Research and Development, The Association of State and Territorial Solid Waste Management Officials · U.S. EPA Office of Enforcement and Compliance Assurance, PFAS Analytic Tools (UCMR 5 results, from EPA's Office of Ground Water and Drinking Water) and U.S. EPA Community Water System Service Area Boundaries (MIT License, Copyright (c) 2025 US EPA, as the ArcGIS item's licenseInfo states it; the full notice is carried in this app's source list, , and in the provenance of every response drawn on these boundaries) · U.S. Army Corps of Engineers, Formerly Used Defense Sites (FUDS), FY24 property, project and munitions response site data (no usage constraints; preliminary, not comprehensive, not for legal use) · USGS The National Map: National Hydrography Dataset · USGS Network Linked Data Index · US EPA Office of Water, NHDPlus Version 2.1 · FEMA National Risk Index, December 2025 (this product uses FEMA's National Risk Index but is not endorsed by FEMA) · USDA Farm Service Agency, National Agriculture Imagery Program (NAIP), via Microsoft Planetary Computer · National Park Service: Land Resources Division, Heritage Partnerships, American Battlefield Protection Program (ABPP-NPS), World Heritage boundaries · Centers for Disease Control and Prevention, PLACES: Local Data for Better Health, 2025 release · CesiumJS (Apache 2.0) · satellite.js (MIT) · geotiff.js (MIT).
Please respect each upstream's rate limits and terms; the proxies already do (server-side caches, one request at a time per upstream, back-off on 429).
Development notes
- Next.js 16 (Turbopack), React 19, Tailwind 4, shadcn (base-ui), Zustand, TanStack Query, CesiumJS 1.145, satellite.js 7.
scripts/copy-cesium.mjs copies Cesium's Workers/Assets/Widgets/ThirdParty into public/cesium on install/dev/build; window.CESIUM_BASE_URL is set before Cesium is dynamically imported.
- Satellite positions come from
lib/globe/sat.worker.ts (a Web Worker fed mission time once a second, or immediately after a timeline jump); the style falls back to main-thread SGP4 where Workers are unavailable.
next.config.ts aliases @spz-loader/core (Cesium's Gaussian-splat decoder, unused here) to lib/vendor/spz-loader-stub.ts. Its inlined WebAssembly string gets minified into an invalid template literal in Turbopack production builds, which made the whole Cesium chunk fail to parse on Vercel while dev mode worked. Drive the production build in a browser, not just curl, before shipping.
- satellite.js is imported through
lib/vendor/satellite.ts, not its package root: the root re-exports a WASM/pthreads runtime that imports node:worker_threads, which makes next build hang under Turbopack and fail under webpack. The shim reaches the pure SGP4 modules by relative path.
- The turbidity layer never touches the server:
lib/water/turbidity.worker.ts does the STAC search and the COG range reads (geotiff.js) inside a module Worker, so the multi-megabyte band windows stay in the browser. Overview level follows camera height (10 m below 40 km, 20 m below 100 km, 40 m below 200 km, else 80 m) and a chip needs the same water-pixel fraction the explainer required (25 of 64×64 at 10 m).
lib/water/dogliotti.ts is the whole algorithm; lib/water/quality.ts holds the thresholds and the screening index; lib/water/report.ts the community report. All three are plain functions with no Cesium or React in them so they can be unit-tested or reused.
node scripts/turbidity-check.mjs <lon> <lat> [resolution] [before-date] runs the very same worker code from Node (compiled on the fly into .tmp-turb/) and prints the scene it chose, the DN→ρ check and the chips. node scripts/turbidity-check.mjs -98.34 29.28 20 2025-01-19 reproduces the explainer's Bexar scene: Calaveras chips 4.3–4.9 FNU, Braunig 3.9–4.0.
- Sentinel-2 COG gotchas met on the way: only the first IFD carries a geotransform, so an overview's origin/resolution must be derived from the base image (geotiff.js throws "no affine transformation" otherwise); the STAC
raster:bands offset of −0.1 does not match this bucket's pixels (DN/10000 does), which the worker verifies per scene; and a tile's says little about one lake, so scenes are ranked by cloud over the actual window.
Disclaimer
Positions are as reported by their upstream and may be delayed, dead-reckoned (aircraft/ships for ≤ 90–180 s) or propagated (satellites via SGP4). Launch ascent arcs are coarse estimates. The traffic layer is a simulation. Water-quality screens compare a gauge's latest provisional reading with published thresholds; satellite turbidity and the supply-stress number are estimates with their formulas shown, not measurements, and none of it is advice about whether water is safe to drink. The hazard layers relay what NIFC, NASA, NWS, GDACS and EONET publish, minutes to hours late; they are not a warning service, so follow official channels and local authorities in an emergency. FEMA flood zones are a regulatory map, not a forecast; NWI wetlands are mapped from imagery that can be decades old; and PAD-US public-access codes are not permission to enter. Wildfire Hazard Potential is an index for long-term fuels planning, not a map of risk or a forecast; NOAA's sea level rise layers are screening-level scenarios; soil ratings are survey interpretations, not a price or a statement about any one field. The infrastructure layers are public reference maps, some of them generalized or archived (the transmission map was last updated 2024-09-30), and none is for locating anything before digging; dam hazard potential is the consequence of a failure, not a dam's condition; Quaternary faults are not an earthquake forecast; AirNow readings are preliminary; and GDELT events are machine-coded from news reports, not verified incidents. Parcel records are tax records relayed as their county or state publishes them: not surveys, not title records, and possibly older than the source's own record, which is linked. Zoning is shown as each city's GIS publishes it, not as a zoning verification; a permit is permission to build, not proof that work happened; environmental compliance is in ECHO's own words and is only as current as ECHO. This is an educational and situational-awareness toy, not a navigation, safety or surveillance tool. Inspired by the vibe of bilawalsidhu/gods-eye-view; all code here is original.
MIT © 2026 jcdavis131 and contributors.