diff --git a/README.md b/README.md
index 5918814..83d1640 100644
--- a/README.md
+++ b/README.md
@@ -1,175 +1,136 @@
# FPVGate
-**Personal FPV Lap Timer for [Seeed Studio XIAO ESP32S3](https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/) / [ESP32-S3-DevKitC-1](https://docs.keyestudio.com/projects/ESP32-S3/en/latest/1.Introduction.html)**
-
-[](https://fpvgate.xyz)
-[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
-[](https://discord.com/invite/XwammuWCCj)
-[](https://ko-fi.com/louishitchcock)
-[](https://fpvgate.xyz/shop.html)
-
-
-A compact, self-contained RSSI-based lap timing solution for 5.8GHz FPV drones. Perfect for personal practice sessions, small indoor tracks, and training.
-
----
-
-## What is FPVGate?
-
-FPVGate measures lap times by detecting your drone's video transmitter signal strength (RSSI). When you fly through the gate, it detects the peak signal and records your lap time. No transponders, no complex setup—just plug in, calibrate, and fly.
-
-### Screenshots
-
-| Race Screen | Configuration Menu |
-|:-----------:|:------------------:|
-|  |  |
+
-| Calibration | Race History |
-|:-----------:|:------------:|
-|  |  |
+[](https://github.com/LouisHitchcock/FPVGate/releases/latest)
+[](https://github.com/LouisHitchcock/FPVGate/stargazers)
+[](LICENSE)
+[](https://fpvgate.xyz/c5.html)
+[](docs/ROTORHAZARD_INTEGRATION.md)
+[](https://discord.gg/XwammuWCCj)
+[](https://ko-fi.com/louishitchcock)
-| Multi Pilot | FPVGate AIO |
-|:-----------:|:-----------:|
-|  |  |
+**[Website](https://fpvgate.xyz)** ·
+**[Web flasher](https://fpvgate.xyz/flasher.html)** ·
+**[Shop](https://fpvgate.xyz/shop.html)** ·
+**[Docs](#documentation)** ·
+**[FAQ](#faq)**
-### Key Features
+FPVGate is affordable, scalable FPV race timing, from solo practice to 8-pilot
+club events. It times 5.8 GHz drone laps from the video signal each quad
+already transmits, using ESP32-S3 hardware. Start with one pilot on a
+single gate, then grow to eight pilots from one ESP32-C5 receiver, full club
+events with heats and seeding, or a RotorHazard race. No transponders, no
+Raspberry Pi: open the gate in any browser and fly.
-**Dual Connectivity**
-- WiFi Access Point (works with any device)
-- USB Serial CDC (zero-latency local connection)
+## Why FPVGate
-**Visual Feedback**
-- RGB LED indicators with 10 customizable presets (settings persist to EEPROM)
-- Real-time WiFi status display with connection monitoring
-- Real-time RSSI visualization
-- OSD overlay for live streaming (transparent, multi-monitor support)
-- Mobile-responsive web interface
+| | |
+|---|---|
+| **Industry-leading timing accuracy** | On average, FPVGate's maximum lap-time deviation is 20 ms lower than an 8-node RX5808 timer's. Every pass is timed at the peak of the signal, and the ESP32-C5 timestamps each pilot's readings about 1000 times a second. |
+| **Affordable** | Built on ESP32-S3 boards and off-the-shelf receivers, with free firmware you flash from your browser. Or buy a ready-made gate from the [shop](https://fpvgate.xyz/shop.html). |
+| **Scales with your group** | One pilot on an RX5808 gate, up to eight from one ESP32-C5, Event Mode for club days, and RotorHazard for bigger events. |
+| **Event Mode** | Pilot roster, groups, race formats, heat scheduling, and Elo or lap-time seeding, saved on the gate. |
+| **Spoken lap times** | Lap times read out by pre-recorded ElevenLabs voices in English, German, Spanish and French, with phonetic pilot names. |
+| **Race analysis** | Live standings, gaps, fastest lap, fastest 3 consecutive (RaceGOW), lap and consistency charts, race history and notes. |
+| **Visual Marshal** | Review any race on its recorded RSSI graph and correct its laps. |
+| **Plug in and fly** | The gate makes its own Wi-Fi network for any phone or laptop, with USB-C networking (Windows and Linux) and wired Ethernet on the Waveshare S3-ETH. |
+| **Make it yours** | 23 built-in themes plus custom colours, and an interface in English, German, Spanish, French and Simplified Chinese. |
-**Natural Voice Announcements**
-- Pre-recorded ElevenLabs voices (4 voices included)
-- PiperTTS for low-latency synthesis
-- Phonetic name support
-- Configurable announcement formats
+## From one pilot to a full club event
-**Race Analysis**
-- Real-time lap tracking with gap analysis
-- Fastest lap highlighting
-- Fastest 3 consecutive laps (RaceGOW format)
-- Race history with export/import (cross-device SD card storage)
-- Race tagging and naming
-- Marshalling mode for post-race lap editing (add/remove/edit laps)
-- Detailed race analysis view
+| | Pilots | What you need |
+|---|---|---|
+| **Solo practice** | 1 | An ESP32-S3 timer with an SPI-modded RX5808, or a ready-made [FPVGate AIO](https://fpvgate.xyz/shop.html) |
+| **Group racing** | Up to 8 per gate | An ESP32-C5 receiver running [FPVGate C5MK](https://github.com/LouisHitchcock/FPVGateC5MK), or the FPVGate C5MK AIO |
+| **Club events** | Any size roster | Event Mode with an ESP32-C5: groups of up to eight race in turn, with automatic heat loading and seeding |
+| **RotorHazard races** | Every RH seat | The [FPVGate RotorHazard plugin](https://github.com/LouisHitchcock/fpvgate-rh-plugin): every pilot, live RSSI, and frequencies set from RotorHazard |
-**Track Management**
-- Create and manage track profiles with metadata
-- Track distance tracking (real-time distance display)
-- Track images and custom notes
-- Total distance and distance remaining calculations
-- Track association with races
-- Up to 50 tracks stored on SD card
+With an ESP32-C5, each pilot gets their own channel, calibration and
+results. The gate runs the race itself: each racer finishes at the lap limit,
+and the race stops and saves when everyone is done or the heat time runs out,
+even with no browser open.
-**Smart Storage**
-- SD card support for audio files and race data
-- Individual race files with index for better performance
-- Auto-migration from flash to SD
-- Cross-device race history (accessible from all connected devices)
-- Config backup/restore
-- Multi-voice audio library (5 voice packs)
+## Screenshots
-**Webhooks & Integration**
-- Configurable triggers (race start/stop, laps)
-- Gate LED control with granular event settings
-- Network-based device integration
+
-**RotorHazard Integration**
-- Bidirectional race start/stop with RotorHazard
-- NTP-style clock synchronization for accurate timing
-- Automatic lap submission to RH via HTTP POST
-- Companion RH plugin included (`rh-plugin/`)
+| Event Mode | Race history |
+|:---:|:---:|
+|  |  |
+| **Calibration** | **Settings** |
+|  |  |
-**I2S Speaker Audio (MAX98357A)**
-- Hardware speaker output for race announcements
-- Non-blocking MP3 playback from SD card
-- Countdown, lap times, race start/stop audio
+
+Single-pilot race and phone view
+
-**Developer Friendly**
-- Comprehensive self-test diagnostics (19 tests)
-- OTA firmware updates
-- Transport abstraction layer
-- Open source (CC BY-NC-SA 4.0)
+
+
+
+
-**Supported Bands:**
+
-*Analog FPV:*
-- **A (Boscam A)** - 5865, 5845, 5825, 5805, 5785, 5765, 5745, 5725
-- **B (Boscam B)** - 5733, 5752, 5771, 5790, 5809, 5828, 5847, 5866
-- **E (Boscam E)** - 5705, 5685, 5665, 5645, 5885, 5905, 5925, 5945
-- **F (Fatshark)** - 5740, 5760, 5780, 5800, 5820, 5840, 5860, 5880
-- **R (RaceBand)** - 5658, 5695, 5732, 5769, 5806, 5843, 5880, 5917
-- **L (LowBand)** - 5362, 5399, 5436, 5473, 5510, 5547, 5584, 5621
+Screenshots use demo race data.
-*Digital FPV:*
-- **DJI** - v1-25, v1-25CE, v1_50, 03/04-20, 03/04-20CE, 03/04-40, 03/04-40CE, 04-R
-- **HDZero** - R, E, F, CE
-- **WalkSnail** - R, 25, 25CE, 50
-
----
-
-## Quick Start
-
-### 1. Hardware You'll Need
-
-> **Want a plug-and-play solution?** The **[FPVGate AIO](https://fpvgate.xyz/shop.html)** is a pre-built, ready-to-use device -- no soldering, wiring, or flashing required. Perfect if you just want to buy a device and start timing laps immediately.
-
-**Building your own? Here's what you'll need:**
+### Themes
-| Component | Required | Notes |
-|-----------|----------|-------|
-| **[Seeed Studio XIAO ESP32S3](https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/)** (Recommended) or **[ESP32-S3-DevKitC-1](https://docs.keyestudio.com/projects/ESP32-S3/en/latest/1.Introduction.html)** | Yes | Main controller |
-| **RX5808 Module** | Yes | 5.8GHz receiver ([SPI mod required](https://sheaivey.github.io/rx5808-pro-diversity/docs/rx5808-spi-mod.html)) |
-| **MicroSD Card** | Yes | FAT32, 1GB+ for audio storage |
-| **5V Power Supply** | Yes | USB power or any 5V power source |
-| **WS2812 RGB LEDs** | Optional | 1-2 LEDs for visual feedback |
-| **Active Buzzer** | Optional | 3.3V-5V for beeps |
-
-### 2. Wiring Diagrams
-
-Detailed wiring diagrams are available for each supported board:
-
-- **[Seeed Studio XIAO ESP32S3](docs/wiring/Seeed-XIAO-ESP32S3.md)** - Recommended, compact, 8MB
-- **[ESP32-S3 DevKitC-1 (8MB Flash)](docs/wiring/ESP32-S3-DevKitC-1.md)** - Alternative
-- **[FPVGate AIO](https://fpvgate.xyz/shop.html)** - Pre-built, ready-to-use device ([buy here](https://fpvgate.xyz/shop.html))
-- **[ESP32-S3 Super Mini (4MB Flash)](docs/wiring/ESP32-S3-SuperMini.md)** - Not recommended (see note below)
-- **[LilyGO T-Energy S3](docs/wiring/LilyGO-T-Energy-S3.md)** - Expert mode, integrated battery
-- **[Waveshare ESP32-S3-LCD-2](docs/wiring/Waveshare-ESP32-S3-LCD-2.md)** - Built-in 2" touchscreen LCD, battery, SD card
-- **XIAO ESP32S3 Plus (16MB Flash)** - Expert mode
-
-> **Note on ESP32-S3 Super Mini:** Through testing, this board has proven unreliable due to inconsistent quality from various suppliers. Some revisions experience frequent brownouts under load. This board is still supported but is not recommended for new builds.
-
-**[Complete hardware guide →](docs/HARDWARE_GUIDE.md)**
+
-### 3. Flash Firmware
+Choose from 23 built-in themes, including Material, Dracula, Monokai, One
+Dark, Solarized, Night Owl and Synthwave, or set your own colours, under
+**Configuration > User Interface**.
-**Option A: Web Flasher (Recommended)**
+## Get started
-The easiest way to install FPVGate is using our web-based flasher:
+### 1. Get the hardware
-**[https://fpvgate.xyz/flasher.html](https://fpvgate.xyz/flasher.html)**
+> [!TIP]
+> **Want it ready to go?** The [FPVGate AIO](https://fpvgate.xyz/shop.html)
+> is a pre-built gate: no soldering, wiring or flashing.
-1. Open the link in Chrome, Edge, or Opera (Web Serial API required)
-2. Connect your ESP32 via USB
-3. Select your board type
-4. Click "Connect" and choose your device's COM port
-5. Click "Flash" and wait for completion (~2-3 minutes)
+To build your own:
-Supported boards:
-- Seeed Studio XIAO ESP32S3 (8MB) - Recommended
-- ESP32-S3 DevKitC-1 (8MB Flash)
-- ESP32-S3 Super Mini (4MB Flash) - Not recommended
-- LilyGO T-Energy S3
+| Component | Required | Notes |
+|---|---|---|
+| ESP32-S3 timer board | Yes | [Seeed Studio XIAO ESP32S3](https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/) (recommended), ESP32-S3-DevKitC-1 (8 MB) or [Waveshare ESP32-S3-ETH](docs/WAVESHARE_S3_ETH.md) |
+| Receiver | Yes | An RX5808 with the [SPI mod](https://sheaivey.github.io/rx5808-pro-diversity/docs/rx5808-spi-mod.html) for one pilot, or an ESP32-C5 board with a 5 GHz antenna for up to eight |
+| MicroSD card | Yes | FAT32, 1 GB or more, for voices and race data |
+| 5 V power | Yes | USB or any 5 V source |
+| WS2812 RGB LEDs | Optional | 1–2 LEDs for visual feedback |
+| Active buzzer | Optional | 3.3–5 V, for beeps |
+
+Wiring: [XIAO ESP32S3](docs/wiring/Seeed-XIAO-ESP32S3.md) ·
+[ESP32-S3-DevKitC-1](docs/wiring/ESP32-S3-DevKitC-1.md) ·
+[Waveshare ESP32-S3-ETH](docs/WAVESHARE_S3_ETH.md) ·
+[ESP32-C5 receiver](https://fpvgate.xyz/c5.html#boards).
+The [hardware guide](docs/HARDWARE_GUIDE.md) covers components and troubleshooting.
+
+### 2. Flash the firmware
+
+Open the **[web flasher](https://fpvgate.xyz/flasher.html)** in Chrome, Edge
+or Opera, connect the board over USB, pick your board and press Flash. It
+takes 2–3 minutes. Supported boards: Seeed XIAO ESP32S3, ESP32-S3-DevKitC-1,
+Waveshare ESP32-S3-ETH, FPVGate AIO, FPVGate Solo and FPVGate C5MK AIO.
+
+Using an ESP32-C5 receiver? Flash it with the
+[C5 flasher](https://fpvgate.xyz/c5.html#flasher) too. After that, FPVGate
+can update the C5 over its link from **Settings > System**.
+
+> [!NOTE]
+> **Upgrading from 1.7.x?** Flash once with the web flasher. 1.8 changed the
+> partition table, so an over-the-air update from 1.7.x won't work. Later
+> updates can go over the air.
+
+
+Flash from the command line, or build from source
+
+
+Download your board's files from the
+[releases page](https://github.com/LouisHitchcock/FPVGate/releases), then:
-**Option B: Command Line (Advanced)**
```bash
-# Download board-specific binaries from releases page, then flash:
esptool.py --chip esp32s3 --port COM3 write_flash -z \
0x0 [BOARD]-bootloader.bin \
0x8000 [BOARD]-partitions.bin \
@@ -177,186 +138,195 @@ esptool.py --chip esp32s3 --port COM3 write_flash -z \
0x410000 [BOARD]-littlefs.bin
```
-**Option C: Build from Source**
+The Waveshare ESP32-S3-ETH (16 MB) puts the filesystem at `0x610000`.
+
+Or build with [PlatformIO](https://platformio.org/):
+
```bash
git clone https://github.com/LouisHitchcock/FPVGate.git
cd FPVGate
-
-# For ESP32-S3 DevKitC-1 (8MB flash):
-pio run -e ESP32S3 -t upload
+pio run -e ESP32S3 -t upload # ESP32-S3-DevKitC-1 (8 MB)
pio run -e ESP32S3 -t uploadfs
-
-# For ESP32-S3 Super Mini (4MB flash):
-pio run -e ESP32S3SuperMini -t upload
-pio run -e ESP32S3SuperMini -t uploadfs
```
-**[Detailed setup guide →](docs/GETTING_STARTED.md)**
-
-### 4. Connect and Configure
+The [development guide](docs/DEVELOPMENT.md) lists every board target.
-**WiFi (Default):**
-1. Connect to `FPVGate_XXXX` network (password: `fpvgate1`)
-2. Open `http://fpvgate.local` or `http://192.168.4.1`
-3. Go to Configuration → Set your VTx frequency
-4. Go to Calibration → Set RSSI thresholds
-5. Start racing!
+
-**USB (Electron App):**
-1. Download [Electron app from releases](https://github.com/LouisHitchcock/FPVGate/releases)
-2. Connect ESP32-S3 via USB
-3. Launch app and select COM port
-4. All features work identically to WiFi mode
+### 3. Connect and race
-**[Complete user guide →](docs/USER_GUIDE.md)**
+1. Join the `FPVGate_XXXX` Wi-Fi network (password `fpvgate1`), or plug in
+ USB-C on Windows or Linux.
+2. Open `http://fpvgate.local` or `http://192.168.4.1` (over USB:
+ `http://192.168.7.1`).
+3. With an ESP32-C5, set **Configuration > Receiver Module** to ESP32-C5
+ and add your pilots.
+4. Set each pilot's channel and calibrate the thresholds in **Calibration**.
+5. Start racing.
----
+The [getting started guide](docs/GETTING_STARTED.md),
+[user guide](docs/USER_GUIDE.md) and
+[multi-pilot guide](docs/C5_MULTI_PILOT.md) go into detail.
-## Documentation
-
-**[Getting Started](docs/GETTING_STARTED.md)** - Hardware setup, wiring, flashing, initial config
-**[User Guide](docs/USER_GUIDE.md)** - How to connect, calibrate, race, and use features
-**[Hardware Guide](docs/HARDWARE_GUIDE.md)** - Components, wiring diagrams, troubleshooting
-**[Features Guide](docs/FEATURES.md)** - In-depth feature documentation
-**[Development Guide](docs/DEVELOPMENT.md)** - Building from source, contributing
-
-**Additional Docs:**
-- [RotorHazard Integration](docs/ROTORHAZARD_INTEGRATION.md) - Connect FPVGate to RotorHazard
-- [Voice Generation](docs/VOICE_GENERATION_README.md) - Generate custom voices
-- [Multi-Voice Setup](docs/MULTI_VOICE_SETUP.md) - Configure multiple voices
-- [SD Card Migration](docs/SD_CARD_MIGRATION_GUIDE.md) - SD card setup
-- [Changelog](CHANGELOG.md) - Version history
-
----
-
-## How It Works
-
-FPVGate uses an RX5808 video receiver module to monitor your drone's RSSI (signal strength). As you fly through the gate:
+## How it works
-1. **Approach** - RSSI rises above Enter threshold → crossing starts
-2. **Peak** - RSSI peaks when you're closest to the gate
-3. **Exit** - RSSI falls below Exit threshold → lap recorded
-
-The time between peaks = your lap time. Simple, reliable, and accurate.
+FPVGate tunes a receiver to each pilot's video channel and samples the signal
+strength continuously. When the signal rises above **Enter**, a crossing
+starts; when it falls below **Exit**, FPVGate records the lap at the peak, the
+moment the quad was closest to the gate. An ESP32-C5 receiver hops between up
+to eight channels, measuring each one about 1000 times a second.
```
RSSI │ /\
│ / \
- │ / \ ← Single clean peak
+ │ / \ ← one clean peak per pass
Enter ├──/──────\───
│ / \
Exit ├/──────────\─
- └─────────────── Time
+ └─────────────── time
```
----
-
-## Project Status
-
-**Current Build:** v1.9.0-alpha-5 (testing pre-release)
-
-The refreshed Alpha 5 integrates consecutive-lap announcement fixes and C5
-gate-side stopping/history saving, with images for all six planned boards.
-Install both firmware and filesystem even when already running Alpha 5.
-Events results/next heat and non-C5 completion still need the browser;
-physical qualification of the refreshed images remains pending.
-
-The dedicated **FPVGate C5MK AIO** is available in the web flasher's
-Pre-Release Firmware mode under Alpha 5. It is a separate target from the
-older RX5808 FPVGate AIO and defaults to the C5 receiver. This flashes the
-S3 timer; the AIO's XIAO C5 receiver is updated separately.
-
-The stable release is [v1.8.4](https://github.com/LouisHitchcock/FPVGate/releases/tag/v1.8.4).
-The Multi-Pilot alpha requires a separate ESP32-C5 receiver. See the
-[release notes](release/v1.9.0-alpha-5/RELEASE_NOTES.md) and
-[setup guide](docs/C5_MULTI_PILOT.md) before installing it.
-**Platform:** [ESP32-S3 DevKitC-1](https://docs.keyestudio.com/projects/ESP32-S3/en/latest/1.Introduction.html), [Seeed Studio XIAO ESP32S3](https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/), [FPVGate AIO](https://fpvgate.xyz/shop.html)
-**License:** CC BY-NC-SA 4.0
-**Status:** Multi-Pilot alpha testing
+
+All features
+
+
+**Timing and racing**
+- Up to 8 pilots per gate with an ESP32-C5 receiver, each with their own channel and calibration
+- Gate-managed races: per-pilot lap limits, heat time limits and history saved on the gate
+- Event Mode: roster, groups, race formats, heat order, Elo or lap-time seeding, standings
+- Calibration wizard with ignore regions and editable results
+
+**Race analysis**
+- Live standings with gaps and fastest-lap highlighting
+- Fastest 3 consecutive laps (RaceGOW format), best 3 laps and median lap
+- Lap time and consistency charts
+- Race history with export/import, tagging, naming and notes
+- Visual Marshal: review and correct laps on the recorded RSSI graph
+
+**Voice and interface**
+- Pre-recorded ElevenLabs voice packs in English, German, Spanish and French, and PiperTTS
+- Phonetic name support and configurable announcement formats
+- 23 built-in themes plus custom colours
+- Interface in English, German, Spanish, French and Simplified Chinese
+- OSD overlay for live streaming
+
+**Connectivity and integration**
+- Wi-Fi access point, USB-C networking (Windows and Linux) and wired Ethernet (Waveshare S3-ETH)
+- RotorHazard plugin: every pilot, live RSSI, frequencies from RotorHazard, clock sync and lap submission
+- Webhooks for race start/stop and laps, with gate LED control
+- RGB LED indicators with 10 presets
+
+**Tracks and storage**
+- Up to 50 track profiles with distance, images and notes
+- SD card storage for audio and race data, with config backup and restore
+
+**Updates and diagnostics**
+- Over-the-air updates from a file or straight from fpvgate.xyz
+- ESP32-C5 receiver updates over the gate's link, with automatic rollback
+- Built-in self-test diagnostics
+
+
+
+
+Supported channels
+
+
+*Analog:*
+- **A (Boscam A):** 5865, 5845, 5825, 5805, 5785, 5765, 5745, 5725
+- **B (Boscam B):** 5733, 5752, 5771, 5790, 5809, 5828, 5847, 5866
+- **E (Boscam E):** 5705, 5685, 5665, 5645, 5885, 5905, 5925, 5945
+- **F (Fatshark):** 5740, 5760, 5780, 5800, 5820, 5840, 5860, 5880
+- **R (Raceband):** 5658, 5695, 5732, 5769, 5806, 5843, 5880, 5917
+- **L (Lowband):** 5362, 5399, 5436, 5473, 5510, 5547, 5584, 5621
+
+*Digital:*
+- **DJI:** v1-25, v1-25CE, v1_50, 03/04-20, 03/04-20CE, 03/04-40, 03/04-40CE, 04-R
+- **HDZero:** R, E, F, CE
+- **Walksnail:** R, 25, 25CE, 50
+
+The ESP32-C5 receiver covers 5180–5917 MHz, so Boscam E7 and E8 need an RX5808.
+
+
+
+## FAQ
+
+**How accurate is FPVGate?**
+On average, its maximum lap-time deviation is 20 ms lower than an 8-node
+RX5808 timer's. Each pass is timed at the peak of the signal, the moment the
+quad is closest to the gate.
+
+**How many pilots can it time?**
+One per gate with an RX5808, or up to eight from one gate with an ESP32-C5
+receiver. Event Mode runs larger rosters as groups that race in turn.
+
+**Do I need a Raspberry Pi or RotorHazard?**
+No. FPVGate is a standalone timer with its own web interface. If your club
+runs RotorHazard, FPVGate joins it through the
+[RotorHazard plugin](docs/ROTORHAZARD_INTEGRATION.md).
+
+**What do I need to build one?**
+An ESP32-S3 board, a receiver (an SPI-modded RX5808 or an ESP32-C5), a
+microSD card and 5 V power. Flash it from your browser with the
+[web flasher](https://fpvgate.xyz/flasher.html), or buy a ready-made gate
+from the [shop](https://fpvgate.xyz/shop.html).
+
+**Does it work with DJI, HDZero or Walksnail?**
+FPVGate has channel presets for DJI, HDZero and Walksnail as well as the
+analog bands. It measures signal strength rather than decoding the video.
+
+**How is FPVGate related to PhobosLT?**
+FPVGate began as a fork of [PhobosLT](https://github.com/phobos-/PhobosLT)
+and has since added multi-pilot timing, Event Mode, spoken lap times, race
+analysis, the Visual Marshal, USB networking, over-the-air updates and
+RotorHazard integration.
-### Recent Updates
-
-**v1.9.0-alpha-5 (October 24, 2026)**
-
-- RotorHazard passes and RSSI history use matching peak sample timestamps.
-- Use RH plugin v2.3.2-rc.1 for the matching clock-correction fix.
-- Fixed 2-/3-lap rolling announcements, including separate C5 pilot totals.
-- C5 races stop on max laps/heat time and save history on the gate.
-- All six boards: XIAO S3, S3-ETH, DevKitC-1, AIO, Solo and C5MK AIO.
-- Camera and physical multi-transmitter race validation remain pending.
-
-**v1.9.0-Multi-Alpha-2 (October 9, 2026)**
-
-- USB networking stays up under load: two USB driver bugs fixed.
-- RotorHazard plugin 2 support: every pilot, live RSSI, frequencies set from RotorHazard.
-- Waveshare ESP32-S3-ETH board with wired Ethernet (untested on hardware).
-
-**v1.9.0-Multi-Alpha-1 (October 7, 2026)**
-
-- ESP32-C5 receiver support for up to eight pilots.
-- Per-pilot calibration, standings, race history and RSSI editing.
-- Testing release; see the release notes for setup and known limits.
-
-**v1.7.3 (June 13, 2026)**
-- **Race Notes** — Add/edit notes per race with auto-open-on-stop option
-- **Configurable Race Analytics** — Independent toggle for Fastest Lap, Fastest 3 Consecutive, Lap Times, and Consistency panels
-- **Multilingual Voice Packs** — German, Spanish, French ElevenLabs voices with canonical `voice_*` structure
-- **Editable Calibration Results** — Fine-tune RSSI thresholds and Min Lap Time after running the wizard
-- **FPVGate Solo** — New lightweight board target
-
-**v1.7.0 (March 20, 2026)**
-- **RotorHazard Integration** - Bidirectional race control, NTP clock sync, lap submission, companion RH plugin
-- **I2S Speaker Audio (MAX98357A)** - Hardware speaker output for race announcements
-- **New Boards** - FPVGate AIO V4, XIAO ESP32S3 Plus
-- **Config v16** - New fields for RH integration and speaker settings
-
-**v1.6.2 (February 26, 2026)**
-- **Waveshare ESP32-S3-LCD-2** - New board support (Expert Mode)
-- **Calibration Ignore Regions** - Mark noisy RSSI sections to exclude from threshold
-- **Novacore Filter Tuning** - Per-filter toggles and parameter sliders
-- **Debug RSSI Overlay** - Real-time debug chart in diagnostics
-
-**v1.6.1 (February 14, 2026)**
-- **Multi-Pilot Race Analysis** - Current lap timer, lap times chart, consistency chart
-- **Race Synchronization** - Redesigned sync UI, TTS format override, speech keepalive
-- **Mobile Experience** - Settings modal navigation, iOS Safari hostname fix
-
-**v1.6.0 (February 9, 2026)**
-- **Race Synchronization System** - Multi-timer sync for distributed race timing
-- **Audio Controls** - Beep volume slider, independent browser audio volume
-
-**[Full changelog →](CHANGELOG.md)**
-
----
-
-## Community & Support
-
-- **Bug Reports:** [GitHub Issues](https://github.com/LouisHitchcock/FPVGate/issues)
-- **Feature Requests:** [GitHub Discussions](https://github.com/LouisHitchcock/FPVGate/discussions)
-- **Support Development:** [Ko-fi](https://ko-fi.com/louishitchcock)
-- **Star this repo** if you find it useful!
+## Documentation
----
+| Guide | Contents |
+|---|---|
+| [Getting started](docs/GETTING_STARTED.md) | Hardware, wiring, flashing and first setup |
+| [User guide](docs/USER_GUIDE.md) | Connecting, calibrating, racing and every feature |
+| [Multi-pilot with an ESP32-C5](docs/C5_MULTI_PILOT.md) | Wiring, setup and calibration for up to eight pilots |
+| [Gate race completion](docs/GATE_RACE_COMPLETION.md) | How the gate finishes and saves multi-pilot races |
+| [Hardware guide](docs/HARDWARE_GUIDE.md) | Components, wiring diagrams, troubleshooting |
+| [Features](docs/FEATURES.md) | In-depth feature documentation |
+| [RotorHazard integration](docs/ROTORHAZARD_INTEGRATION.md) | Connecting FPVGate to RotorHazard |
+| [USB networking](docs/USB_NETWORKING.md) | The web UI over USB-C |
+| [Waveshare ESP32-S3-ETH](docs/WAVESHARE_S3_ETH.md) | The wired Ethernet board |
+| [Voice generation](docs/VOICE_GENERATION_README.md), [multi-voice setup](docs/MULTI_VOICE_SETUP.md) | Custom and multiple voices |
+| [Development](docs/DEVELOPMENT.md) | Building from source and contributing |
+| [Changelog](CHANGELOG.md) | Every release |
+
+## What's new in 1.9.0
+
+- **Up to 8 pilots per gate** with an ESP32-C5 receiver running FPVGate C5MK
+- **Event Mode** for club events: groups, formats, heat scheduling and seeding
+- **Gate-managed races** that finish and save on the gate, even with no browser open
+- **RotorHazard plugin 2** support: every pilot, live RSSI and frequencies from RotorHazard
+- **More accurate timing**, with matching peak timestamps for RotorHazard passes and RSSI history
+- **New boards:** FPVGate C5MK AIO and Waveshare ESP32-S3-ETH with wired Ethernet
+
+The [changelog](CHANGELOG.md) covers every release.
+
+## Community
+
+- **Chat and help:** [Discord](https://discord.gg/XwammuWCCj)
+- **Bugs and feature requests:** [GitHub Issues](https://github.com/LouisHitchcock/FPVGate/issues)
+- **Questions and ideas:** [GitHub Discussions](https://github.com/LouisHitchcock/FPVGate/discussions)
+- **Support development:** [Ko-fi](https://ko-fi.com/louishitchcock), or
+ [buy a gate](https://fpvgate.xyz/shop.html)
+
+If FPVGate is useful to you, a ⭐ helps other pilots find it.
## Credits
-FPVGate is a heavily modified fork of [PhobosLT](https://github.com/phobos-/PhobosLT) by phobos-. The original project provided the foundation for RSSI-based lap timing.
-
-Portions of the timing logic are inspired by [RotorHazard](https://github.com/RotorHazard/RotorHazard).
-
-### Contributors
-See [CONTRIBUTORS.md](CONTRIBUTORS.md) for full contributor list.
-
----
-
-## License
-
-This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
-
-You are free to share and adapt this work for non-commercial purposes, as long as you provide attribution and distribute any modifications under the same license.
-
-See the [LICENSE](LICENSE) file for full details or visit https://creativecommons.org/licenses/by-nc-sa/4.0/
+FPVGate is a heavily modified fork of [PhobosLT](https://github.com/phobos-/PhobosLT)
+by phobos-, which provided the foundation for RSSI lap timing. Portions of the
+timing logic are inspired by [RotorHazard](https://github.com/RotorHazard/RotorHazard).
+[CONTRIBUTORS.md](CONTRIBUTORS.md) lists everyone who has contributed.
----
+## Licence
-**Made with care for the FPV community**
+[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/): free to
+share and adapt for non-commercial use, with attribution, under the same
+licence. See [LICENSE](LICENSE).
diff --git a/docs/banner.png b/docs/banner.png
new file mode 100644
index 0000000..d4ae4f7
Binary files /dev/null and b/docs/banner.png differ
diff --git a/docs/social-preview.png b/docs/social-preview.png
new file mode 100644
index 0000000..e4cfc99
Binary files /dev/null and b/docs/social-preview.png differ
diff --git a/screenshots/v1.9.0/calibration.png b/screenshots/v1.9.0/calibration.png
new file mode 100644
index 0000000..5e087d4
Binary files /dev/null and b/screenshots/v1.9.0/calibration.png differ
diff --git a/screenshots/v1.9.0/event-mode.png b/screenshots/v1.9.0/event-mode.png
new file mode 100644
index 0000000..584de66
Binary files /dev/null and b/screenshots/v1.9.0/event-mode.png differ
diff --git a/screenshots/v1.9.0/phone.png b/screenshots/v1.9.0/phone.png
new file mode 100644
index 0000000..3b2b9ec
Binary files /dev/null and b/screenshots/v1.9.0/phone.png differ
diff --git a/screenshots/v1.9.0/race-history.png b/screenshots/v1.9.0/race-history.png
new file mode 100644
index 0000000..82dad25
Binary files /dev/null and b/screenshots/v1.9.0/race-history.png differ
diff --git a/screenshots/v1.9.0/race-multi-pilot.png b/screenshots/v1.9.0/race-multi-pilot.png
new file mode 100644
index 0000000..46a86c6
Binary files /dev/null and b/screenshots/v1.9.0/race-multi-pilot.png differ
diff --git a/screenshots/v1.9.0/race-single-pilot.png b/screenshots/v1.9.0/race-single-pilot.png
new file mode 100644
index 0000000..19395ce
Binary files /dev/null and b/screenshots/v1.9.0/race-single-pilot.png differ
diff --git a/screenshots/v1.9.0/settings.png b/screenshots/v1.9.0/settings.png
new file mode 100644
index 0000000..dd7f40a
Binary files /dev/null and b/screenshots/v1.9.0/settings.png differ
diff --git a/screenshots/v1.9.0/themes.png b/screenshots/v1.9.0/themes.png
new file mode 100644
index 0000000..fd7995a
Binary files /dev/null and b/screenshots/v1.9.0/themes.png differ