CarHeat turns “it’s hot outside” into a more useful safety signal: an estimated cabin temperature for a specific parked vehicle.
The Flutter app combines live, location-based weather with the physical characteristics of a user’s car, including paint color, body type, interior material, and window tint. Instead of showing only ambient temperature, CarHeat estimates how hot the cabin may become and presents a clear severity level: Safe, Warm, Hot, Dangerous, or Extreme.
When conditions become risky, the app gives drivers a plain-language warning, including when heat may be dangerous for children and pets.
The problem
Standard weather apps report outdoor temperature. That doesn’t explain how differently a black SUV with leather seats in direct sun can heat up compared with a white hatchback parked in shade.
Parked-car temperatures can rise quickly, but drivers rarely have a practical, vehicle-specific signal for deciding when to check the car, move it, or avoid leaving anyone inside. CarHeat closes that gap by translating weather conditions into an estimated cabin temperature based on the vehicle itself.
My role
Flutter development for iOS and Android
Firebase backend and server-side integrations
UX design for clear safety communication
Quality assurance and release testing
Native Apple Watch integration using Swift, with Android support through Kotlin
Key features
Vehicle-specific cabin heat estimate
CarHeat uses a steady-state thermal model that combines solar load, vehicle and window heat absorption, interior material, ambient-temperature boost, wind cooling, and UV conditions.
The model is calibrated against published parked-vehicle heatstroke research, including McLaren (2005) and Vanos (2018), helping the app produce a car-specific estimate rather than a generic weather reading.
Live weather for the parking location
The app retrieves real-time conditions for the vehicle’s precise location through Apple WeatherKit. Weather requests run server-side using a signed JWT, keeping the integration secure while providing current conditions for each estimate.
Clear, actionable risk levels
Rather than asking users to interpret raw weather data, CarHeat gives them one cabin-temperature estimate alongside a severity band and plain-language safety guidance. The interaction is designed for quick decisions when heat conditions may become dangerous.
Apple Watch companion and complication
The Apple Watch experience lets users check estimated cabin heat, mark where they parked, and manage reminders from their wrist. The native bridge is designed to remain inactive on non-iOS devices, keeping the cross-platform app stable.
Cost-conscious reminder delivery
Instead of creating a separate scheduled job for every reminder, CarHeat uses a server-side cron sweep running every 3 minutes. This batches reminder delivery, trading a small amount of timing precision for near-zero server cost at scale.
Technical approach
Mobile: Flutter, Dart, Riverpod, Swift, Kotlin
Backend: Firebase Authentication, Cloud Firestore, Cloud Functions with Node.js 22 and TypeScript, Cloud Messaging, Remote Config, Crashlytics, Analytics
Integrations: Apple WeatherKit, REST APIs
Infrastructure: GitHub and server-side scheduled functions
Engineering and product decisions
Account creation created friction during onboarding, with some Android users experiencing waits of around 2 minutes. I removed mandatory account creation and moved to device-based identity, allowing the same user to be restored silently after reinstall.
Ad placements are controlled through Firebase Remote Config rather than embedded in the app build. This gives the product team control to tune or disable ads without requiring a new app release.
The project’s clearest product advantage is its core model: a physics-calibrated cabin-temperature estimate based on the user’s vehicle, rather than a generic outdoor weather reading. That distinction shaped the product’s safety messaging, App Store positioning, and marketing direction.
Outcome
CarHeat shipped as a Flutter mobile app for iOS and Android, giving drivers a clearer way to assess parked-car heat risk based on their location and vehicle characteristics.