
LoRaWAN smart locks → TTN MQTT → Cloud Functions → Firestore → Flutter (Momentum) with FCM alerts.
IoT smart lock management with Flutter (Momentum): users onboard locks via QR or BLE WiFi configuration. Firebase Auth and Firestore model users, rooms, devices, history, and notifications. Uplinks flow LoRaWAN → The Things Network → MQTT → Cloud Functions that parse payloads and update Firestore with FCM on state changes.
mqttFunction subscribes to eu1.cloud.thethings.network, maps decoded payloads to device docs and history subcollections; sendDeviceStateChangeNotification triggers FCM with human-readable state text; Momentum presenters keep the Flutter UI reactive to Firestore streams.
A reliable MQTT→Firestore bridge under TTN broker churn; a four-state lock model (Not Set; Unlocked/Closed; Locked/Closed; Unlocked/Open); real-time UI consistency with battery and history; and duplicate-safe notification delivery.

QR scan for device IDs and BLE-driven WiFi provisioning with flutter_blue.
Cloud Function connects to TTN broker, subscribes to uplink topics, parses lockState, batVolts, lockCount.
Devices, rooms, history subcollections, and notification feeds with real-time listeners in the app.
Secondary function on writes pushes notifications with state summaries to subscribed devices.
Battery voltage, history timelines, and multi-device room grouping for facility managers.
End-to-end path from physical device through LoRaWAN, TTN MQTT, Cloud Functions, and Firestore into the Flutter app with push alerts — validated so field teams could see lock transitions within seconds of uplink.
End-to-end path from physical device through LoRaWAN, TTN MQTT, Cloud Functions, and Firestore into the Flutter app with push alerts — validated so field teams could see lock transitions within seconds of uplink.


Server-side subscriber avoids keeping MQTT credentials on mobile and centralizes parsing.
Four explicit states simplified UX and support playbooks versus ambiguous raw integers.
Decouples push from the ingest path so retries and fan-out stay in Firebase’s delivery layer.
Momentum kept presenter logic testable as the IoT schema grew.
We take on a small number of projects at a time. If the problem is hard, we're interested.