```{toctree}
:hidden:
:maxdepth: 2
CLI <cli/index>
Python SDK <sdk/index>
Hardware <hardware/index>
Guides <guides/index>
Reference <reference/index>
```

```{admonition} Where do you want to start?
:class: tip

New here? DotBots are small wheeled robots you drive from your browser or your
own code - one DotBot, or a swarm of hundreds. Pick a starting point:

- **Try it with no hardware** - the simulator runs the full web UI with no
  DotBot or gateway needed: `dotbot run simulator`. See the
  [simulator guide](guides/simulator.md), or run `dotbot guide` for a
  one-page start that also suits AI coding agents.
- **Get one DotBot moving** - build and cable-flash a single DotBot and gateway,
  then drive it from the browser. See the [one-bot guide](guides/one-bot.md).
- **Run a swarm experiment** - provision and command many DotBots over the air.
  The swarm quickstart below is the main path; then see [`swarm`](cli/swarm.md)
  and [LH2 localization](guides/lh2-calibration.md).
- **Script it / collect data** - drive the swarm from your own code today over
  [REST / WebSocket](reference/rest.md) or [MQTT](reference/mqtt.md), and log
  runs with `dotbot run controller --csv-data-output`. (A higher-level
  [Python SDK](sdk/index.md) is planned.)
- **Extend the platform** - every command and flag is in the
  [CLI reference](cli/index.md); the firmware flows live under [`fw`](cli/fw.md)
  and [`device`](cli/device.md).
- **Before flashing hardware** - the simulator and driving an existing swarm
  need only Python; building and cable-flashing firmware also need SEGGER
  Embedded Studio and the nRF Command Line Tools (`nrfjprog`). See
  **Prerequisites** below before you start.
```

```{admonition} Sites and areas
:class: note

Positions are millimetres in a **site**: the floor you work on, with its zero
at a physical mark you write down and named rectangles called **areas**. An
area can have a role. The **field** is where experiments happen and what a
calibration covers, and a site has at most one. **Staging** is where robots
park and charge. A **corner** is a small patch, such as a bench, that may
overlap other areas and stays hidden in the console until you turn it on.
`dotbot config init` writes a site with a field and a staging strip, and
commands that need a place default to the field. See
[sites](reference/configuration.md#sites) in the configuration reference.
```

```{include} ../README.md
:relative-images:
```
