Case study
Ecostrad
Smart heaters with native Swift and Kotlin IoT modules
- monthly users
- 10k
- device updates on screen
- 0.7s
- fewer polling cycles
- 92%
- components on the React Compiler
- 219
Ecostrad makes smart electric heaters and radiators for homes in the UK and Ireland. About 10,000 people a month use the app to pair heaters, group them into rooms, set weekly schedules and change the temperature from anywhere. Every heater talks to the Tuya IoT cloud.
I joined Ignition in 2026 as the senior mobile engineer responsible for the app on the App Store and Google Play. I own the React Native app and the native module that wraps the Tuya SDK, and I review work with the dev team lead.
Native modules in Swift and Kotlin
I built Expo modules on top of the Tuya SDK for Bluetooth pairing, device discovery and over the air firmware updates. Every failure maps to a stable error code, so the app can tell people exactly what went wrong and what to try next.
Real time instead of polling
The app used to ask every heater for its state every five seconds. I moved it to push updates from the device stream. A change now reaches the screen in about 0.7 seconds, roughly 7 times faster, with 92% fewer polling cycles.
A performance program
I turned on the React Compiler across all 219 components, memoized the device lists, replaced a WebView animation with a native one, removed unused packages and enabled Android code shrinking.
A codebase the team can trust
I migrated the app to TypeScript and Expo Router, added offline support that rolls back failed changes, and set up type aware linting, pre commit checks, CI on GitHub Actions and Crashlytics with readable crash reports.
Stack
- React Native
- Expo
- TypeScript
- Swift
- Kotlin
- Tuya IoT SDK
- Bluetooth
- Redux Toolkit
- Reanimated
- Realm
- Firebase
- GitHub Actions