You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Move docs to docs/, consolidate TODOs, update README with value prop
- Add "Who This Is For" and "Why LoRa Map?" sections to README
- Expand features table with terrain, matrix, deadzones, mesh paths, mobile
- Update test counts (341 backend + 232 frontend = 573)
- Move parameters.md to docs/
- Consolidate TODOS.md, TODO.SHIP.md, TODOS.SHIP.md into docs/TODOS.md
- Fix session.flush() before task insert, fix P2P path loss regex
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+33-10Lines changed: 33 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,25 @@
21
21
22
22
---
23
23
24
+
## Who This Is For
25
+
26
+
Meshcore and LoRa communities with fixed tower infrastructure who want to **plan new sites with real propagation physics** and **share current coverage maps with their community**. Admins run simulations; visitors see the results on an interactive map — no RF expertise required.
27
+
28
+
## Why LoRa Map?
29
+
30
+
The [upstream planner](https://github.com/meshtastic/meshtastic-site-planner) runs single-tower, single-terrain simulations. LoRa Map builds on that foundation with multi-tower network planning, real-world terrain modeling, and a visitor-facing coverage portal.
31
+
32
+
-**Multi-source terrain** — Go beyond flat bare-earth SRTM. Simulate against Copernicus DSM (buildings + tree canopy), ESA WorldCover LULC clutter, or a weighted aggregate that blends all three for a realistic "expected coverage" estimate.
33
+
-**Batch simulation matrix** — Pre-compute coverage for every combination of client hardware, antenna, and terrain model. Visitors instantly switch scenarios — no simulation wait, no admin involvement.
34
+
-**Deadzone remediation** — Automatically find coverage gaps across your network, rank them by priority, and suggest where to place new towers with estimated coverage gain.
35
+
-**Mesh path analysis** — Pairwise SPLAT! point-to-point between all towers. See line-of-sight status, path loss, and link quality as color-coded polylines — understand your mesh backbone at a glance.
36
+
-**Overlap visualization** — Per-tower color-coded layers with signal-strength transparency. Multi-coverage areas render as cross-hatched patterns so you can distinguish each tower's contribution.
37
+
-**Hardware-aware presets** — Heltec V3/V4 profiles, region-locked frequencies (CA/US/EU/AU/AS), curated antennas with automatic SWR mismatch loss calculated and deducted.
38
+
-**Visitor portal** — Community members pick their client device and antenna from dropdowns and see personalized coverage maps. No login, no configuration, instant results.
39
+
-**One container** — Single Podman image, one port, one volume mount. Deploys behind your existing reverse proxy in minutes.
40
+
41
+
---
42
+
24
43
## Table of Contents
25
44
26
45
-[Overview](#-overview)
@@ -51,11 +70,15 @@ Terrain elevation data is streamed from [AWS Open Data](https://registry.opendat
51
70
| Category | Details |
52
71
|---|---|
53
72
|**Coverage Prediction**| ITM/Longley-Rice propagation model via SPLAT!, configurable frequency/power/gain/height, per-tower color-coded layers with signal-strength alpha mapping |
54
-
|**Hardware Presets**| Pre-configured profiles for Heltec V3/V4, region-locked frequencies (CA/US/EU/AU/AS), curated antenna list with SWR mismatch loss calculation |
55
-
|**Multi-Tower Support**| Independent per-tower layers, visibility toggling without re-rendering, automatic color assignment from a 24-color palette |
56
-
|**Admin/Visitor Roles**| Admin credentials gate simulation triggers and tower management; visitors see cached results instantly with no edit capability |
57
-
|**Persistent Storage**| Tower configs, simulation results, and GeoTIFF blobs persisted in SQLite on a mounted volume |
58
-
|**Single Container**| One Podman container, HTTP on port 8080, sits behind your existing HTTPS reverse proxy |
73
+
|**Multi-Source Terrain**| Bare-earth SRTM, Copernicus DSM (buildings + canopy), ESA WorldCover LULC clutter, and weighted aggregate blend mode |
74
+
|**Batch Simulation Matrix**| Admin-configurable client hardware × antenna × terrain combinations, pre-computed so visitors get instant layer switching |
75
+
|**Deadzone Remediation**| Gap analysis across all towers, priority-scored deadzone regions, suggested new tower placements with estimated coverage gain |
76
+
|**Mesh Path Analysis**| Pairwise SPLAT! point-to-point between towers, path loss and LOS status, color-coded polyline overlay |
77
+
|**Overlap Visualization**| Cross-hatched canvas layer distinguishes per-tower signal contributions in multi-coverage areas |
78
+
|**Hardware Presets**| Heltec V3/V4 profiles, region-locked frequencies (CA/US/EU/AU/AS), curated antennas with SWR mismatch loss |
79
+
|**Admin/Visitor Roles**| Rate-limited admin auth gates mutations; visitors see cached results instantly with client hardware/antenna/terrain selectors |
80
+
|**Mobile Responsive**| Full responsive layout with touch-friendly controls, sticky simulation button, and adaptive offcanvas sidebar |
81
+
|**Single Container**| One Podman container, HTTP on port 8080, SQLite on a mounted volume, sits behind your existing reverse proxy |
59
82
60
83
---
61
84
@@ -149,9 +172,9 @@ pnpm run test
149
172
150
173
| Suite | Framework | Tests |
151
174
|---|---|---|
152
-
| Backend | pytest |196|
153
-
| Frontend | Vitest |50|
154
-
|**Total**||**246**|
175
+
| Backend | pytest |341|
176
+
| Frontend | Vitest |232|
177
+
|**Total**||**573**|
155
178
156
179
All tests run against real code with zero mocks — SPLAT! binaries are built from source during test setup.
157
180
@@ -162,11 +185,11 @@ All tests run against real code with zero mocks — SPLAT! binaries are built fr
162
185
This tool runs a physics simulation with the following key assumptions:
163
186
164
187
1.**Terrain resolution:** SRTM elevation data is accurate to ~90 m (3-arcsecond) or ~30 m (1-arcsecond HD mode).
165
-
2.**No surface clutter by default:**Buildings, trees, and other obstructions beyond terrain are not modeled. The uniform `clutter_height` parameter can approximate ground-level obstructions. Future support for DSM tiles and LULC-burned clutter is planned.
188
+
2.**Surface clutter is optional:**By default, bare-earth SRTM terrain has no buildings or vegetation. Enable DSM (Copernicus GLO-30) or LULC clutter (ESA WorldCover) terrain modes for simulations that include surface obstructions. The weighted aggregate mode blends all three sources.
166
189
3.**Isotropic antennas:** Horizontal radiation patterns are assumed omnidirectional. Directional antenna patterns are not modeled.
167
190
4.**No skywave propagation:** Upper-atmosphere reflections are assumed negligible, which is less accurate below ~50 MHz.
168
191
169
-
A detailed description of all model parameters and their recommended values is available in [parameters.md](parameters.md).
192
+
A detailed description of all model parameters and their recommended values is available in [docs/parameters.md](docs/parameters.md).
0 commit comments