| docs | ||
| src | ||
| tmp | ||
| .gitignore | ||
| .npmignore | ||
| .npmrc | ||
| bun.lock | ||
| bunfig.toml | ||
| CLAUDE.md | ||
| cli.ts | ||
| index.tsx | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| types.d.ts | ||
Baudy Wi‑Fi Chirp Setup
A proof-of-concept for provisioning Wi‑Fi over sound with ggwave.
The phone and the server exchange short audio chirps to do a simple setup flow:
- Phone says hello over audio.
- Server scans nearby Wi‑Fi networks with
nmcli. - Server chirps the SSID list back to the phone.
- Phone selects a network and, if needed, enters the password.
- Phone chirps the password back to the server.
- Server tries to join the network and chirps the result.
This is aimed at Raspberry Pi / Linux-style setup flows where networking may not be available yet.
Current assumptions
- Wi‑Fi scanning and joining are implemented for Linux via
nmcli. - The phone UI is still served as a normal web page for this repo's demo flow.
- Passwords are sent as plaintext audio payloads in this POC.
- Audio is half-duplex: only one side should chirp at a time.
Run
bun install
bun run index.tsx
Open the shown URL on your phone.
For phone microphone access you need a secure origin:
- macOS: the app serves local HTTPS directly
- Linux: prefer
tailscale serve <port>and open the resultinghttps://...ts.netURL
Notes
- Nearby network lists are deduped by SSID and trimmed to the strongest entries.
- The browser uses WebAudio + ggwave WASM for chirp encode/decode.
- The server uses
soxfor audio capture/playback. - The server waits for the phone to switch back into listening mode before replying.
See docs/ggwave-gotchas.md for platform-specific lessons about iOS audio, macOS microphone permissions, Linux ALSA device selection, and ggwave WASM behavior.