Inspiration

I have spent ten years in tech as an iOS developer. Lately I kept asking what that role was for, and whether I could actually improve someone’s life instead of shipping another screen.

Then, for a few days, France was one of the warmest points on Earth — heat you associate with the Sahara or the Middle East, not a temperate country. It was over 40 °C in a place that is not supposed to be a desert.

Walking around, I saw emergency blankets taped over windows so flats would stay cooler than the street. I also saw windows left open all day. That combination felt wrong in the body: if you let the heat in, the building stores it, and by evening there is nowhere for it to go. Warmth should stay out.

So I used the only resource I really have — building software — and tried to answer one question: when should I open the window? When is it actually the right time to open, and when should I close?

I started after heatwave number three. We have had five heatwaves since May 2026. That is how common this already is in much of Europe, where most homes still do not have air conditioning. Even where there is AC, it is not a shield: electricity can fail, and electricity is expensive. A clear “open / close / fan” answer still helps anyone living through high temperature. Not a lecture. A next action when you are already too hot to think.

What it does

Ventilate tells you, per window, whether to close and shade, crack open, open wide, or place a fan. Advice follows local weather, sun on each facade, indoor temperature, and your layout (single-sided vs cross-ventilation). It is not a clock timer.

Free features include the core engine, history (24 h / 7 d / 30 d), a heat toolkit, home-screen widgets, Live Activity (iOS), Siri and Shortcuts, and gentle reminders before the next change. Setup is once: point the phone at each window so the app knows orientation. No account. Data stays on the device.

The same heat toolkit is published as guides on getventilate.app. Sources are done there: every guide ends with Sources and further reading — WHO, ADEME, Climate-ADAPT, EEA, and the other official references that match that article, including the By weather cluster and before the AC.

Ventilate Pro (RevenueCat) answers a second question: is cooler outdoor air actually worth letting in? It adds air quality, pollen (Europe), UV, and humidity, and uses those signals so the engine can close or cap opening when heat relief would pull in worse air.

Shipped on iOS and Android. Locales include English, French, German, Spanish (Spain and Mexico), Italian, Portuguese (Portugal and Brazil), and Dutch.

How we built it

Native apps on both platforms, same product: SwiftUI on iOS, Jetpack Compose on Android. Domain logic (window-state engine, fan advice, season gate, Pro overlay) lives in a testable core. Weather is Open-Meteo, with a fallback path on iOS. Billing is RevenueCat only: entitlement ventilate_pro, weekly and yearly subscriptions, paywall after onboarding and from locked Pro surfaces.

Glanceable surfaces matter because heatwave decisions happen while you are cooking, sleeping, or leaving: widgets, Live Activity 20 minutes before a major transition, and App Intents. Analytics (TelemetryDeck) and A/B tests (onboarding paywall, dashboard layout) sit behind the same loop.

The visual system treats temperature as color: cool blue for open air, sage-teal for comfort, red-orange for close-and-protect, on Liquid Glass cards with a low-opacity ambient wash.

Challenges we ran into

Compass capture had to be stable enough for real windows, not a demo: a 10° heading gate and a hold-steady calibration flow. Indoor temperature is still manual, which is honest but easy to forget, so reminders, widget chips, and Shortcuts exist to keep T_in from going stale.

Then it rained for a few days, and the app was still telling people to keep the window open. Cooler outdoor air is not the whole job if the air is wet. We had to close for precipitation in the engine and say it on the dashboard: rain alerts, not only a silent state change. Condition warnings (rain, tropical night, UV, pollen) now sit with the temperatures so the “why” is readable when you are tired.

Pro could not be allowed to open a window the free engine kept closed. The overlay only caps toward more closed (poor AQI, high UV on the sunny side, muggy dew point, pollen if the user is sensitive), with a heat-exception when indoor temperature is already severe.

Messaging was a second challenge. Claiming a kWh, peso, or euro saving would be false. LATAM copy is “cool first, run AC less” without inventing a bill number. Pollen is Europe-only (CAMS); we do not advertise it in LATAM listings.

Launch timing also fought the calendar: European heat peaks in August, while Shipaton judging sits at the end of September. The product had to stay useful after the first heatwave (Pro air quality, iOS 27 intents, LATAM storefronts), not only on launch week.

Accomplishments that we're proud of

A beta before the stores. Testers treated it as something they needed on a heat night, not a nice-to-have weather toy. That was the signal to ship.

Both stores on 3 August 2026, inside the Shipaton window: a public v1.0 people could actually install, then Ventilate Pro and the rest of the launches without waiting for September.

The window-state engine is heavily unit-tested (hundreds of cases across core and presentation). Heat advice had to be boringly reliable before we dressed it. After those rainy days, rain is a first-class close: daylight keeps blinds open for light, night fully protects, and the dashboard says so instead of looking like a stuck “open” recommendation.

A simple design that still meets the new Liquid Glass requirements on iOS: temperature as color, glass cards, a calm home screen. Playful setup, then a dashboard you can read when you are already too hot.

Privacy stayed first: no login, on-device profile, location only for forecast. Heat-toolkit sources are finished on the website: each guide on getventilate.app lists Sources and further reading (WHO, ADEME, Climate-ADAPT, EEA, and the matching official refs) instead of unnamed tips.

What we learned

Citing articles matters more than I expected. Those sources are now public on the website, not only named in the app: every guide on getventilate.app ends with Sources and further reading (WHO, ADEME, Climate-ADAPT, EEA, and the refs that match that article). Named sources are how the project reads as legitimate instead of another list of heat “tips.”

Competitors matter, especially in a summer when several window-and-heat apps appeared at the same time. Understanding what they already did (and did not) kept Ventilate on one job: when to open, when to close, where the fan goes.

ASO and keywords are how a free, useful app grows slowly after launch week. The listing has to say the job in the words people type, in each locale, or the store will not find you.

If the weather changes and the copy does not, people will follow the last advice they understood. Rain taught that: cooler air still meant “open” until we wrote the alert.

Ship the useful free loop first. Monetization is easier to judge when people already know whether the advice is right. Building for heat also taught restraint: calm copy, no panic colors, no medical claims, no fake energy savings.

What's next for Ventilate: When to Open

After Shipaton: year-round “brief air / harvest light” so the habit survives autumn; LATAM Beat B (honest pollen limits, city playbooks); competitor-UX work (why-close, Watch, compass A/B). Later: accounts and multi-home, only if the product needs them. HomeKit stays deferred until there is a real per-room model.

Built With

  • claude
  • cursor
  • figma
  • kotlin
  • openmeteo
  • swift
  • swiftui
Share this project:

Updates

Submission history