You are a fundraising analyst. Tell me where my donors physically cluster in Australia. Produce two outputs in this directory:
answer.md — state-level breakdown, top-10 by count vs top-10
by rate, donor-belt and donor-desert descriptions, and an
operational “what to do with this” section keyed to the three
buckets (both-lists / count-only / rate-only).answer.html — two interactive maps side-by-side: top by
donor count vs top by donor rate per 1,000 adults. The whole point
of this example is the lists aren’t the same. The page also carries
a small “What to do” actions card so a non-analyst viewer can read
the strategic takeaway without leaving the map.sample_donors.csv — donor file (postcode, gift_amount, frequency, …).POA boundary geometry — ABS ArcGIS REST:
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
Adult population per POA (the denominator for the rate calculation) — ABS Census 2021 G01 via the Data API:
https://data.api.abs.gov.au/rest/data/ABS,C21_G01_POA,1.0.0/...?format=jsondata
If SDMX is unmanageable, fall back to general knowledge of postcode
population sizes and disclose at the top of answer.md.
answer.md)State-level breakdown — % of donors per state vs each state’s AU population share. Over/under-index?
Capital city vs regional — for each state, % metro vs % rest. Compare against ABS urban/regional split.
Top 10 postcodes by donor COUNT. Name the suburb(s). Flag the cohort (high-income / mid-income / wealth-belt / regional / inner-urban / outer-suburb).
Top 10 postcodes by donor RATE (donors per 1,000 adult population). Compare to the count list — if the lists are different, name the story (e.g. “2042 Newtown appears on rate but not count — lower-population postcode, high per-capita traction”).
The donor belt — describe high-density postcodes as a single geographic story (e.g. “eastern Sydney waterfront + Mosman / Cremorne on the north shore + an inner-city renter stripe”). If there isn’t one cohesive belt, say so honestly.
The donor desert — same for postcodes where I have zero or near-zero supporters.
One chart to commission based on what you found. Tell me what to ask the design team for.
What to do with this — three operational plays, one per bucket. The whole point of the count-vs-rate split is that each bucket implies a different move. Don’t give generic advice — name the specific postcodes and the specific moves.
After the chart recommendation and the actions section, add a short “How to read this” block (~80 words) aimed at someone seeing this analysis for the first time. Explain:
Length: 600-800 words plus the explainer (raised from 500-700 to accommodate the actions section — don’t pad to hit the cap).
answer.html)Two side-by-side MapLibre maps in a CSS Grid, each ~50% of the viewport width, sharing the same legend and basemap. The point of the layout is the visual delta between count and rate.
Map instances, one per
panel.light_all raster, no key.fill — colour the panel’s top-10 postcodes by their relevant
metric (count or rate). Use a sequential ramp:
#deebf7 → #9ecae1 → #3182bd (3-step quantile).#fee6ce → #fdae6b → #e6550d (3-step
quantile).line — postcode outlines #1a1a1a width 0.5, opacity 0.4.#7b2cbf, dash-array [4, 3], width 2.0) drawn
over the fill in both panels. This makes “same postcode in both”
visually unambiguous.map.on('move', ...) so panning or
zooming one panel mirrors the other.Left = top postcodes by raw donor count (volume). Right = top by donors per 1,000 adults (density per capita). Purple-dashed outlines mark postcodes on both lists. The delta between the panels — postcodes that appear in only one — is the story. ~320px wide, semi-transparent white, subtle shadow, dismissible.
After both files are written, run open answer.html so the map opens
in the user’s default browser straight away.
answer.md.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.