Field safety intelligence for 285 actual power plants across all 50 US states. Every site shares one normalized environmental-data and risk pipeline. HeatCast and GroundCast add model evidence for the original fifty-site historical cohort. Reports become persistent site knowledge for the next shift.
Requires Node.js 22.13 or later. Model weights, evaluation results, real plant locations, and historical demo data are already bundled. Python is only needed to rebuild the dataset or retrain the base models.
npm ci
npm run devOpen http://localhost:5180. The API listens on port 3001. Vite waits for /api/health before accepting browser requests, preventing proxy connection errors during initial startup. If readiness fails within thirty seconds, check the API process output. For the production build:
npm run build
npm startOpen http://127.0.0.1:3001. SQLite records and photos live in the ignored runtime/ directory. The API binds to localhost by default. To try a phone on a trusted local network, set HOST=0.0.0.0 and use the Vite development URL printed for that network. This hackathon prototype has no account authentication; keep it on a trusted network.
Copy .env.example to .env to configure optional providers and Jev access. NASA FIRMS uses keyless regional downloads by default; FIRMS_MAP_KEY enables smaller area queries; USGS_API_KEY is optional. FEMA and public wildlife queries need no key in the implemented adapters. Lightning defaults to unavailable until a trusted source is supplied. SITE_SCOPE=trained loads only the 50 HazardCast model plants instead of the full 285-plant catalog; stored records for other plants are kept but not sent. See provider setup and limits.
Run npm run data:complete to refresh all plants and write a field-by-field data-completion export under runtime/site-data/. Real values take priority. All 34 preview fields receive source values or labeled synthetic demo values, including hypothetical event/gauge fields; synthetic completion never feeds live risk, task policy or model training. Conditions and Site intelligence show these estimates by default with a source-only switch. Use npm run data:complete -- --offline to rebuild the full export from existing source records.
For optional JEV classification, set TYPESAFE_API_KEY server-side. The adapter calls the official https://api.typesafe.ai/v1/systemone endpoint. Jev classifies report text and affected tasks; it does not generate briefings or clear restrictions. No credential is bundled. Without a key, manual reporting remains fully functional and the interface says that Jev is unavailable.
Threshold Crew is a separate Expo iPhone app for photo → map pin → team sharing. It uses the same server, preserves reports as location knowledge for later project owners, and keeps unshared drafts on the device. See iPhone and Simulator setup.
- 285 EIA plant locations across all fifty states, an interactive Three.js supervisor map with risk beacons and an expanded showcase, seven visible hazard channels, and an evidence-backed 0–10 index. Missing safety coverage stays unknown.
- Equipment mobilization, outdoor installation, and sheltered preparation restrictions. Missing coverage stays unknown.
- Photo reports with map pins, immediate task holds, streaming updates to other screens, manual confirmation of Jev suggestions, and resolutions that preserve history.
- Lightning replay with the 10-mile rule and a 30-minute countdown reset by the latest qualifying strike. Strike timestamps persist in SQLite.
- A 6 PM site-local scheduler that stores next-day briefings, carries unresolved reports, and prevents duplicate site/date briefings across restarts. The Node process must remain running for scheduling and live updates.
- Real HeatCast and GroundCast neural model weights, reproducible NumPy training, chronological evaluation, and a separate ten-site geographic holdout.
- A homepage historical forecast replay with outcome reveal and sensitivity controls.
- A production service worker and cached workspace for offline viewing.
- Batched Open-Meteo weather/soil inputs, official NWS alerts, nearby USGS stages, FEMA exposure and public wildlife context for all sites. FIRMS supports keyless regional downloads and optional keyed area queries; lightning modes distinguish unavailable, recorded live events and replay. Source-specific caches, expiry and backoff preserve unknowns on failure.
- Continuous weather, heat, lightning, flood, wildfire, soil and wildlife channels; dominant risk plus bounded secondary compounding; separate task policy. Ordinary crew reports do not force risk to 10.
- An authoritative 3D risk atlas with eleven layers, site explanations, coverage/confidence, current overrides and a backend-scored 72-hour timeline loaded on demand for the selected plant.
- A separate atlas scenario lab with invented hurricane and inland-rain tracks, adjustable wind/rain/drainage assumptions, animated geographic footprints, a 72-hour simulation clock, plant exposure comparisons and JSON export. Rainfall excess is hypothetical runoff generation, not flood depth or an operational forecast; see the model and limits.
| Area | Context |
|---|---|
| Browser app | src/README.md |
| API, engine, and persistence | server/README.md |
| Shared contracts and decisions | shared/README.md |
| Data preparation and training | scripts/README.md |
| Public assets | public/README.md |
| Local data intermediates | data/README.md |
| Verification | tests/README.md |
Read the architecture for the directory tree and data flow. The documentation index links the API, models, data/policy context, and demonstration guide. AGENTS.md records contributor guidance and invariants. Every maintained directory has a local README; generated/dependency folders are documented by their parent.
npm test
npm run build
npm run test:e2eBrowser tests use installed Google Chrome. They cover the report handoff between screens, actual photo upload, lightning reset, briefing generation, resolution history, browser model inference and training, offline inference, and mobile layout. Screenshots are written to ignored test-results/.
External providers + crew evidence
→ normalized SiteObservationV1
→ hazard enrichment and seven continuous scores
→ composite risk + independent task policy
→ SiteRiskSnapshot
→ /api/risk/atlas?hour=0..72
→ supervisor map and canonical site ranking
The atlas distinguishes raw temperature/rain/wind from scored hazard channels. Unknown values are gray question marks; low-confidence known values are dashed and translucent. The inspector’s Overview, Conditions and Sources views show risk, coverage, confidence, drivers, task decisions, all 34 normalized environmental fields, field provenance, provider health, model availability and plant metadata. The canvas draws the Southeast plus any other state holding a loaded plant and fills the viewport behind floating navigation, a site search with the stop-work and high-risk plants to review first, layer controls and a prompt for the selected plant’s 72-hour filmstrip. The inspector lists only drivers with a known score. The national map retains current conditions while the inspector displays the selected forecast. A collapsible dark evidence drawer overlays the map; it starts closed on phones. Reports update connected supervisors through SSE; confirmed JEV classifications supply semantic evidence, never final site-risk numbers.
Current snapshots use actual system time even during the historical demo. Future frames reuse backend normalization/scoring and the same model context over available hourly weather. Gauge readings, fires, strikes, sightings and alert checks are held at their latest reading rather than dropped; forecast tasks are not work authorization. Historical model replay and stored briefings retain their labeled periods.
The catalog contains 285 operating EIA plants across all fifty states, with at least five per state. The original fifty-site model cohort is preserved; catalogOnly means no historical model coverage, not exclusion from environmental collection. Regenerate the catalog with npm run data:catalog.
Read the architecture, pipeline contract, scoring formulas, provider setup, atlas API, and current immersive atlas screenshots/audit. Compatibility weather routes remain available, but the supervisor map does not call them.