1 pointby noiv2 hours ago1 comment
  • noiv2 hours ago
    Zero is a serverless weather globe rendering ECMWF forecast data directly in your browser using WebGPU.

    Zero backend. Zero servers. Zero cost.

    As climate extremes become more frequent, understanding forecast hazards becomes survival literacy. Zero makes professional ECMWF IFS data accessible without commercial infrastructure — forkable, self-hostable, resilient. Inspired by Cameron Beccario's earth.nullschool.net, which pioneered browser atmospheric visualization.

    Happy to discuss implementation details.

    Technical highlights:

    - No backend - runs entirely client-side - Native O1280 grid (6.6M points) sampled directly in fragment shaders - no regridding to textures - HTTP Range requests fetch ~500KB slices from 4-8MB forecast files on S3 - Works offline after first load (Service Worker caching) - Animated LOD transitions for graticule grid - line density adapts to zoom level

    GPU pipeline:

    - Binary search in WGSL for irregular Gaussian grid lookup (precomputed LUTs for latitude positions and ring offsets) - Marching squares compute shader for isobar contours - Streamline tracing with Rodrigues rotation for wind flow animation - Fibonacci sphere for uniform seed point distribution (8K-32K wind lines) - Globe rendered via fullscreen triangle (ray-sphere intersection in fragment shader) - Sub-3ms frame times on M1

    What didn't work:

    - Regridding to textures first - too slow for 6.6M points, quality loss from interpolation - Geometry-based globe mesh - vertex count explosion at high detail - CPU-side contour generation - latency killed interactivity

    Storage: Caches weather data locally for offline use. Can grow to several GB with extended exploration. Use the "nuke" option in settings to clear everything.

    Data hosted by Open-Meteo via the AWS Open Data Sponsorship Program — bandwidth is free for everyone.

    Stack: TypeScript, WebGPU, Mithril, Zod, Immer

    Mirror: https://hypatia-earth.github.io/zero

    Source: https://github.com/hypatia-earth/zero