Go to file
2026-04-19 16:38:19 -07:00
docs get it working on linux 2026-04-16 22:17:58 -07:00
src see about wifi 2026-04-19 16:38:19 -07:00
tmp Add ggwave audio calculator POC and documentation 2026-03-11 19:08:51 -07:00
.gitignore Refactor server monolith into focused modules with sound-only communication 2026-03-12 12:57:18 -07:00
.npmignore Add bunx support for easy sharing 2026-03-12 13:33:34 -07:00
.npmrc init 2026-03-11 14:06:19 -07:00
bun.lock Add ggwave guessing game demo 2026-03-12 09:57:48 -07:00
bunfig.toml Add bunx support for easy sharing 2026-03-12 13:33:34 -07:00
CLAUDE.md Add README with project context and link from CLAUDE.md 2026-03-11 19:16:56 -07:00
cli.ts Fix bundled CLI to explicitly call Bun.serve() 2026-03-12 15:53:14 -07:00
index.tsx init 2026-03-11 14:06:19 -07:00
package.json see about wifi 2026-04-19 16:38:19 -07:00
README.md see about wifi 2026-04-19 16:38:19 -07:00
tsconfig.json init 2026-03-11 14:06:19 -07:00
types.d.ts get it working on linux 2026-04-16 22:17:58 -07:00

Baudy WiFi Chirp Setup

A proof-of-concept for provisioning WiFi over sound with ggwave.

The phone and the server exchange short audio chirps to do a simple setup flow:

  1. Phone says hello over audio.
  2. Server scans nearby WiFi networks with nmcli.
  3. Server chirps the SSID list back to the phone.
  4. Phone selects a network and, if needed, enters the password.
  5. Phone chirps the password back to the server.
  6. 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

  • WiFi 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 resulting https://...ts.net URL

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 sox for 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.