Overview
Thermostat setup crosses several technologies at once: permissions, QR codes, nearby-device discovery, secure communication, HVAC configuration, accessory pairing, Wi-Fi provisioning, and cloud synchronization. Thermostat Companion brings those steps into one native iOS flow with visible progress, useful recovery states, and a safe simulated mode for development and demonstrations.
I designed and built the project to explore how a technically complex connected-home setup can feel calm, understandable, and direct. After onboarding, temperature, humidity, heating state, scenes, schedules, and setpoint controls come together in one focused SwiftUI dashboard.
The Challenge
The core challenge was not adding more controls. It was making a multi-stage hardware workflow feel predictable. Each transition needed to communicate what the app was doing, what the user needed to do next, and how to recover when a device, network, or service was unavailable.
Guided Onboarding
The setup journey covers authorization, permissions, QR scanning, Bluetooth discovery, secure device provisioning, HVAC profile selection, accessory pairing, Wi-Fi setup, and final synchronization. An explicit state machine keeps the next action and recovery path clear throughout the flow.

Daily Control
Once connected, the app focuses on the information and actions needed most often: live temperature and humidity, online and heating state, quick setpoint changes, comfort scenes, schedule behavior, and device settings.

Engineering Highlights
- Native SwiftUI application with an explicit onboarding state machine.
- QR scanning through AVFoundation and nearby-device communication through CoreBluetooth.
- Secure local storage for sensitive configuration and an encrypted device-session layer.
- Async service abstractions for cloud communication, Bluetooth, and permissions.
- Fictional demo data and mock services for repeatable UI development and portfolio-safe presentation.
- Responsive light and dark dashboard treatments for temperature, humidity, status, scenes, and setpoint controls.
Outcome
The result is a working native iOS project that demonstrates the complete shape of a connected-device experience: discovery, configuration, recovery, synchronization, and daily control. It also provides a reusable foundation for testing product flows independently from physical hardware and live services.
Complex technology should remain behind the interface. The experience should simply make the next step clear.
Back to all work