You are a fundraising analyst. I’ll give you a CSV of donor postcodes and gift amounts. Produce two outputs in this directory:
answer.md — the demographic profile of my donor file.answer.html — an interactive map of my donor postcodes.sample_donors.csv — columns: donor_id, postcode, gift_amount, frequency, first_gift_date.Postcode boundary geometry — ABS ArcGIS REST, returns GeoJSON:
https://geo.abs.gov.au/arcgis/rest/services/ASGS2021/POA/FeatureServer/0/query?where=poa_code_2021%20IN%20(<comma-quoted-list>)&outFields=poa_code_2021,poa_name_2021&outSR=4326&f=geojson
Replace <comma-quoted-list> with e.g. '2030','2027','2088' (URL-encode the apostrophes as %27).
Census 2021 demographics at the POA level — ABS Data API (SDMX):
https://data.api.abs.gov.au/rest/data/ABS,C21_T01_POA,1.0.0/...?format=jsondata
The SDMX dimension model is awkward; if you can’t get it cleanly, fall
back to your general knowledge of Australian postcode demographics and
state your sources at the top of answer.md.
Federal voting (2022 TPP) at booth level — AEC publishes CSVs at
https://results.aec.gov.au/27966/Website/Downloads/. Optional — only
needed if voting features come up in the analysis.
answer.md)Anchor every finding in a real number from the data. Don’t make claims you can’t back. Six sections, in this order:
End with three concrete actions (channel / message / segment). Include a final paragraph flagging the correlational-not-causal caveat.
After the actions, add a short “How to read this” block (~80 words) aimed at someone seeing this analysis for the first time. Explain:
Target length: 400-600 words plus the explainer.
answer.html)One interactive choropleth of donor postcodes, coloured by donor count.
https://unpkg.com/maplibre-gl@4/dist/maplibre-gl.js + matching CSS.light_all raster tiles, no key:
https://{a-d}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}@2x.png
4-domain sharding. Attribution: © OpenStreetMap, © CARTO.
<script> tag inline if it’s small, or
embed the fetched feature collection directly so the file works offline
once generated.fill — colour each postcode polygon by donor count using a 5-step
Viridis-style ramp (use d3-scale-chromatic or a hard-coded ramp:
#440154 → #3b528b → #21918c → #5ec962 → #fde725). Bands at the
20/40/60/80 percentiles of the donor-count distribution.line — thin postcode outlines (#1a1a1a, width 0.5, opacity 0.4).fitBounds to the bbox of the donor postcodes,
padding 40px.Postcode <NNNN> · <suburb name>
<N> donors · $<total amount> total
Demographics: <age 65+ %>, <owner-occupier %>, <median hhd inc>
Where your supporters live — coloured by raw donor count. Darker = more donors in that postcode. The fingerprint in the analysis is the average demographic profile across these postcodes. Hover a postcode for its demographics. Card width ~280px, semi-transparent white background, subtle shadow, close-button so the user can dismiss it.
open answer.html
and it works. No build step. No bundler. Load MapLibre from CDN.After both files are written, run open answer.html so the map opens
in the user’s default browser straight away.
answer.md is 400-600 words.Mapulus provides this prompt as educational starter content. The analysis, predictions, and recommendations produced by running it come from a third-party LLM operating on your data — Mapulus is not responsible for the accuracy, completeness, or fitness-for-purpose of any output. Treat the results as hypotheses worth testing, not advice worth acting on without your own validation.