Platforms and Devices
Mobile application
Current shape
- Built from the shared Nuxt app with Capacitor
- Android and iOS projects live under
nuxt-frontend/androidandnuxt-frontend/ios - Capacitor config points at
.output/public - Native BLE support is provided through
@capacitor-community/bluetooth-le
Status
| Area | Current state |
|---|---|
| Android | GitHub workflow builds debug APKs and creates GitHub releases |
| iOS | Capacitor scripts exist; build/sign flow is manual through Xcode |
| Mobile UX | Dedicated mobile layout and mobile domain views are active |
| App-store readiness | Not complete in repo state; enrollment page still shows disabled store buttons |
Useful commands
cd nuxt-frontend
npm run cap:sync
npm run cap:android
npm run cap:ios
npm run cap:build:iosPhone badge / phone beacon notes
/phone-badge-onboardingis the admin/operator tooling surface for generating enrollment tokens/scan-qris the employee self-service entry point (QR scan or manual token paste)/phone-beacon-enrollis the public token-driven enrollment flow/ble-scannercovers all BLE diagnostics, including verifying that an enrollment station is broadcasting- Enrollment expects the native app for Bluetooth pairing
Windows desktop gateway
Current shape
DesktopGateway.Agentis a .NET 8 Windows serviceDesktopGateway.Coreholds runtime logic, contracts, site detection, API client, RSSI filteringDesktopGateway.Msipackages the service installer
What it does
- detects whether the machine is on an approved site network
- scans BLE devices
- optionally advertises a desktop beacon identity
- registers/updates receiver and asset records
- posts heartbeats and observation batches back to the API
Useful commands
cd windows-desktop-gateway
dotnet build DesktopGateway.Agent/DesktopGateway.Agent.csproj --configuration Release
dotnet test DesktopGateway.Core.Tests/DesktopGateway.Core.Tests.csproj --configuration ReleaseESP32 gateway
Current shape
- PlatformIO/ESP-IDF project in
esp32-gateway/ - BLE scan + MQTT/TLS pipeline in
src/main.cpp(legacy IoT Hub target; prefer the Aruba Event Hub path for new field deployments — see Architecture) - Sample secret template in
include/secrets.h.example
Role
This is a hardware ingestion path for BLE telemetry. It is not the main day-to-day developer surface, but it matters for full-system understanding and field hardware work.
Virtual gateway (browser-based BLE scanner)
Current shape
useVirtualGateway.ts composable turns any Chrome browser or Android WebView into a BLE gateway without a dedicated hardware device.
Scan strategy (in priority order):
navigator.bluetooth.requestLEScan()with 5-second timeout — passive scan (requires Chrome flag or Android)navigator.bluetooth.getDevices()— loads previously-granted devices without a pickernavigator.bluetooth.requestDevice()— picker as last resort
Signal processing:
- RSSI sliding-window averaging (configurable window size via
useRssiFilter) - Log-distance path loss model with environment presets (office, warehouse, outdoor)
- RPA resolution via
useDeviceIdentifier
Observations are POSTed to the same /api/raddec/ingest route used by hardware gateways. The ble-scanner page in the UI surfaces this composable.
Serial BLE scanner (Web Serial API)
useSerialBleScanner.ts provides BLE scanning via the Web Serial API on Chrome desktop. Useful for connecting serial-attached BLE sniffer hardware (e.g., Nordic Sniffer dongle) without installing native drivers.
Node BLE scanner utility
Current shape
- standalone Node script in
ble-scanner/scanner.js - authenticates against the main API
- posts to the same ingest path used by hardware gateways
Role
Useful for commissioning, debugging, and verifying ingestion without dedicated gateway hardware.
MikroTik KNOT hardware path
MikroTik KNOT routers are a supported hardware BLE ingestion path. They post directly to /api/knot/ingest using API key authentication. See the Data and Business Logic page for configuration details.
Legacy surfaces
| Path | Status |
|---|---|
archived/static-web-app-frontend | Legacy frontend retained for history |
static-web-app/negotiateConnection | Legacy root Azure Function artifact |
static-web-app/processIoTHubMessages | Legacy root Azure Function artifact |
Treat these as reference material only unless a migration or rollback task explicitly requires them.