SATE Companion — system overview
SATE Companion is a speech-capture and analysis system for speech-language pathologists (SLPs). It captures a patient's speech on a hardware device, uploads the audio to a backend that transcribes and analyses it with an AI model, and presents the result to the clinician as an interactive report they can edit and annotate.
This documentation is written for internal engineers working on the codebase. Every claim is grounded in the source; each component guide ends with a Known issues / current status section drawn from the 2026-07 audit.
The system at a glance
Components
| Component | Tech | Role | Guide |
|---|---|---|---|
| SATE Recorder | ESP32-S3, LVGL, SD_MMC | Handheld recorder: records to SD, uploads over Wi-Fi/BLE, OTA | Recorder firmware |
| SATE Pendant | XIAO nRF52840, Bluefruit | Wearable: streams 16 kHz PCM over BLE to the app | Pendant firmware |
| Mobile app | React Native / Expo (iOS) | Bridges devices → backend; Plaud integration; auto-sync | Mobile app |
| Web app | React + Vite + Supabase | Clinician report: audio player, transcript editing, annotations, metrics | Web app |
| Backend | Supabase edge fns + Cloudflare Container | Async AI pipeline: assemble → transcribe → analyse → store | Backend pipeline |
| Plaud | proprietary iOS SDK | Third-party recorder integration (device-lock sensitive) | Plaud integration |
Connection methods (transports)
The system deliberately uses different transports per link:
| Link | Transport | Why |
|---|---|---|
| Recorder → backend | Wi-Fi HTTPS (chunked upload), BLE bridge when offline | The recorder has Wi-Fi; BLE is the fallback when there's no network |
| Pendant → app | BLE (244-byte PCM notifies) | Tiny wearable; no Wi-Fi, streams live to the phone |
| Plaud → app | Proprietary BLE SDK | Vendor SDK owns its own CBCentralManager |
| App → backend | HTTPS to device-api | Standard authenticated upload |
| Backend AI call | Long-lived HTTP from a container (never an edge fn) | The AI call exceeds serverless wall-clock limits |
| Firmware OTA | HTTPS pull of a .bin from Storage | Device pulls, not pushed |
See Architecture for the full data-flow, and each component guide for the exact protocols and functions.
Where to start
- New to the codebase? → Getting Started (toolchain, build, flash, run).
- Understanding the flow? → Architecture.
- Working on one component? → jump to its guide.
- What's broken right now? → Known issues (consolidated from the audit).