Skip to content

BladeWatch — Hosted Angular Web UI, Native In-App Screens & ConnectRPC

Latest

Choose a tag to compare

@andrewloable andrewloable released this 13 Jun 07:34

BladeWatch — Web UI rebuild, native in-app screens & ConnectRPC

Changes since 20260525-security-ui-updates (2026-05-25).

This is a large release that rebuilds the remote/browser experience, moves every
in-app screen to native, and replaces the ad-hoc REST surface with a typed API.

Highlights

  • New hosted web app (Angular 19 + Vite + ConnectRPC). The browser/tunnel UI
    is now a full single-page app — Dashboard, Live, Recording, Surveillance,
    Events, Trips, Vehicle, Location, Diagnostics, Notifications, Performance,
    Settings, About, Login — in 17 languages.
  • All in-app screens are now native. The WebView-backed screens were migrated
    to native Kotlin fragments (Live view with native H.264/WebSocket streaming,
    Recordings, Location, Vehicle, Trips, Performance, Recording/Surveillance
    settings). The WebView host remains only for the remote browser path.
  • Material 3 (Material You) design language across the native shell — color
    roles, type scale, shape/elevation, motion, navigation rail, and Material
    Symbols iconography (Phase 1 + Phase 2 refactor).
  • Typed ConnectRPC/gRPC API with 1:1 REST parity. 12 services
    (bladewatch.v1.*) consumed by the web client and the app, served on the same
    127.0.0.1:8080 port with shared auth.

Vehicle

  • Native vehicle screen with Climate (power / max-cool / temp / fan), Seats
    (heat + ventilation), and Windows (per-window + all) controls via the local
    BYD SDK.
  • Interactive 3D vehicle hero (Three.js) with a tyre-pressure overlay and
    user-selectable model + paint color. (A native Filament hero was trialed and
    reverted — the head unit's Adreno 610 driver crashes under sustained gltfio.)
  • Charge-cap control, AC/seat diagnostics, and richer command routing/response
    details.

Location & Trips

  • New Location experience: native OSMDroid map and a Leaflet web map with a
    heading-rotated car marker, follow/recenter, and Auto/Light/Dark theming.
  • Trip detail + telemetry, GPS traces, similar-trip lookup, driving DNA, and
    personalized range; trip + media catalogs synced to embedded H2 databases.

Storage

  • Automatic SD-card / USB discovery and selection at startup, dynamic storage
    limits, and a new Format Storage API to wipe/remount a removable drive.

Surveillance & camera

  • Deferred YOLO model init and persistent TFLite GPU kernel cache (faster, more
    stable daemon startup).

Security & reliability

  • IPC token bootstrap securing the loopback command/secret channels, plus a
    caller-UID gate on both IPC servers.
  • Reworked auth + daemon-readiness handling (readiness probe, connection retry,
    self-healing token refresh) fixing auth loops, duplicate daemons, and stale
    daemon cleanup.
  • Package id finalized as net.bladewatch.app.
  • Persistent debug logging with full log-call stripping in production builds.

Bug fixes (this release)

  • Trips: trip-detail route map now renders fully (no more half-loaded map
    with black gaps).
  • Notifications: "Subscribe" no longer hangs on "Subscribing…" — the web app
    now registers its service worker, requests permission, and completes Web Push
    subscription (works beyond Chrome).
  • Status overlay: Camera/recording and Trip indicator toggles in
    Settings → Status overlay now apply to the head unit (previously remembered
    only in the browser).
  • About / status: App Version and Device ID display correctly again; also
    restores live Dashboard/Diagnostics status that shared the same failing
    response parse.

Notes

  • arm64-v8a only; BYD DiLink v3 (Android 10+).
  • After installing, hard-reboot the head unit to finalize (see README).