{"id":38254597,"url":"https://github.com/tee8z/noaa-oracle","last_synced_at":"2026-02-17T04:10:47.166Z","repository":{"id":216883563,"uuid":"700634653","full_name":"tee8z/noaa-oracle","owner":"tee8z","description":"NOAA data oracle, queryable from the browser and can attest to events for a Bitcoin DLC in dlctix style","archived":false,"fork":false,"pushed_at":"2026-01-25T20:29:24.000Z","size":4253,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-26T10:23:48.871Z","etag":null,"topics":["data","duckdb-wasm","noaa-weather","parquet-files","sql","weather"],"latest_commit_sha":null,"homepage":"https://www.4casttruth.win/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tee8z.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-05T01:33:12.000Z","updated_at":"2026-01-25T20:29:25.000Z","dependencies_parsed_at":"2026-01-25T20:08:12.174Z","dependency_job_id":null,"html_url":"https://github.com/tee8z/noaa-oracle","commit_stats":null,"previous_names":["tee8z/noaa-data-pipeline"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/tee8z/noaa-oracle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tee8z%2Fnoaa-oracle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tee8z%2Fnoaa-oracle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tee8z%2Fnoaa-oracle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tee8z%2Fnoaa-oracle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tee8z","download_url":"https://codeload.github.com/tee8z/noaa-oracle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tee8z%2Fnoaa-oracle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28963417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T00:42:38.011Z","status":"ssl_error","status_checked_at":"2026-02-01T00:42:35.920Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","duckdb-wasm","noaa-weather","parquet-files","sql","weather"],"created_at":"2026-01-17T01:30:39.491Z","updated_at":"2026-02-01T01:15:18.914Z","avatar_url":"https://github.com/tee8z.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOAA Oracle\n\nA data pipeline system that fetches weather data from NOAA and serves it via a REST API with DLC (Discreet Log Contract) attestation support.\n\n- Live site: [4casttruth.win](https://www.4casttruth.win/)\n- Feel free to pull the parquet files and use in your own data analysis\n\n## Architecture\n\n```\n[NOAA API] \u003c- [daemon] -\u003e parquet files -\u003e [oracle] \u003c- parquet files \u003c- [browser DuckDB]\n```\n\n**Components:**\n- **daemon** - Background process that pulls data from NOAA, transforms it into parquet files, and pushes to the oracle\n- **oracle** - REST API that stores parquet files, serves them via browser UI, and provides DLC attestation\n- **ui** - Browser interface using DuckDB-WASM for client-side querying of parquet files\n- **core** - Shared library for configuration loading and utilities\n\n## Quick Start\n\n### Using Nix (Recommended)\n\n```bash\n# Enter development shell\nnix develop\n\n# Build both binaries\ncargo build --workspace\n\n# Or use just commands\njust build\n```\n\n### Without Nix\n\nThe oracle crate links against the DuckDB C library. Download the library from [DuckDB releases](https://github.com/duckdb/duckdb/releases) (e.g., `libduckdb-linux-amd64.zip`) and point to it:\n\n```bash\n# Extract and set environment variables\nexport DUCKDB_LIB_DIR=/path/to/libduckdb\nexport LD_LIBRARY_PATH=$DUCKDB_LIB_DIR:$LD_LIBRARY_PATH\ncargo build --workspace\n```\n\nAlternatively, use `--features oracle/bundled` to compile DuckDB from source (much slower build).\n\n### Running the Services\n\n```bash\n# Run daemon (fetches NOAA data)\njust run-daemon\n\n# Run oracle (serves data and API)\njust run-oracle\n\n# Run oracle with pre-existing weather data\njust run-oracle-standalone /path/to/weather/data\n```\n\n## Configuration\n\nConfiguration follows XDG Base Directory Specification. Files are searched in order:\n\n1. Environment variable (`ORACLE_CONFIG` / `DAEMON_CONFIG`)\n2. Current directory (`./oracle.toml` / `./daemon.toml`)\n3. XDG config (`~/.config/noaa-oracle/oracle.toml`)\n4. System config (`/etc/noaa-oracle/oracle.toml`)\n\nExample configurations are in the `config/` directory:\n- `config/oracle.example.toml`\n- `config/daemon.example.toml`\n\n### Oracle Configuration\n\n```toml\n[oracle]\nhost = \"127.0.0.1\"\nport = \"9800\"\nlog_level = \"info\"\n\n# Path to weather data (parquet files)\nweather_dir = \"/var/lib/noaa-oracle/weather\"\n\n# Path to UI files\nui_path = \"/var/lib/noaa-oracle/ui\"\n\n# Oracle private key for DLC attestation\noracle_private_key = \"/etc/noaa-oracle/oracle.pem\"\n```\n\n### Daemon Configuration\n\n```toml\n[daemon]\nlog_level = \"info\"\n\n# Where to store downloaded parquet files\ndata_path = \"/var/lib/noaa-oracle/data\"\n\n# Oracle endpoint to push files to\noracle_url = \"http://localhost:9800\"\n\n# Fetch interval in seconds (default: 3600 = 1 hour)\nfetch_interval = 3600\n```\n\n## NixOS Deployment\n\nAdd to your NixOS configuration:\n\n```nix\n{\n  inputs.noaa-oracle.url = \"github:tee8z/noaa-oracle\";\n\n  outputs = { self, nixpkgs, noaa-oracle, ... }: {\n    nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {\n      modules = [\n        noaa-oracle.nixosModules.default\n        {\n          services.noaa-oracle = {\n            enable = true;\n            oracle = {\n              enable = true;\n              host = \"0.0.0.0\";\n              port = 9800;\n            };\n            daemon = {\n              enable = true;\n              fetchInterval = 3600;\n            };\n          };\n        }\n      ];\n    };\n  };\n}\n```\n\n## Development\n\n```bash\n# Enter dev shell\nnix develop\n\n# Format code\njust fmt\n\n# Run clippy\njust clippy\n\n# Run tests\njust test\n\n# Build release\njust release\n```\n\n## Data Sources\n\n- **Observations**: [MADIS METAR](https://madis.ncep.noaa.gov/madis_metar.shtml) via [Aviation Weather API](https://aviationweather.gov/data/api/)\n- **Forecasts**: [NOAA Graphical Forecasts](https://graphical.weather.gov/xml/rest.php)\n\nData is updated hourly by NOAA; the daemon respects this by fetching once per hour.\n\n## Why This Architecture?\n\n- No remote database needed - just a file server, cheap to run\n- Client-side querying via DuckDB-WASM for flexible analysis\n- Simple, decoupled components that scale independently\n- Immutable data model (snapshots over time)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftee8z%2Fnoaa-oracle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftee8z%2Fnoaa-oracle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftee8z%2Fnoaa-oracle/lists"}