---
id: TASK-132
title: PWA — transport abstraction (simulator + serial + BLE)
status: Done
assignee: []
created_date: '2026-03-29 20:52'
labels:
  - pwa
  - transport
milestone: m-2
dependencies: []
priority: high
---

## Description

<!-- SECTION:DESCRIPTION:BEGIN -->
Write transport.js (GaiaTransport base class, SerialTransport via Web Serial, BLETransport via Web Bluetooth NUS, SimulatorTransport) and simulator.js (virtual pan/tilt panel with crosshair + LED indicator).
<!-- SECTION:DESCRIPTION:END -->

## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Base class with connect/disconnect/send/onMessage/isConnected
- [ ] #2 SerialTransport: Web Serial 115200 baud, JSON lines
- [ ] #3 BLETransport: NUS UUIDs, TX notify subscription, 20-byte MTU chunking
- [ ] #4 SimulatorTransport: passes to Simulator.update()
- [ ] #5 Simulator: floating panel with crosshair dot + LED circle + readout
<!-- AC:END -->

## Final Summary

<!-- SECTION:FINAL_SUMMARY:BEGIN -->
transport.js: 3 implementations + factory. simulator.js: DOM panel with crosshair grid, LED indicator, angle readout. ?transport=simulator URL param works.
<!-- SECTION:FINAL_SUMMARY:END -->
