- MyMesh.cpp logRxRaw: the self-echo parser tested (raw[0] & 0x80) for transport
codes, but 0x80 is the top of the payload VERSION field, not a flag. Transport
codes are present iff route_type (raw[0]&0x03) is TRANSPORT_FLOOD/DIRECT. Since
beta_12's region scope, scoped floods carry transport codes -> the parser hashed
the wrong payload slice -> the echo never matched -> 'repeats heard' showed 0 for
anyone with a region set. Now route-type aware (matches uiStashRxMeta). Also fixed
the diagnostic dst= decoder + the header-layout comment.
- MyMesh.h uiSendTraceRoute: walking c.out_path with an unchecked out_path_len
(uint8_t, can be 65..254 if a contact's path is corrupt) overran sendDirect's
payload memcpy -> reboot when tapping 'Trace route' on a sent DM. Clamp to
<= MAX_PATH_SIZE, else fall back to the single-hop trace.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- MyMesh.cpp: strcpy(p->name, contact.name) could overrun the 32-byte advert_paths
name field when an over-the-air advert carries a 32-char (unterminated) name,
corrupting the recently-heard/Found table. Bounded with strncpy + NUL-terminate.
- main.cpp: log nvs_free_entries at boot so a filling NVS (the boot-loop trigger
under Launcher) is visible in serial before it goes catastrophic.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
One command to cut a source-only (no prebuilt/) tag on the monorepo for wadamesh
to pin, keeping the shallow lib clone ~12 MB instead of 1.4 GB.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
wadamesh now builds its MeshCore core from the ALLFATHER-BV/meshcomod monorepo
(the same repo as the non-touch firmware) via a lean, source-only core-* tag,
instead of the separate meshcomod-core fork. The 8 touch-app files this repo
vendors are excluded from the lib with -DMC_VENDORED_TOUCH_APP. Build is
byte-identical (Heltec flash 2625757, unchanged). One core, one repo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The switch on the Wi-Fi settings page had no event handler — it was only read
when you pressed Save, so flipping it appeared to do nothing. Add a
VALUE_CHANGED handler that calls wifiConfigSetRadioEnabled() (persists + flags an
apply; the main loop brings esp_wifi up/down), mirroring the control-center
toggle. Toggling now turns Wi-Fi on/off on the spot.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The esp-web-tools manifest carried a frozen version:beta_1 while the rolling
/latest/ bins moved on, so the web flasher always said beta_1. Fix:
- scripts/build/gen-flasher-meta.py emits version.json (tag + notes) + per-release
manifests (version=tag) into /latest/; release.sh + the CI workflow run it, so
the metadata rolls with every release.
- the site points the install buttons at the VPS manifests and renders a live
'What's new in <tag>' block from version.json.
- drop the frozen static site manifests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Push a beta_* tag (or run via workflow_dispatch) to build both touch boards in
CI with the tag embedded, cut a GitHub Release with the 4 bins, and publish to
wadamesh.com over SSH. VPS host + deploy key are Actions secrets (WADAMESH_VPS,
WADAMESH_VPS_PATH, WADAMESH_VPS_SSH_KEY); the publish step auto-skips until they
exist, so scripts/release.sh remains the manual path. Nothing sensitive in-repo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Mesh background: soften the central fade so the net carries faintly across the middle (mask alpha .22) instead of clearing fully, keeping copy readable.
- Hero copy: "MeshCore MESHCOMOD firmware ...".
- Link the "open source · GPL-3.0" badge to the GitHub repo (opens in a new tab) with a hover state.
- Install flow: Launcher is LilyGo T-Deck only — badge the path, remove the Heltec V4 download from the Launcher guide, and steer V4 owners to Standalone (its only route).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Static lockup SVGs (no <style>/animation, which GitHub's README sanitizer strips)
in light + dark variants via <picture>. Also corrects the core-fork link to
ALLFATHER-BV/meshcomod-core (was the pre-rename ALLFATHER-BV/MeshCore).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The repo carried the full MeshCore board matrix (~38 defs) inherited from the
monorepo split; only heltec_v4 + t-deck are referenced by the two touch envs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the hand-rolled canvas mesh backdrop with a Vanta NET 3D dot-and-line network (three.js r121 + vanta.net), recoloured to brand teal on white (ported from the MENTALITEAM site). A horizontal mask fades the net out of the central text column so copy stays readable, plus a white text-shadow halo for line-ends near the margins. Skipped under prefers-reduced-motion / no-WebGL (falls back to plain white + the CSS glow).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
macOS's bundled rsync errors on --chmod=D755,F644 (invalid argument). rsync -a already preserves the source perms (644 files / 755 dirs), so the flag was redundant; drop it so deploys run on a stock Mac.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Propagate the mesh-mark animation (repeater broadcast rings + cyan signal
packets on the transport trails) to the flasher page and the standalone
wadamesh-mark.svg / wadamesh-lockup.svg. The standalone SVGs embed the CSS
inside the file so they animate even when used as <img>. badge.svg (favicon)
left static. All collapse to the static mark under prefers-reduced-motion.
Add scripts/deploy-site.sh: rsync deploy/site/ to the VPS web root
(/srv/wadamesh/site, the apex wadamesh.com origin), env-driven WADAMESH_VPS
like release.sh, with --dry-run support.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pure inline SVG + CSS, no JS or deps: each of the 7 nodes emits a staggered
expanding broadcast ring (a pulse rippling left->right across the mesh), and
glowing cyan signal packets stream along the black transport trails, passing
through the repeater dots. Collapses to the original static logo under
prefers-reduced-motion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Mirrors the meshcomod legal model (ALLFATHER BV, Belgian law, GDPR controller)
adapted to wadamesh's stack: Privacy Policy, Cookie Policy and Terms as
footer-linked modals, plus a dismissible essential-cookies notice (we use no
tracking/analytics — only Cloudflare's strictly-necessary cookies). Discloses the
third-party resource loads (Cloudflare, Google Fonts, the esp-web-tools CDN, OSM
tiles). Company footer line added.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Each hero pill (Offline map, Chat & channels, Contacts, 11 languages) now reveals
a short description on hover (desktop) or tap (touch), with a tap-elsewhere-to-close.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
- landing hero: replace the inline lockup (its 720-wide viewBox had trailing
whitespace, pulling the artwork left of centre) with the mark SVG + an HTML
wordmark in a flex row — perfectly centred, wordmark renders crisp.
- flasher.wadamesh.com now 301s to wadamesh.com so every visitor (incl. the
firmware's update link) lands on the guided choose-your-path journey rather
than the bare Connect buttons.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Rebuild on the real logo palette: white background, the dark-ink lockup
(#15181E zigzag + #15B6A6 teal dots), JetBrains Mono wordmark, and the cyan/teal
dots as the accent system (#15B6A6 primary, #19D6C2 bright). Inline the dark
lockup SVG (so the wordmark renders true) + add badge favicon + logo SVGs.
Flasher page retheme to match. Deployed + verified live through Cloudflare.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
deploy/site/: a visual install journey served at the apex. Hero + an animated
mesh backdrop, then a two-path chooser:
- Standalone -> embedded esp-web-tools flasher (board picker, 3 steps)
- With Launcher -> step-by-step + app-image downloads (/latest/*.bin)
apex vhost switched from 301->flasher to serving the landing; release.sh now also
rolls the app-only bins into /latest/ for the Launcher path. Deployed + verified
live through Cloudflare (wadamesh.com 200).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
- deploy/flasher/: browser Web Serial installer (board picker for V4 + T-Deck),
manifests pointing at firmware.wadamesh.com/latest/*-merged.bin
- deploy/nginx/firmware: serve /latest/ + Access-Control-Allow-Origin so the
flasher fetches bins cross-origin
- deploy/nginx/flasher: flasher.wadamesh.com vhost + wadamesh.com/www 301->flasher
- release.sh: refresh the rolling /latest/ merged bins each publish
Deployed + verified live through Cloudflare. VPS IP kept out of the repo
(Cloudflare fronts the origin).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
declare -A needs bash 4+; macOS ships bash 3.2. Replaced the env->binname map
with a portable 'env:name' string + parameter-expansion split. Verified
end-to-end: built beta_1 for both boards, rsynced to the firmware VPS, origin
serves the listing + bins.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
The wadamesh.com distribution stack, ready to drop onto a new VPS behind
Cloudflare:
- deploy/nginx/tiles.wadamesh.com.conf — OSM tile proxy (HTTP origin, double-quoted
location regex, resolver + variable proxy_pass, OSM UA, 14d disk cache)
- deploy/nginx/firmware.wadamesh.com.conf — bins + the beta_<N> update-check listing
- scripts/release.sh — build both boards tagged, refresh the listing, rsync to the VPS
- deploy/README.md — VPS + Cloudflare DNS/SSL/cache setup, publish flow
VPS target supplied via $WADAMESH_VPS at publish time — no IP/SSH in the repo
(Cloudflare fronts the origin). Web flasher + OTA re-enable are the remaining
pre-launch pieces (noted in deploy/README.md).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
- tile server default: tiles.meshcomod.com -> tiles.wadamesh.com
- update-check feed: app.meshcomod.com/api-github/... -> firmware.wadamesh.com/releases/TOUCH
(same beta_<N> listing shape, so the on-device parser is unchanged)
- 'update manually at flasher.meshcomod.com' -> flasher.wadamesh.com (incl. all 11 i18n langs)
- HTTP User-Agents -> wadamesh-touch
SD data path /meshcomod/ left as-is (changing it would orphan existing users'
on-card data — a brand-rename-with-migration is a separate decision). Tiles stay
plain HTTP (Cloudflare-cached); the lightweight version check stays HTTP too.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Adds the portable merge-bin.py post-script (app-bin -> out/ + a 'mergebin' custom
target) and enables it in both touch envs. Each board now produces firmware.bin
(app/OTA slot) and firmware-merged.bin (full install @ 0x0) — the two artifacts a
release ships. Verified: V4 merged 2.66 MB, T-Deck merged 2.88 MB.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
The earlier rename/minimize edits matched only the V4 env's formatting and
silently skipped the T-Deck env, leaving it on MeshCore.git#v1.16.0-wada.0 (old
name, pre-minimize tag whose fork still carried the 26 relocated files — a
duplicate-symbol hazard). Both envs now pin meshcomod-core@v1.16.0-wada.1;
T-Deck clean-rebuilds green + size-identical against it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
The core fork was renamed to ALLFATHER-BV/meshcomod-core to make its lineage
explicit — it carries meshcomod's full core (protocol superset + Wi-Fi/BLE/UI
hooks), packaged as a library. Both envs now pin meshcomod-core @ v1.16.0-wada.1.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Take ownership of the 26 files moved out of the core during the fork-minimize:
touch HW drivers (helpers/input/*), touch prefs/SD helpers + companion transport
servers + HTTP-OTA helpers (helpers/esp32/*, helpers/*Ota*.h), LVGL PSRAM
allocator, and touch diag. Three transport headers switched to lib-style
<helpers/...> includes for the new layout. platformio.ini builds them
(helpers/** filters + -I src) and pins MeshCore @ v1.16.0-wada.1 (the slimmed
fork). Both boards build green + size-identical from the published tag.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
- WADAMESH_SPLIT_PLAN.md: status planning -> executed (both boards green from the
published fork; T-Deck flash-verified on hardware); record what's done + the
remaining non-blocking phases (minimize fork, re-home release pipeline).
- README: drop the "early scaffold" note; add Architecture (core via lib_deps,
not vendored) + Build/flash instructions for both envs.
- NOTICE: add the bundled/vendored deps (ed25519, AsyncElegantOTA, TFT_eSPI,
Adafruit GFX/ST7789, chsc6x).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Second board. Flattened env LilyGo_TDeck_companion_radio_touch (GT911 touch +
matrix keyboard + trackball, ST7789 via Adafruit, sensors off except GPS),
building green against MeshCore@v1.16.0-wada.0. Output byte-identical to the
in-tree meshcomod T-Deck build (delta = build-path strings).
Both touch boards now build from the published fork via lib_deps.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
First board lands. wadamesh builds the LVGL touch firmware as its own project,
consuming the MeshCore core via lib_deps @ git tag (ALLFATHER-BV/MeshCore
#v1.16.0-wada.0) — no vendored core in this repo. Output is byte-identical to the
in-tree meshcomod build (delta = embedded build-path strings only).
Contents: companion_radio app (MyMesh/main/DataStore), ui-touch LVGL UI,
variants/heltec_v4 board glue, boards/heltec_v4.json, lv_conf, the bundled
ed25519 lib, AsyncElegantOTA, partition table, and a flattened platformio.ini
for env heltec_v4_tft_companion_radio_usb_tcp_touch.
MeshCore-derived files (app glue) remain MIT; ui-touch is GPL — see NOTICE.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
The lean, no-refactor plan: GPL app (wadamesh) on a minimal/upstreamable MIT
MeshCore fork via lib_deps@tag. Records the boundary, the file-level mapping of
the ~4.2k-line core diff (keep-in-fork / move-to-wadamesh / evaluate), the
one-topic-per-commit sequence behind a build gate, and the risks. No firmware
code moved yet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Adopt copyleft for the touch UI so distributed builds and forks must stay open
(the Meshtastic model — concentrates community effort instead of fragmenting into
closed forks), per the project direction.
- LICENSE: MIT -> full GPL-3.0 text
- NOTICE: third-party attributions; preserves MeshCore's MIT notice (MIT is
GPL-compatible). The MeshCore *fork* wadamesh builds against stays MIT so its
Wi-Fi/BLE hooks remain upstreamable.
- CONTRIBUTING.md: inbound=outbound GPL, DCO sign-off, SPDX headers, one-topic
PRs, prefer libraries, don't regress shipping boards.
- README: license + contributing sections.
GPL-3.0 (not v2) chosen for firmware: anti-tivoization keeps it user-installable,
and it's the only GPL compatible with Apache-2.0 deps (NimBLE).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Kaj Schittecat <kaj@schittecat.com>
Security baseline from commit #1: .gitignore excludes CLAUDE.md and .claude/
(ops/infra notes + agent config) so they can never be committed. The touch
firmware source lands here incrementally as the split from meshcomod proceeds.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>