← Commit history

0.7.6: self-healing heroes (manifest carries remote wiki URL; billboard streams it if the local cache file is missing instead of a blank card)

John Lauer ·edf80c6ef3 ·4mo ago ·parent 66daeb3
3 files changed +63−42
dist/win/billboard.html+8−2
@@ -445,16 +445,22 @@ function dropSlide(slug){ const i = slides.findIndex(s=>s.slug===slug); if(i>=0)  function mediaEl(s){   const src = /^https?:/i.test(s.media) ? s.media : HOST + encodeURIComponent(s.media);+  // SELF-HEAL: the manifest carries `s.src` = the remote wiki hero URL. If the LOCAL cached file is missing or+  // broken (pruned, never finished downloading, disk wipe), don't show a blank card -- swap to the remote URL+  // and stream the hero straight from the wiki. Only if BOTH fail do we drop the slide. (The next fetch also+  // re-downloads the missing file, so this is belt-and-suspenders: stream now, repopulate the cache later.)+  const remote = s.src && /^https?:/i.test(s.src) ? s.src : "";+  function fallback(el){ if (remote && el.src !== remote){ el.src = remote; return true; } return false; }   if (s.kind === "video"){     const v = document.createElement("video");     v.src = src; v.muted = true; v.defaultMuted = true; v.volume = 0; v.loop = true;     v.autoplay = true; v.setAttribute("playsinline",""); v.preload = "auto";     v.addEventListener("canplay", ()=>{ try{ v.play(); }catch(e){} });-    v.onerror = ()=>{ dropSlide(s.slug); };+    v.onerror = ()=>{ if (!fallback(v)) dropSlide(s.slug); };     return v;   }   const img = document.createElement("img"); img.src = src; // <img> renders svg + raster-  img.onerror = ()=>{ img.style.display="none"; dropSlide(s.slug); };+  img.onerror = ()=>{ if (!fallback(img)){ img.style.display="none"; dropSlide(s.slug); } };   return img; } function buildSlide(s, i){
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-screensaver",-  "version": "0.7.5",+  "version": "0.7.6",   "description": "Vibe-coding screensaver, fades up a live billboard of the latest Adom Wiki drops (truly cached to disk; plays webm silently, renders SVG) with a power-aware nerd-stats splash, while signed native keep-awake holds the machine so Claude Code + /remote-control threads survive. Win+Shift+L to launch.",   "type": "app",   "keywords": [
page.json+54−39
@@ -1,53 +1,68 @@ {-  "slug": "adom-screensaver",-  "version": "0.7.5",-  "description": "Vibe-coding screensaver, fades up a live billboard of the latest Adom Wiki drops (truly cached to disk; plays webm silently, renders SVG) with a power-aware nerd-stats splash, while signed native keep-awake holds the machine so Claude Code + /remote-control threads survive. Win+Shift+L to launch.",+  "schema_version": 1,   "type": "app",-  "keywords": [-    "screensaver",-    "keep-awake",-    "vibe-coding",-    "webview2",-    "billboard",-    "wiki",-    "remote-control",-    "windows"-  ],-  "scripts": {-    "install": "./install.sh",-    "uninstall": "./uninstall.sh"+  "slug": "adom-screensaver",+  "title": "Adom Screensaver",+  "brief": "Turn your laptop into an always-on vibe coding server: branded screensaver + native keep-awake (no PowerToys) + honest, hardware-aware power management.",+  "version": "0.7.6",+  "install": {+    "binary_name": "adom-screensaver",+    "install_dir": "",+    "install_hint": "",+    "version_cmd": ""+  },+  "author": {+    "id": "6738b00a4dc87b8adbb0a5a3",+    "name": "John Lauer",+    "email": "[email protected]"   },-  "dependencies": {},-  "files": [-    "SKILL.md",-    "dist/win/**",-    "skills/**",-    "install.sh",-    "uninstall.sh",-    "page.json",-    "screenshots/**"-  ],-  "org_name": "adom",-  "visibility": "public",-  "bundled": true,   "tags": [     "screensaver",     "keep-awake",-    "vibe-coding",-    "windows",-    "billboard",+    "vibe-coding-server",+    "powertoys-free",     "remote-control",-    "webview2"+    "power",+    "windows",+    "asus-rog"   ],-  "title": "Adom Screensaver",-  "org": "adom",-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"+  "license": "proprietary",+  "visibility": {+    "public": true   },   "hero": {     "type": "image",     "path": "screenshots/hero-v3.png"   },-  "updated_at": "2026-06-22T16:10:15.550Z"+  "sample_prompts": [+    "set up the Adom vibe coding server screensaver on my laptop",+    "keep my laptop awake without PowerToys",+    "make my screen turn off but keep the machine awake",+    "change the screensaver idle timeout to 1 minute",+    "show me the Adom screensaver"+  ],+  "discovery_triggers": [+    "vibe coding server",+    "keep my laptop awake",+    "keep laptop awake",+    "stay awake without powertoys",+    "replace powertoys",+    "keep awake no powertoys",+    "screen off but stay awake",+    "turn off display but keep running",+    "keep claude threads running while away",+    "keep remote control alive",+    "adom screensaver",+    "laptop screensaver",+    "screensaver that keeps machine awake",+    "screensaver status card"+  ],+  "discovery_pitch": "Turn your laptop into an always-on vibe coding server: a branded Adom screensaver, native keep-awake without PowerToys, and honest hardware-aware backlight-off that keeps your Claude/Remote Control threads alive while you're away.",+  "metadata": {+    "platform": "windows"+  },+  "created_at": "2026-06-04T21:55:44.401Z",+  "updated_at": "2026-06-10T15:22:04.850Z",+  "skills": [],+  "org_name": null }\ No newline at end of file