{"id":51065333,"url":"https://github.com/urbanmorph/oaq","last_synced_at":"2026-06-23T06:01:25.666Z","repository":{"id":349908665,"uuid":"1204453439","full_name":"urbanmorph/oaq","owner":"urbanmorph","description":"Unofficial mirror of oaq.notf.in — India air quality leaderboard","archived":false,"fork":false,"pushed_at":"2026-04-08T04:46:20.000Z","size":108,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-08T05:21:59.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/urbanmorph.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2026-04-08T02:52:33.000Z","updated_at":"2026-04-08T04:46:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/urbanmorph/oaq","commit_stats":null,"previous_names":["urbanmorph/oaq"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/urbanmorph/oaq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanmorph%2Foaq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanmorph%2Foaq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanmorph%2Foaq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanmorph%2Foaq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urbanmorph","download_url":"https://codeload.github.com/urbanmorph/oaq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanmorph%2Foaq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34677401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-06-23T06:01:24.687Z","updated_at":"2026-06-23T06:01:25.659Z","avatar_url":"https://github.com/urbanmorph.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# oaq\n\n**Unofficial mirror of [oaq.notf.in](https://oaq.notf.in)** — a zero-JS, single-page leaderboard of live air quality across India. 3,000+ stations ranked worst-to-best, updated hourly, fully indexable by search engines and AI agents.\n\n\u003e This project is not affiliated with OAQ or any data provider. It exists to make the same open data faster to load, easier to search, and legible to LLMs.\n\n## What this is\n- One HTML page. Worst 50, Best 50, every city's stations as collapsible sections.\n- ~50 KB brotli total, including CSS and JS. Works fully without JavaScript beyond a tiny filter.\n- Every station has HTML, JSON, and Markdown variants for humans, APIs, and LLM agents.\n- **Estimated health impact** on every station — years of life expectancy lost if the current\n  PM2.5 level persisted annually, via the\n  [Air Quality Life Index](https://aqli.epic.uchicago.edu/about/the-index/) formula\n  (Greenstone et al., U Chicago EPIC; Ebenstein et al. 2017 PNAS).\n- Hosted on Cloudflare Pages + Workers + R2. Free tier. Live at\n  **[oaq.pages.dev](https://oaq.pages.dev)**.\n\n## What this isn't\n- A map. No tiles, no markers.\n- A data source. Data comes from [oaq.notf.in](https://oaq.notf.in), which in turn aggregates from CPCB, Airnet (CSTEP), and Aurassure.\n- A framework showcase. The site is plain HTML generated by a 200-line TypeScript build script.\n\n## Architecture\n\n```\nCloudflare Worker (cron, hourly)\n  ├─ handshake OAQ broker → signature (cached in KV)\n  ├─ fetch 3 provider bulk endpoints\n  ├─ merge + sort + compute AQI\n  └─ write latest.json to R2\n\nbuild.ts (triggered by worker deploy hook)\n  ├─ read latest.json from R2\n  ├─ render home.html, station pages, docs\n  └─ publish to Cloudflare Pages\n\nCloudflare Pages (static)\n  └─ serves everything, brotli, global edge\n```\n\n## Acknowledgements\n- **Data** — [oaq.notf.in](https://oaq.notf.in), the Open Air Quality data broker.\n- **Upstream sources** — CPCB (State \u0026 Central Pollution Control Board, Government of India), Airnet ([CSTEP](https://cstep.in)), Aurassure (University Clean Air Network).\n- **UI** — [Oat](https://oat.ink) ([github.com/knadh/oat](https://github.com/knadh/oat)) by Kailash Nadh — semantic HTML, ~8 KB CSS + JS, zero dependencies.\n- **Health impact methodology** — [Air Quality Life Index](https://aqli.epic.uchicago.edu/) (AQLI), University of Chicago Energy Policy Institute. Based on:\n  - Ebenstein A., Fan M., Greenstone M., He G., Zhou M. (2017). *New evidence on the impact of sustained exposure to air pollution on life expectancy from China's Huai River Policy*. **PNAS** 114(39): 10384–10389. [doi:10.1073/pnas.1616784114](https://doi.org/10.1073/pnas.1616784114)\n  - Chen Y., Ebenstein A., Greenstone M., Li H. (2013). **PNAS** 110(32): 12936–12941. [doi:10.1073/pnas.1300018110](https://doi.org/10.1073/pnas.1300018110)\n  - WHO 2021 Global Air Quality Guidelines (5 µg/m³ annual PM2.5 baseline).\n\n## License\nMIT. See [LICENSE](./LICENSE).\n\nData is not relicensed by this project; attribution and license terms of the upstream sources apply.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbanmorph%2Foaq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furbanmorph%2Foaq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbanmorph%2Foaq/lists"}