Project

General

Profile

User Story #71 » 0002-docs-layperson-User-Guide-mesh-setup-join-predicate-.patch

knight8241, 08/07/2026 18:33

View differences:

docs/architecture/README.md
[06](06-server-and-telemetry.md) → [07](07-client-app-and-rendering.md) →
[08](08-contributing.md) → [09](09-workflows.md).
- **Touching a file?** Find it in the **Source-of-truth map** below → open that doc first.
- **Want the user's-eye view?** The workflows in [09](09-workflows.md) mirror the
layperson guide (mesh setup, client join, predicate authoring).
- **Want the user's-eye view?** The end-user [User Guide](../user-guide.md) advertises the
same three workflows (mesh setup, client join, predicate authoring) in plain language;
[09](09-workflows.md) is their technical-sequence counterpart.
## The doc set
docs/user-guide.md
# Aether — User Guide
*Turn a room and a handful of phones into a shared, centimetre-accurate map of who's
where — and let people point at things to make them happen.*
Aether is an indoor positioning system. Where GPS gives you a blue dot on a street,
Aether gives you a **precise 3-D position indoors** — good to a few centimetres — for every
device in a "mesh." Your phone measures tiny radio time-of-flight distances to nearby
**anchors** and peers over Ultra-Wideband (the same tech that finds a lost tag), blends
that with its motion sensors, and everyone agrees on one shared coordinate frame. Then the
app shows a live 3-D / first-person view of the space and lets you **point at people or
places** to trigger events.
- **No internet required to run.** A mesh forms device-to-device over local Wi-Fi/UWB.
The cloud is optional (for accounts, dashboards, and shared trust).
- **Private by design.** Positions are computed on your devices. The optional cloud link
sends health metrics, not your live location, unless you opt into full traces.
- **Roles that make sense.** *Anchors* are the fixed reference points that build the map;
*clients* are the people moving through it.
---
## Three things you can do
| I want to… | Go to |
|------------|-------|
| Build a new space (place anchors, calibrate) | [Set up a mesh](#1-set-up-a-mesh) |
| Walk into someone else's space and appear on the map | [Join a mesh](#2-join-a-mesh) |
| Make "point at that" or "enter this zone" trigger things | [Author a predicate](#3-author-a-predicate) |
---
## 1 · Set up a mesh
*You're the host. You'll place a few anchor devices around the room and teach the app where
they are, until the map "locks."*
```mermaid
flowchart LR
A["① Create the mesh<br/>(name it)"] --> B["② Add anchors<br/>(invite devices)"]
B --> C["③ Place them<br/>in the room"]
C --> D["④ Enter the layout<br/>(measure & type in)"]
D --> E["⑤ Calibrate<br/>→ map LOCKS ✓"]
```
1. **Create the mesh.** Open **Meshes ▸ +**, give it a name, pick who can see it (public,
protected, invisible, private). Your device becomes the **root anchor** — the origin of
the map. No account needed.
2. **Add anchors.** Anchors are devices that stay put and form the reference frame. Have
other devices [join](#2-join-a-mesh), then in **Requests** tap *invite as anchor*; they
accept.
3. **Place them.** Put the anchors around the space — spread out, not in a straight line,
ideally with one raised up. Good spread = an accurate map.
4. **Enter the layout.** Open **Diagnostics ▸ Layout** and type in each anchor's real
position (e.g. corner-to-corner distances). This "ground truth" is what makes Aether
*accurate* rather than merely consistent. A live fit score tells you when it's right.
5. **Calibrate to a lock.** The app measures the anchors against each other and locks the
frame. You'll pass through **Calibrating → Pre-quorum → Quorum**; at **Quorum** (3+
anchors) the map is trustworthy and self-heals if an anchor is bumped or leaves.
> As the host you land on the **Diagnostics** screen by default — it shows the mesh building
> in real time (link strengths, geometry quality, calibration), which is exactly what you
> want while setting up.
---
## 2 · Join a mesh
*You're a guest. You'll find the space, join it, and appear on the map once your phone
figures out where it is.*
```mermaid
flowchart LR
A["① Discover<br/>nearby meshes"] --> B["② Join / request"]
B --> C["③ Get admitted<br/>(secure key)"]
C --> D["④ Your phone<br/>locates itself"]
D --> E["⑤ The 3-D scene<br/>appears ✓"]
```
1. **Discover.** Open **Meshes ▸ Discover**. Nearby meshes appear automatically (they
announce themselves over the local network).
2. **Join or request.** Public meshes join instantly; protected ones send a request the
host approves.
3. **Get admitted securely.** On approval you receive an encrypted key so your traffic is
private to the mesh. (To go online with an account, the app also fetches and pins the
mesh's security certificate — automatic.)
4. **Your phone locates itself.** As you range the anchors, the mesh computes your position
and your phone "self-seeds" from it, then smooths it with your motion sensors.
5. **The scene appears.** Until your phone is confident where it is, you'll see a friendly
*"Acquiring mesh… / Locating this device…"* hold screen — **not** a wrong map. The moment
it's ready, the live **3-D and first-person** view opens: anchors, people, and any shared
objects, all in their real places.
> That hold screen is deliberate. A guest is never shown a jittery, wrong position that
> *looks* real — you either see the correct scene or an honest "getting ready."
---
## 3 · Author a predicate
*Predicates are the "if this, then that" of space. Two kinds: **point at** something, or
**enter a zone**.*
```mermaid
flowchart LR
A["① Pick a predicate<br/>(point-at / zone)"] --> B["② Aim or place it"]
B --> C["③ Share to the mesh"]
C --> D["④ Everyone's device<br/>watches for it"]
D --> E["⑤ It fires ✓<br/>(you light up)"]
```
**Point at a person or place**
1. Open **Predicates**.
2. Choose *Point at a location* or *Point at <person>*.
3. **Aim your phone** — the back of the phone is the "wand." Hold steady on the target for a
moment.
4. The predicate is shared mesh-wide, and **every device watches for it**. When your aim
lands within the target for the dwell time, it **fires** — you light up as the one
pointing (the *actor*), and the person you pointed at lights up as the *target*.
**Create a zone (region)**
1. Define a shape — a **sphere, box, or line** — somewhere in the space.
2. Share it to the mesh. Now whenever anyone **enters or exits** that zone, an event fires.
3. Behind the scenes the mesh's leader double-checks each event against its own precise
history and confirms it, so a brief glitch never triggers a false alarm.
> Predicates are how Aether becomes *interactive*: proximity greetings, "you've entered the
> lab" reminders, point-to-select, spatial games — all built on the same shared frame.
---
## What "good" looks like
- **Anchors** spread around the room, one raised, real positions entered → an accurate,
**locked** map that survives a bump.
- **Clients** that walk in, briefly see "locating…", then a smooth, correct 3-D/first-person
view that tracks as they move.
- **Predicates** that fire crisply when you point or cross a zone, and not otherwise.
## Frequently asked
- **Do I need special hardware?** A phone with Ultra-Wideband (UWB). Anchors are just phones
that stay put; dedicated UWB anchors work too.
- **Does it work without internet?** Yes — a mesh forms locally. Online adds accounts,
shared trust, and dashboards.
- **Is my location uploaded?** No — positions are computed on your devices. Only health
metrics go to the optional cloud, unless you turn on detailed traces.
- **Why is the guest screen "holding"?** Your phone hasn't finished locating itself yet.
It's protecting you from a wrong map; it clears in seconds once the anchors have you.
---
*Developers: the systems behind each step are documented in
[`docs/architecture/`](architecture/README.md) — the same three workflows appear there as
technical sequences in [09-workflows](architecture/09-workflows.md).*
    (1-1/1)