Skip to content
alex-huang.dev
Go back

BreatheVIC: A Full-Stack Pollen & Air Quality Tracker for Victoria

4 min read
Cover image for BreatheVIC: A Full-Stack Pollen & Air Quality Tracker for Victoria

BreatheVIC was a university capstone project: build a production-quality web application for a real user problem. The problem we chose was pollen allergy management in Victoria — a condition that affects hundreds of thousands of Victorians, with thunderstorm asthma events making it genuinely dangerous for a subset of the population.

The core product question was: what information does a pollen-sensitive Victorian need to plan their day, and how do we surface it without requiring them to visit five separate websites?

BreatheVIC — application banner and brand

What We Built

BreatheVIC combined five data streams into a single interface:

Pollen forecasts — integrated with the Melbourne Pollen Count monitoring network to show daily pollen levels. Pollen data was displayed as historical trend charts for six regions: Melbourne, Bendigo, Dookie, Churchill, Creswick, and Hamilton.

Air quality — pulled in real-time air quality index data, surfaced alongside weather conditions for the day.

Weather forecast — standard daily forecast integrated into the dashboard, giving users a combined view: pollen + air quality + weather in one place.

Plant sighting map — an interactive map showing locations of common pollen-producing plants in Victoria. Crucially, users could report their own sightings, adding geo-tagged entries to the shared dataset. This crowdsourcing angle made the map progressively more accurate over time.

Subscription alerts — users could subscribe to daily email or SMS notifications for their region, receiving a morning briefing with the day’s pollen, air quality, and weather outlook.

BreatheVIC — main dashboard view with daily forecast and pollen data

Feature Breakdown

FeatureDescription
Allergy informationCondition pages for hay fever, sinusitis, and asthma — causes, symptoms, treatment
Pollen visualisationHistorical pollen count charts per region
Plant sighting mapInteractive map with user-contributed sightings
Daily forecastsPollen + weather + AQI per region
Forecast subscriptionEmail/SMS opt-in with region selection
Treatment centresNearest GP/pharmacy lookup via map
Relief productsCurated product list with reviews and Chemist Warehouse links

BreatheVIC — plant sighting map and pollen visualisation views

The Community Contribution Problem

The plant sighting feature was the most interesting design challenge. Crowdsourced geographic data is only useful if the contributions are genuine, correctly located, and appropriately categorised. For a university project, we couldn’t deploy a full moderation system, so we focused on:

  • Requiring users to select from a defined list of plant species (no free-text species entry)
  • Auto-populating the location from browser geolocation with a manual override
  • Showing sightings on the map with date stamps so staleness was visible

A live production version would need moderation, duplicate detection, and probably some confidence scoring — but the core submission flow worked cleanly within scope.

What BreatheVIC Was Missing (and Why That’s Instructive)

Looking back, the biggest limitation was that we were aggregating data from disparate sources without a unified data model. Pollen data, weather data, and AQI came from different APIs with different refresh cadences, different coverage areas, and different reliability SLAs. The app would sometimes show today’s pollen alongside yesterday’s weather because one API hadn’t updated yet.

A production system would need a backend that normalised refresh timing — fetching all data sources on a schedule, caching them in a single database, and serving from cache rather than live API calls on each page load. We were doing too many live callouts at render time.

That’s a lesson I’ve applied in subsequent work: external API integration should be decoupled from page rendering. Fetch on a schedule, persist, and serve stale-with-timestamp rather than failing live.

Watch product demo on YouTube


Share this post on:

Previous Post
Automating Office 365 Group Provisioning with Microsoft PowerApps

A Microsoft PowerApps form that automates Office 365 group creation — auto-generating email addresses, enforcing naming conventions, and connecting to SharePoint and Teams.

Next Post
Visualising Victoria's Road Crashes: An R Shiny Data Exploration App

An interactive R Shiny dashboard exploring five years of VicRoads crash data, featuring speed-zone analysis, severity mapping, and road-type breakdowns.