Inspiration

In Canada, approximately 822,000 households are energy poor, and households living in dwellings that require major repairs are nearly twice as likely to experience energy poverty compared to all households Source: Stats Can. In a place like Kingston, one of the country’s oldest cities, that reality is especially visible: aging housing stock can mean drafty rooms, inconsistent heating, and higher heating and cooling costs. Its natural climate varies greatly, with common temperatures between -25˚C and +30˚C, and an average humidity of 75%. In the Limestone City, where older construction and moisture issues are common due to limestone's porous nature, poorly conditioned air can also increase mold risk, degrading indoor air quality and posing long-term health concerns.

Kingston’s strategic goals include developing measures to promote affordable housing and supporting climate action and sustainability for residents. Motivated by the overlap between comfort, affordability, and health, we created Goldilocks, an air-quality monitoring system designed to help people keep their home environment not too hot, not too cold, but just right, without wasting energy.

What it does

Goldilocks combines live Arduino-sensed temperature and relative humidity readings with local weather conditions and real-time energy pricing to help users choose the most cost-effective and energy-efficient way to keep their home comfortable. Instead of relying on guesswork, Goldilocks evaluates whether it’s better to run air conditioning or to use outdoor air for passive cooling (i.e., ventilate by opening windows) based on current indoor conditions and what the outside air will do to comfort and moisture levels.

All of this information is surfaced through our website in near real time: sensor telemetry is streamed to the application layer, where it’s fused with external data sources and translated into clear, human-readable guidance. This information is saved over time, so users can see their financial savings and the amount of CO2 they’ve saved. The result is a simple decision engine that can help households, businesses, and landlords to avoid inefficient heating/cooling behaviour even in older homes, and it is much cheaper than alternatives like a Google Nest.

By making comfort more data-driven, Goldilocks gives Kingston residents a practical way to control heating and cooling more efficiently, an area that often represents around half of a household’s energy bill.

How we built it

On the frontend, we used Next.js + React with Tailwind CSS for styling to create a clean, responsive interface that surfaces real-time readings, recommendations, and context at a glance. The backend was built with Node.js and Express.js, with better-sqlite3 powering an SQLite database for lightweight, reliable storage of device readings and app state.

To support accessibility and a more natural user experience, we integrated Google Gemini (Gemini 2.0 Flash via the Gen-AI API) as an in-app assistant that can explain readings and recommendations in plain language. We paired this with Google’s Web Speech API so the assistant can speak responses out loud, keeping the experience usable even when users can’t constantly read the screen.

For hardware, we used an ESP32 development Arduino module connected to a DHT11 temperature and humidity sensor to collect live indoor conditions. Those readings are then compared against outdoor conditions pulled from the OpenWeatherMap API, updated every 30 seconds. Our logic then reasons about whether passive cooling (ventilating with outdoor air) or mechanical cooling (air conditioning) is the better choice at that moment. Finally, to ground our recommendations in real cost, we referenced Utilities Kingston for the official electricity plan pricing and time-of-use periods, so the app can reflect how the decision changes depending on when energy is most expensive.

Challenges we ran into

One of our first hurdles was hardware packaging. Early on, we aimed to design a universal mounting shell that could be installed on many different window frame styles, and we started prototyping a SolidWorks enclosure intended for 3D printing. However, persistent printer issues, specifically clogged nozzles and calibration problems made it difficult to iterate quickly and reliably. To keep momentum, we pivoted to retrofitting an existing case and adapting it specifically for Goldilocks, which let us continue testing and demoing without being blocked by the print pipeline.

We also had to iterate on our microcontroller choice. We initially prototyped with an Arduino 101, then moved to an Arduino Uno R3 (provided through Major League Hacking). But as the project evolved, we needed stable, straightforward wireless connectivity to push sensor data to our backend and app. That requirement led us to switch to an ESP32-based Arduino development module, leveraging its built-in Wi-Fi to better match Goldilocks’ real-time, connected workflow.

Accomplishments that we're proud of

We’re proud of how much real-world context Goldilocks incorporates into its decision layer. Rather than treating comfort as a single threshold, our pipeline fuses live indoor temperature/humidity telemetry with outdoor conditions, time-of-use electricity pricing, and home context (e.g., heating vs. cooling mode, room size, and postal-code–level locality signals) to generate recommendations that are grounded in how Kingston homes actually behave.

On the air-quality side, we implemented exposure-based logic that considers both magnitude and duration, translating raw humidity readings into a simple, interpretable risk signal. For example, one of our risk meters classifies humidity like this:

LOW – under 60%, or only short spikes

MEDIUM – 60–70% sustained for more than 60 minutes

HIGH – above 70% for 3+ cumulative hours in a day

This is one instance of a broader approach: Goldilocks evaluates trends over time rather than single snapshots, since moisture accumulation and mold risk are driven by sustained conditions, not momentary values.

We’re also proud of the motivation behind Goldilocks. As students renting in one of Canada’s most expensive markets, we’ve seen how under-maintained ventilation and insulation can create persistent humidity issues, driving mold risk and forcing expensive last-minute cooling. Goldilocks targets that gap by turning sensor data plus local context into actionable insights, helping residents manage comfort and air quality more efficiently without relying on guesswork.

What we learned

Using the ESP32 taught us a lot about its capabilities and how useful it was to have integrated wifi. We also became a lot more aware of specific funding and local energy issues in Kingston that often are misrepresented, which is why we aimed to tackle that with Goldilocks.

What's next for Goldilocks

While Goldilocks is currently ready to be implemented on an individual residential level, some next steps would be to have data be connected to a central hub, particularly important for landlords of apartments. Long term trends can allow early identification of maintenance issues like roof leaks, with recommendations provided on a building-level as to maintain tenant privacy. Local businesses can show their commitment to reducing carbon emissions by implementing discounts or partnerships, like giving users a free coffee once they’ve saved a certain amount of CO2. Furthermore, future steps might be creating an app on the phone, where users can take images of suspected areas of black mold, and AI would be used to classify them as black mold, or not.

Overall, there are many future directions to expand the use of Goldilocks.

Share this project:

Updates