Inspiration

At SDG Open Hack, my team and I worked on Heartland Heat, an idea for cooling bus shelters. It got me thinking about a different question: before you cool anything, where are the people who need it most?

Singapore had at least 29 days of high heat stress in 2025, and 69,650 seniors live in HDB 1-2 room flats. When I called an Active Ageing Centre, staff told me they don't check heat forecasts at all. Decisions depend on what they see on the day, and they worry most about their frailest seniors, some in their 90s and 100s. That gap is what HeatCheck is for.

What it does

HeatCheck combines NEA heat stress data with where vulnerable seniors live, and sorts every residential subzone into Check first, Check next or Monitor. AAC staff get this a day ahead as a simple WhatsApp message, so they can plan lighter outdoor exercise, more water breaks, and check on their frailest seniors first.

Risk = heat × seniors in HDB 1-2 room flats × distance from eldercare

In the first version, 23 of 216 subzones are Check first, and they hold 34% of all seniors living in 1-2 room flats. The top 66 hold 80%. So AACs can reach most of the seniors who need help the most by focusing on under a third of the island.

How I built it

Everything runs on Databricks Free Edition:

  • A Lakeflow Job runs every hour, pulling live NEA WBGT and air temperature readings from data.gov.sg
  • Auto Loader loads only new files into bronze Delta tables in a Unity Catalog volume
  • Silver tables clean the data, with quality checks that removed 0.3% of about 950,000 readings as missing or unrealistic
  • I backfilled every WBGT reading since February 2025
  • I joined SingStat's June 2026 residents by subzone, URA subzone boundaries and MOH eldercare and AAC locations to build a gold risk table and a map
  • I tested a next-day forecast against simple baselines and tracked it in MLflow

Challenges I ran into

  • Some historical readings said "NA" instead of a number, which crashed my pipeline until I added safe conversion and quality checks
  • My first eldercare list was from 2024 and missed newer AACs, which pushed some Punggol areas up the ranking. I added MOH's 2026 list to fix it
  • My first forecast model did not beat simple baselines. Its average error was 1.01°C, against 0.87°C for a 7-day average. I kept that result instead of hiding it, and it showed me the model needs NEA's own 24-hour forecast as an input

Accomplishments that I'm proud of

  • A real pipeline that runs every hour without me touching it
  • Talking to AAC staff and changing the design based on what they said, like WhatsApp delivery and focusing on the frailest seniors
  • Being honest about what works and what doesn't yet

What I learned

Talking to the people who would actually use this changed my idea more than any dataset did. I also learned to test every model against a simple baseline before trusting it.

What's next for HeatCheck

  • Add NEA's 24-hour forecast so the next-day model beats simple baselines
  • Add seniors aged 85+ to the risk score, as AAC staff asked
  • Build the daily WhatsApp message, a Databricks App with the map, and Genie for plain-English questions
  • Test it with the AAC staff I interviewed

Built With

Share this project:

Updates

Submission history