# improv v0.1.0 - Table of Contents

> Improv-over-BLE Wi-Fi provisioning for Elixir/Nerves devices, on BlueZ over D-Bus

## Pages

- [Improv](readme.md)

- Guides
  - [Architecture](architecture.md)
  - [Host integration](host_integration.md)
  - [Protocol and security model](protocol.md)

## Modules

- Manager
  - [Improv](Improv.md): Improv-over-BLE Wi-Fi provisioning manager — the GenServer that ties the
protocol codec, GATT server and advertisement into a working subsystem.
  - [Improv.Supervisor](Improv.Supervisor.md): Supervises the Improv provisioning processes as a `:one_for_all` group.

- GATT + advertisement transport
  - [Improv.Advert](Improv.Advert.md): Exports an `org.bluez.LEAdvertisement1` object and registers it with the
adapter's `org.bluez.LEAdvertisingManager1`, so the device advertises the
Improv service while provisioning is armed.
  - [Improv.GattServer](Improv.GattServer.md): Exports the Improv GATT application over D-Bus and serves the inbound method
calls BlueZ makes against it.
  - [Improv.Protocol](Improv.Protocol.md): Pure wire codec for the [Improv Wi-Fi BLE protocol](https://www.improv-wifi.com/ble/).

- Wi-Fi backend
  - [Improv.Wifi](Improv.Wifi.md): Wi-Fi operations for Improv provisioning: scan for networks, apply submitted
credentials, and derive the post-provisioning redirect URL. The seam the
`Improv` manager calls into.

