Files
Michael A. CojocariandClaude Opus 5 72fb10254f docs: pager cards on the standalone flasher page, and what that page actually is (#289)
Last item on oumike's list. deploy/flasher/ carried two manifests and no pager,
so the board was missing from the standalone install page.

It now has a card per radio variant, both pointing at latest-beta -- the pager is
a beta-feed board, so latest/ is the wrong pointer for it, unlike the two stable
boards already there. Each card names its radio and says so again in the body,
because flashing an LR1121 build onto an SX1262 unit leaves the user with a
device whose radio does not come up, and the two SKUs look identical.

version is set to "beta" rather than a tag. These manifests point at a rolling
feed, so any tag hardcoded here is wrong the moment the next build ships -- which
is what happened to the two existing files, both still claiming beta_1. Worth
fixing those separately or dropping the local copies entirely.

Which leads to the caveat, now written down in deploy/README.md: no deploy script
publishes deploy/flasher/. deploy-site.sh ships deploy/site/ only, and
flasher.wadamesh.com 301s to the apex, so the page users actually reach is
deploy/site/index.html -- which has covered every board for a while. The README
also had the redirect backwards, claiming the apex redirects to the flasher.

So this is parity for a directory that may be dead. Kaj reached the same
conclusion independently in e2d07d8 and left it alone; the files are cheap and
the ticket asked for them, but the real decision is wire it up or delete it, and
that is now stated where someone will find it.

Also refreshes TLORA_PAGER_PORT.md, which still listed the release pipeline as
TODO (both envs have been in release.sh and gen-flasher-meta.py for a while) and
still described CAP_SD/CAP_FILESYSTEM as 0 by design in four places, along with a
deferred-SD list that has almost entirely landed. Only lock-screen wallpaper SD
scanning is genuinely still T-Deck/M9-only. Adds a dated status section at the
top; the milestone narrative below it is kept, since the war stories are why
several non-obvious things are the way they are.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 15:43:24 -04:00

121 lines
7.9 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>wadamesh — install</title>
<link rel="icon" href="https://wadamesh.com/wadamesh-badge.svg">
<meta name="theme-color" content="#ffffff">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@700&display=swap" rel="stylesheet">
<script>
if (location.protocol === 'http:') location.replace(location.href.replace(/^http:/, 'https:'));
</script>
<script type="module" src="https://unpkg.com/esp-web-tools@10/dist/web/install-button.js?module"></script>
<style>
:root{--bg:#fff;--bg2:#f4f6f2;--ink:#15181e;--mut:#5d6770;--line:#e5e8e2;--teal:#15b6a6;--cyan:#19d6c2;--teal-ink:#0e8d80;color-scheme:light}
*{box-sizing:border-box;margin:0;padding:0}
body{font:16px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--ink);
min-height:100vh;display:flex;flex-direction:column;align-items:center;-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:-25% -10% auto -10%;height:60vh;z-index:-1;
background:radial-gradient(44vw 36vh at 50% 0%, rgba(25,214,194,.14), transparent 62%)}
header{text-align:center;padding:56px 20px 6px}
.logo{width:min(360px,80vw);height:auto;display:block;margin:0 auto;overflow:visible}
/* animated mesh mark — repeaters broadcast; signal packets ride the trails */
.wm-flow path{fill:none;stroke:var(--cyan);stroke-width:5.5;stroke-linecap:round}
.wm-ping{fill:none;stroke:var(--cyan);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center}
@media (prefers-reduced-motion:no-preference){
.wm-flow path{stroke-dasharray:2 18;animation:wm-flow .8s linear infinite}
.wm-flow .wm-top{animation-delay:-.4s}
@keyframes wm-flow{to{stroke-dashoffset:-20}}
.wm-ping{animation:wm-ping 2.4s ease-out infinite}
.wm-ping.c1{animation-delay:.3s} .wm-ping.c2{animation-delay:.6s} .wm-ping.c3{animation-delay:.9s} .wm-ping.c4{animation-delay:1.2s}
@keyframes wm-ping{0%{transform:scale(1);opacity:.55} 70%,100%{transform:scale(2.4);opacity:0}}
}
@media (prefers-reduced-motion:reduce){.wm-flow{display:none}}
.tag{color:var(--mut);margin-top:14px}
main{width:100%;max-width:720px;padding:24px 20px 60px}
.cards{display:grid;gap:16px;grid-template-columns:1fr 1fr}
@media(max-width:560px){.cards{grid-template-columns:1fr}}
.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px;display:flex;flex-direction:column;
gap:12px;align-items:flex-start;box-shadow:0 10px 30px -24px rgba(21,24,30,.6)}
.card h2{margin:0;font-size:1.15rem}
.card p{margin:0;color:var(--mut);font-size:.9rem}
esp-web-install-button{--esp-tools-button-color:var(--teal);--esp-tools-button-text-color:#fff}
.note{margin-top:26px;padding:16px 18px;background:var(--bg2);border:1px solid var(--line);border-radius:12px;color:#46525c;font-size:.9rem}
.note b{color:var(--ink)}
a{color:var(--teal-ink)}
footer{color:var(--mut);font-size:.85rem;padding:0 20px 40px;text-align:center}
.card h2 .beta{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;font-size:.7rem;
font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#8a5a12;background:#fdf0d8;
border:1px solid #f0d6a8;vertical-align:middle}
.card .warn{color:#b4631a;font-size:.85rem}
.unsupported{display:none;color:#b4631a}
body.no-serial .unsupported{display:block}
body.no-serial esp-web-install-button{display:none}
</style>
</head>
<body>
<header>
<svg class="logo" viewBox="0 0 720 140" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="wadamesh">
<defs>
<filter id="wmGlow" x="-60%" y="-60%" width="220%" height="220%">
<feGaussianBlur stdDeviation="1.5" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<g transform="translate(0 10)">
<path d="M10 60 L50 108 L90 60 L130 108 L170 60" stroke="#15181E" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10 60 L50 12 L90 60 L130 12 L170 60" stroke="#15181E" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<g class="wm-flow" filter="url(#wmGlow)"><path class="wm-bot" pathLength="100" d="M10 60 L50 108 L90 60 L130 108 L170 60"/><path class="wm-top" pathLength="100" d="M10 60 L50 12 L90 60 L130 12 L170 60"/></g>
<g class="wm-pings"><circle class="wm-ping c0" cx="10" cy="60" r="7.5"/><circle class="wm-ping c1" cx="50" cy="12" r="7.5"/><circle class="wm-ping c1" cx="50" cy="108" r="7.5"/><circle class="wm-ping c2" cx="90" cy="60" r="7.5"/><circle class="wm-ping c3" cx="130" cy="12" r="7.5"/><circle class="wm-ping c3" cx="130" cy="108" r="7.5"/><circle class="wm-ping c4" cx="170" cy="60" r="7.5"/></g>
<g fill="#15B6A6"><circle cx="10" cy="60" r="7.5"/><circle cx="90" cy="60" r="7.5"/><circle cx="170" cy="60" r="7.5"/><circle cx="50" cy="12" r="7.5"/><circle cx="130" cy="12" r="7.5"/><circle cx="50" cy="108" r="7.5"/><circle cx="130" cy="108" r="7.5"/></g>
</g>
<text x="225" y="92" font-family="'JetBrains Mono','Courier New',monospace" font-weight="700" font-size="62" letter-spacing="6" fill="#15181E">WADA<tspan fill="#15B6A6">MESH</tspan></text>
</svg>
<div class="tag">Install over USB, right from your browser.</div>
</header>
<main>
<div class="cards">
<div class="card">
<h2>Heltec V4 + TFT</h2>
<p>ESP32-S3 with the CHSC6x touch display.</p>
<esp-web-install-button manifest="./manifest-heltec-v4-tft.json"></esp-web-install-button>
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
</div>
<div class="card">
<h2>LilyGo T-Deck / Plus</h2>
<p>ESP32-S3 keyboard + trackball handheld.</p>
<esp-web-install-button manifest="./manifest-tdeck.json"></esp-web-install-button>
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
</div>
<div class="card">
<h2>T-LoRa Pager <span class="beta">Beta</span> <span style="font-weight:600;color:var(--mut)">LR1121</span></h2>
<p>ESP32-S3 QWERTY + rotary encoder, no touchscreen.</p>
<p class="warn">Only for units with the <b>LR1121</b> radio — SX1262 units need the other Pager card.</p>
<esp-web-install-button manifest="./manifest-tlora-pager-lr1121.json"></esp-web-install-button>
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
</div>
<div class="card">
<h2>T-LoRa Pager <span class="beta">Beta</span> <span style="font-weight:600;color:var(--mut)">SX1262</span></h2>
<p>ESP32-S3 QWERTY + rotary encoder, no touchscreen.</p>
<p class="warn">Only for units with the <b>SX1262</b> radio — LR1121 units need the other Pager card.</p>
<esp-web-install-button manifest="./manifest-tlora-pager-sx1262.json"></esp-web-install-button>
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
</div>
</div>
<div class="note">
<b>How it works:</b> plug the device in over USB, click <b>Connect</b>, pick the serial port,
and let it flash — a clean full install. On a T-Deck, hold the trackball while tapping reset if it
doesn't enter download mode on its own. The T-LoRa Pager ships with either an LR1121 or an SX1262
radio — check yours and pick the matching card, since the wrong build leaves the radio dead; both
install from the <b>beta</b> channel. Works in <b>Chrome / Edge on desktop</b>. Want the guided
version (incl. running under bmorcelli's Launcher)? See <a href="https://wadamesh.com">wadamesh.com</a>.
</div>
</main>
<footer>Open source (GPL-3.0) · <a href="https://github.com/ALLFATHER-BV/wadamesh">github.com/ALLFATHER-BV/wadamesh</a></footer>
<script>if (!('serial' in navigator)) document.body.classList.add('no-serial');</script>
</body>
</html>