{"id":48536251,"url":"https://github.com/m3data/community-resilience-index","last_synced_at":"2026-04-08T02:02:12.876Z","repository":{"id":346782230,"uuid":"1191153617","full_name":"m3data/community-resilience-index","owner":"m3data","description":"Community Resilience Index — postcode-level resilience intelligence for Australian communities. Live crisis signals, structural scoring, open data.","archived":false,"fork":false,"pushed_at":"2026-04-03T04:21:30.000Z","size":2385,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T06:34:21.955Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://community-resilience-index.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m3data.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-03-25T01:04:25.000Z","updated_at":"2026-04-03T04:21:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/m3data/community-resilience-index","commit_stats":null,"previous_names":["m3data/community-resilience-index"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/m3data/community-resilience-index","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m3data%2Fcommunity-resilience-index","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m3data%2Fcommunity-resilience-index/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m3data%2Fcommunity-resilience-index/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m3data%2Fcommunity-resilience-index/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m3data","download_url":"https://codeload.github.com/m3data/community-resilience-index/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m3data%2Fcommunity-resilience-index/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31536473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"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-04-08T02:02:11.994Z","updated_at":"2026-04-08T02:02:12.870Z","avatar_url":"https://github.com/m3data.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Community Resilience Index\n\n![Repo Status](https://img.shields.io/badge/REPO_STATUS-Active_Research-blue?style=for-the-badge\u0026labelColor=8b5e3c\u0026color=e5dac1)\n![Version](https://img.shields.io/badge/VERSION-0.1.1-blue?style=for-the-badge\u0026labelColor=3b82f6\u0026color=1e40af)\n![License](https://img.shields.io/badge/LICENSE-AGPL--3.0-green?style=for-the-badge\u0026labelColor=10b981\u0026color=047857)\n![Next.js](https://img.shields.io/badge/NEXT.JS-16-black?style=for-the-badge\u0026labelColor=171717\u0026color=000000)\n![TypeScript](https://img.shields.io/badge/TYPESCRIPT-5-blue?style=for-the-badge\u0026labelColor=3178c6\u0026color=235a97)\n\nPostcode-level resilience intelligence for Australian communities. Live at [australia.communityresilienceindex.net](https://australia.communityresilienceindex.net).\n\n## What it does\n\nEnter a postcode. Get your community's exposure profile: what structural characteristics shape your vulnerability, which pressures reach you hardest, what to do about them, and which signals to watch.\n\nThree layers of intelligence:\n\n1. **Structural profile** — per-postcode characteristics from official data (car dependency, industry diversity, remoteness, housing stress, solar capacity, socioeconomic position). These are the shape of your community. They explain why some pressures hit you harder than others.\n\n2. **Exposure mapping** — algorithmic computation of how exposed your community is across six domains (fuel, food, electricity, economic, housing, emergency). Driven by structural data, not opinion. Transparent rules, auditable logic.\n\n3. **Live signals** — 20+ automated feeds across a 6-layer cascade model. Upstream market pressure (Brent crude, crack spread, AUD/USD, ASX energy and food equities), supply position (DCCEEW fuel reserves, AEMO electricity, energy policy news), wholesale prices (AIP terminal gate prices), retail impact (WA FuelWatch, NSW FuelCheck, station availability, supermarket prices, food basket CPI), downstream cascade (RBA cash rate, farm inputs), and emergency feeds (NSW RFS, VIC EMV). Each signal shows its temporal window so you know what you're looking at.\n\nActions are computed from exposure weights, structural drivers, and diversity. The top three things to do are shown inline, ranked by urgency.\n\n## Signal architecture\n\nSignals are organised as a cascading failure early warning system. Pressure propagates through layers:\n\n```\nLayer 1: Upstream pressure     Brent crude, crack spread, AUD/USD, ASX equities\n    ↓\nLayer 2: Supply position       DCCEEW reserves, AEMO electricity, energy policy\n    ↓\nLayer 3: Wholesale prices      AIP terminal gate prices (diesel + petrol, city-level)\n    ↓\nLayer 4: Retail impact         WA/NSW fuel prices, station availability, food prices\n    ↓\nLayer 5: Downstream cascade    RBA cash rate, farm input costs\n    ↓\nLayer 6: Emergency             NSW RFS bushfires, VIC EMV incidents\n```\n\n**Station availability** is a proxy signal built from daily snapshots of WA FuelWatch (~1,100 stations) and NSW FuelCheck (~5,600 stations). Gap detection compares consecutive days to identify stations that stopped reporting. Other states lack public station-level reporting.\n\nThe signals page caches for 5 minutes. Individual API fetches have per-source revalidation windows (5 min for AEMO, 15 min for market data, 1 hour for wholesale prices, 24 hours for quarterly statistics). All external fetches have timeouts and graceful degradation.\n\n## Why\n\nAustralia imports ~90% of its refined fuel. It has been non-compliant with the IEA's 90-day reserve obligation since 2012 — the only member nation failing this requirement. Government headline reserve figures include fuel on water, in pipelines, and in the exclusive economic zone. Actual onshore controllable reserves are lower than reported.\n\nCitizens deserve higher fidelity information about how systemic pressures reach their communities.\n\n## Methodology\n\nStructural data from ABS Census 2021, SEIFA 2021, Modified Monash Model 2023, and Clean Energy Regulator. Exposure mapping uses algorithmic rules (not ML or LLM generation) documented in SPEC-003. Diversity measured via Shannon index. Coherence/entrainment spectrum distinguishes between communities that can reorganise under stress and those locked into brittle dependencies.\n\nFull methodology at [australia.communityresilienceindex.net/methodology](https://australia.communityresilienceindex.net/methodology).\n\n## Tech\n\n- **Framework:** Next.js 16 (app router, React 19, Turbopack)\n- **Styling:** Tailwind CSS v4\n- **Language:** TypeScript 5\n- **Icons:** Phosphor Icons (duotone, SSR imports)\n- **Data parsing:** ExcelJS for DCCEEW/AIP XLSX files\n- **Fonts:** Fraunces (headings), DM Sans (body), DM Mono (code)\n\nProfile engine is deterministic — algorithmic exposure weights, parameterised contextualisation templates. No ML, no LLM generation.\n\nSignal layer fetches from: Yahoo Finance, DCCEEW (data.gov.au CKAN), ABS (SDMX API), WA FuelWatch (RSS), NSW FuelCheck (CKAN), AIP (XLSX), AEMO (Visualisations API), RBA (CSV), NSW RFS (GeoJSON), VIC EMV (GeoJSON), Google News (RSS).\n\nDaily automated refresh via launchd agent (6am, runs on wake): supermarket price scraping, energy news, station snapshots. Auto-commits and pushes to trigger Vercel deploy.\n\n## Test coverage\n\n337 tests across 21 test files. All passing. ~830ms.\n\n| Area | Tests |\n|------|-------|\n| Scoring engine (BRIC, INFORM, quadrant, normalise, diversity, confidence, weights) | ~200 |\n| Profile API (`/api/profile`) | 28 |\n| Score API (`/api/score`) | ~10 |\n| Data loader | ~15 |\n| Layer 1 signals (brent, asx-energy, asx-food, aud-usd, crack-spread) | 28 |\n| Layer 2-6 signals (aemo, rba, nsw-rfs, vic-emv, food-basket) | 25 |\n| Signal aggregator | 7 |\n| Station availability (gap detection) | 6 |\n| WA FuelWatch, NSW FuelCheck, ABS CPI, fuel reserves, news volume | ~18 |\n\n```bash\nnpm test\n```\n\n## Data sources\n\n| Source | Frequency | Auth required |\n|--------|-----------|---------------|\n| ABS Census 2021 | Static (next: Aug 2026) | No |\n| ABS SEIFA 2021 | Static | No |\n| ABS CPI (SDMX) | Quarterly | No |\n| Modified Monash Model 2023 | Annual | No |\n| Clean Energy Regulator | Annual | No |\n| DCCEEW Petroleum Statistics | Weekly | No |\n| AIP Terminal Gate Prices | Daily | No |\n| WA FuelWatch | Daily | No |\n| NSW FuelCheck | Daily | Yes (API key) |\n| Yahoo Finance | Intraday (delayed) | No |\n| AEMO NEM | 5-minute dispatch | No |\n| RBA Statistical Tables | Monthly | No |\n| NSW RFS | Live feed | No |\n| VIC EMV | Live feed | No |\n| Google News RSS | Rolling | No |\n| Coles/Woolworths prices | Manual scrape | No |\n\nAll data sources are public and free. NSW FuelCheck requires an API key (apply via data.nsw.gov.au).\n\n## Licence\n\n**Code:** [AGPL-3.0](LICENSE). If you modify and serve this over a network, you must share your source.\n\n**Content** (methodology text, documentation): CC BY-SA 4.0.\n\n**Data** sourced under CC BY 4.0 (ABS, DCCEEW). INFORM methodology: JRC, CC BY 4.0.\n\n---\n\nBuilt by [Mat Mytka](https://moralimagineer.com) / [EarthianLabs](https://github.com/m3data). Research connection: transformative adaptation under systemic stress.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm3data%2Fcommunity-resilience-index","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm3data%2Fcommunity-resilience-index","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm3data%2Fcommunity-resilience-index/lists"}