Architecture·
The board is the brain. The Mac is a workbench, not a dependency.
Mac (workbench) Arduino UNO Q
┌─────────────────┐ USB-C / Wi-Fi ┌──────────────────────────────────────────┐
│ ssh q │────────────────────▶│ Linux QRB2210, Debian 13 │
│ adb shell │ │ q/ brain, tools, agent │
│ tiny (this CLI) │ │ dashboard/ FastAPI 127.0.0.1:8095 │
└─────────────────┘ │ q-tiny tiny-tech daemon "uno-q" │
│ q-tunnel cloudflared │
│ arduino-router msgpack-RPC, unix sock │
│ │ /dev/ttyHS1 115200 │
│ MCU STM32U585 (Zephyr): matrix, pins │
└──────────────┬───────────────────────────┘
│ tunnel
▼
https://q.cagatay.my
│
┌─────────────────────┼────────────────────┐
▼ ▼ ▼
tiny.technology endpoint device Tiny iOS app
fleet (daemon) kind q-the-brain QBrain panel
Processes on the board·
| unit | what |
|---|---|
q-dash.service |
the dashboard on 127.0.0.1:8095, uvicorn from /opt/q (active) |
q-tunnel.service |
cloudflared 2026.9.0, publishes q.cagatay.my (active) |
q-tiny.service |
tiny-tech daemon, fleet device uno-q (active) |
Arduino's own services stay untouched: arduino-router (the bridge), arduino-app-cli daemon on 127.0.0.1:8800, the monitor proxy on :7500. Port 8095 is free for q.
Secrets: /etc/q/env (0600, root) for model credentials, /etc/cloudflared/*.json for the tunnel, ~/.q/token for the owner token.
Fallback·
If cloudflared cannot run on the board, a Mac-side tunnel (~/.cloudflared/q.yml, launchd my.cagatay.q.tunnel) points at http://192.168.1.210:8095. The board still runs everything else.