The QR-linked companion to “Mapping the Geography of Giving”. Four
self-contained Claude Code examples. Each one produces both an analysis
(answer.md) and an interactive MapLibre map (answer.html) from your
donor data.
Nothing here sends donor data to a third party. Reference data is fetched live from public ABS endpoints (no auth required) — nothing ABS-related is bundled.
| # | Folder | Question | What the map shows |
|---|---|---|---|
| 01 | examples/01_donor_fingerprint/ |
What’s the demographic profile of my donor file? | Choropleth of donor postcodes coloured by donor count. |
| 02 | examples/02_spot_the_bias/ |
Which postcodes look like our donors but we’ve never asked? | Three-layer map: donors vs campaigned vs unasked look-alikes (the highest-leverage view in the kit). |
| 03 | examples/03_score_next_campaign/ |
Rank a list of postcodes I’m about to mail. | Targets coloured by similarity score 0-100, with the recommended cut-line outlined in gold. |
| 04 | examples/04_donor_cluster_locator/ |
Where do my donors cluster? | Two side-by-side maps: top by count vs top by rate per 1,000 adults. The delta is the story. |
Each folder contains:
prompt.md — full spec (analysis + map) — paste into any LLM that can fetch URLsCLAUDE.md — auto-loaded by Claude Code on session startREADME.md — what the folder is forexpected_output.md — what a good answer.md looks like (no answer.html reference — the spec lives in the prompt)cd starter/examples/01_donor_fingerprint
claude
# inside Claude Code:
"Run CLAUDE.md."
Claude reads the prompt, fetches boundary geometry + ABS Census features
from the public endpoints, writes the analysis to answer.md, and the
interactive map to answer.html. Open the HTML with open answer.html
to view.
All four prompts mandate the same stack so the outputs look consistent:
light_all raster basemap, 4-domain sharded, no API key:
https://{a-d}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}@2x.pngNo registration, no API keys.
| Source | URL pattern | What you get |
|---|---|---|
| ABS ArcGIS REST — POA boundaries | https://geo.abs.gov.au/arcgis/rest/services/ASGS2021/POA/FeatureServer/0/query?where=poa_code_2021%20IN%20(<list>)&outFields=poa_code_2021,poa_name_2021&outSR=4326&f=geojson |
GeoJSON polygons for any Australian postcode |
| ABS Data API — Census 2021 | https://data.api.abs.gov.au/rest/data/ABS,C21_T01_POA,1.0.0/...?format=jsondata |
SDMX-format demographic features per POA (income, age, religion, housing, etc.) |
| AEC 2022 booth-level TPP | https://results.aec.gov.au/27966/Website/Downloads/ |
Federal voting CSVs (optional — only if voting features come up) |
If the SDMX endpoint proves too painful at runtime, every prompt lets
Claude fall back to general knowledge of Australian postcode
demographics — provided that fallback is disclosed at the top of
answer.md.
The Sydney slide showed 9% of postcodes generate 50% of the dollars. Run the same chart for your donor file (local, no network):
python3 scripts/lorenz_curve.py your_donors.csv
Produces lorenz.png in the current directory. Works on any CSV with
postcode and gift_amount columns.
python3 scripts/_gen_sample_data.py
Writes:
examples/01_donor_fingerprint/sample_donors.csvexamples/02_spot_the_bias/sample_donors.csv + sample_campaign_list.csvexamples/03_score_next_campaign/sample_donors.csv + sample_campaign_targets.csvexamples/04_donor_cluster_locator/sample_donors.csv