{"id":42334286,"url":"https://github.com/mountain/rossby-vis","last_synced_at":"2026-01-27T14:11:55.607Z","repository":{"id":300214764,"uuid":"1005548687","full_name":"mountain/rossby-vis","owner":"mountain","description":"The stunning, interactive frontend of rossby server which visualize your NetCDF file ","archived":false,"fork":false,"pushed_at":"2025-09-05T11:03:26.000Z","size":6811,"stargazers_count":8,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-05T13:13:55.549Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/mountain.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":"2025-06-20T12:00:43.000Z","updated_at":"2025-09-05T11:03:22.000Z","dependencies_parsed_at":"2025-06-20T13:23:24.582Z","dependency_job_id":"e267e30a-b4ae-4bc6-9037-69569dc6179d","html_url":"https://github.com/mountain/rossby-vis","commit_stats":null,"previous_names":["mountain/rossby-vis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mountain/rossby-vis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Frossby-vis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Frossby-vis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Frossby-vis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Frossby-vis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mountain","download_url":"https://codeload.github.com/mountain/rossby-vis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Frossby-vis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28814494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"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":[],"created_at":"2026-01-27T14:11:54.966Z","updated_at":"2026-01-27T14:11:55.594Z","avatar_url":"https://github.com/mountain.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rossby-vis\n\n[![Build Status](https://github.com/mountain/rossby-vis/actions/workflows/ci.yml/badge.svg)](https://github.com/mountain/rossby-vis/actions)\n[![Crates.io](https://img.shields.io/crates/v/rossby-vis.svg)](https://crates.io/crates/rossby-vis)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\nA high-performance visualization frontend bridge between the Rossby NetCDF data server and Earth visualization interface, providing interactive global weather and oceanographic data exploration through streaming data architecture.\n\n## Project Overview\n\n`rossby-vis` serves as a standalone streaming data proxy that bridges the gap between NetCDF-based meteorological data servers and web-based visualization frontends. It embeds the Earth visualization interface as static assets while providing efficient, memory-safe access to large weather datasets.\n\n### Key Features\n\n- **Single Binary Distribution**: Embeds all frontend assets in a self-contained executable\n- **Streaming Data Proxy**: Handles multi-gigabyte datasets without memory bloat using chunked transfer encoding\n- **Unified API Integration**: Supports Rossby's modern `/data` endpoint with multi-variable requests\n- **Format Translation**: Converts NetCDF metadata to web-friendly JSON formats transparently\n- **Real-time Visualization**: Enables interactive exploration of meteorological and oceanographic data\n- **Memory Efficient**: Constant memory usage regardless of dataset size through streaming architecture\n- **Comprehensive Testing**: Unit and integration tests with CI/CD automation\n\n## Development\n\n### Prerequisites\n\n- Rust (stable channel, 2021 edition or later)\n- Cargo package manager\n\n### Building\n\n```bash\n# Build the project\ncargo build\n\n# Build for production\ncargo build --release\n```\n\n### Running\n\n```bash\n# Run the server on the default port (8080)\ncargo run\n\n# Run with a custom port and backend URL\ncargo run -- --port 9000 --api-url http://localhost:8000\n\n# Run with production logging\ncargo run -- --api-url http://localhost:8000 --log-format json --environment production\n\n# Run with debug logging and metrics\ncargo run -- --api-url http://localhost:8000 --log-level debug --enable-metrics\n```\n\n### Testing\n\n```bash\n# Run all tests\ncargo test\n\n# Run specific test suites\ncargo test --test integration_tests\n```\n\n### CI Checks\n\nThe project uses GitHub Actions for CI/CD with the following checks:\n\n- `cargo check`: Verifies the code compiles without errors\n- `cargo test`: Runs all unit and integration tests\n- `cargo fmt --check`: Ensures code formatting matches the Rust style guide\n- `cargo clippy`: Runs the Rust linter to catch common issues\n\nYou can run these checks locally before committing:\n\n```bash\ncargo check\ncargo test\ncargo fmt --check\ncargo clippy -- -D warnings\n```\n\n## System Architecture\n\n```\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│   Web Browser   │◄──►│   rossby-vis     │◄──►│  Rossby Server  │\n│                 │    │                  │    │                 │\n│ Earth Frontend  │    │ • Static Assets  │    │ • NetCDF Data   │\n│ • Visualization │    │ • Data Proxy     │    │ • Unified API   │\n│ • User Controls │    │ • Format Convert │    │ • Time Series   │\n└─────────────────┘    └──────────────────┘    └─────────────────┘\n```\n\n### Core Components\n\n1. **Static Asset Server**: Serves embedded Earth frontend (HTML, CSS, JavaScript)\n2. **Data Proxy Layer**: Streams and transforms data between Rossby and Earth formats\n3. **Format Converter**: Real-time NetCDF → JSON translation during streaming\n\n## API Integration\n\n### Rossby Server Requirements\n\nThe system integrates with Rossby's unified data endpoint:\n\n```bash\n# Multi-variable wind data request\nGET /data?vars=u10,v10\u0026time=1672531200\u0026format=json\n\n# Temperature data over time range\nGET /data?vars=t2m\u0026time_range=1672531200,1675209600\u0026format=json\n```\n\n### Response Format\n```json\n{\n  \"metadata\": {\n    \"shape\": [1, 721, 1440],\n    \"dimensions\": [\"time\", \"latitude\", \"longitude\"],\n    \"variables\": {\n      \"u10\": {\"units\": \"m s**-1\", \"long_name\": \"10 metre U wind component\"}\n    }\n  },\n  \"data\": {\n    \"u10\": [-4.76, -4.75, -4.73, ...]  // Flattened array, unpacked values\n  }\n}\n```\n\n## Supported Variables\n\n### Meteorological Data\n- **Wind**: u10/v10 (10m), u100/v100 (100m wind components)  \n- **Temperature**: t2m (2m temperature), sst (sea surface temperature)\n- **Pressure**: sp (surface pressure)\n- **Humidity**: d2m (dewpoint temperature)\n- **Precipitation**: sd (snow depth)\n- **Radiation**: tisr (solar radiation)\n\n### Oceanographic Data\n- **Ocean Currents**: u/v current components\n- **Sea Surface Temperature**: sst variable\n\n## Usage\n\n### Basic Server\n```bash\n# Start with default configuration\ncargo run\n\n# Custom port and backend server\ncargo run -- --port 8080 --api-url http://localhost:8000\n```\n\n### Production Deployment\n```bash\n# Build optimized binary\ncargo build --release\n\n# Deploy single executable  \n./target/release/rossby-vis --port 8080 --api-url https://rossby.example.com\n```\n\n## Development Plan\n\n### ✅ Phase 1: Static Asset Foundation\n- Single binary with embedded Earth frontend\n- Basic web server with configurable port\n- Static asset serving with proper MIME types\n\n### 🚧 Phase 2: Streaming Data Proxy  \n- HTTP streaming client integration\n- Chunked transfer encoding for large datasets\n- Real-time format conversion (Rossby → Earth)\n- Multi-variable support for coordinated requests\n\n### 📋 Phase 3: Advanced Features\n- Enhanced temporal navigation\n- Performance optimization and caching\n- Extended error handling and monitoring\n\n## Project Structure\n\n- `src/`: Application source code\n  - `main.rs`: Entry point with command line parsing\n  - `server.rs`: Web server implementation using Axum\n  - `handlers.rs`: Request handlers for static assets and data proxy\n  - `embed.rs`: Configuration for embedding static assets\n  - `error.rs`: Custom error types and handling\n- `public/`: Earth frontend assets (embedded at build time)\n- `tests/`: Integration tests for HTTP API and streaming\n- `doc/`: Comprehensive system design and development documentation\n- `.github/workflows/`: CI/CD configuration\n\n## Documentation\n\n- [`doc/design.md`](doc/stage1/design.md): Complete system architecture and technical design\n- [`doc/plan.md`](doc/stage1/plan.md): Comprehensive project documentation and development guidelines\n- [`AGENT.md`](AGENT.md): Development protocols and quality standards\n\n## License\n\nSee the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmountain%2Frossby-vis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmountain%2Frossby-vis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmountain%2Frossby-vis/lists"}