skill
Demo authoring skillpack
Public Made by Adomby adom
How Adom bridges give a guided, narrated, recorded demo on a user's desktop: real content, an instant remote, captions and TTS, windows forward once and sized into slots, every beat verified, motion that stays on the content, first-run hardening, recording with audio.
← Commit history
Publish 1.1.0
6 files changed
+61−17
package.json+1−1@@ -1,6 +1,6 @@ { "name": "adom/demo-authoring-skillpack",- "version": "1.0.2",+ "version": "1.1.0", "description": "Author a guided, narrated, recorded demo tour for an Adom bridge or dashboard: content, remote, captions and narration, windows, verification, motion, first-run boxes, recording, the true user flow. Measured on the KiCad bridge tour.", "type": "skill", "discovery_triggers": [
page.json+1−1@@ -27,7 +27,7 @@ "path": "docs/hero.png" }, "name": "adom/demo-authoring-skillpack",- "version": "1.0.2",+ "version": "1.1.0", "description": "Author a guided, narrated, recorded demo tour for an Adom bridge or dashboard: content, remote, captions and narration, windows, verification, motion, first-run boxes, recording, the true user flow. Measured on the KiCad bridge tour.", "discovery_triggers": [ "build a demo",
skills/demo-content/SKILL.md+17@@ -38,6 +38,23 @@ tells them everything. 6. **Clean slate first, politely.** Close the tour's own leftovers from an earlier run (viewers it opened, its demo documents), never the user's windows. +## Two parts per beat (John, 2026-09-05)++Every beat is two parts with two narration lines. **Part A** loads the window and the document and says+so in one short line ("Opening the Footprint Editor and loading the LQFP-48 footprint"), so the viewer is+never stuck watching a load in silence. **Part B** starts only when the window is verified on screen: the+explaining line ("forty eight pads on a half millimetre pitch ...") plays while the motion runs. Record+partAAt, partBAt and partBEndAt per beat so a recording can be cut to part B only.++## The design's 3D bodies are yours to fix++A wiki design often references bodies from its author's disk (C:/Users/..., ../), or a standard body that+is not installed on this box. Both render as bare pads. At tour time, on the fetched copy only: drop every+model KiCad cannot load here (balanced block removal, not a regex), then attach KiCad's own body for the+same Lib:Name when it exists on the box, with an alias map for custom footprints (the ESC's six MOSFETs+are MOSFET_CDT:TDSON-8-1 -> Package_TO_SOT_SMD.3dshapes/TDSON-8-1). And reopen the board when the file+on disk is newer than the running pcbnew, or the viewer keeps showing the old copy.+ ## What to install into the user's library Extract the part from the fetched design and strip what does not belong in a library item: pad nets,
skills/demo-first-run/SKILL.md+4@@ -23,6 +23,10 @@ The KiCad tour ran clean on John's laptop and the test box, then failed four dif | footprint beat took 6 minutes and closed every window | the footprint was brand new to KiCad's process-wide cache; the opener restarted KiCad MID-BEAT, twice, 128 s each | a new library item restarts the app during PREPARE, under the "preparing" caption, before any window is on screen; the opener never restarts when the editor did not even open | | footprint never loaded, editor showed "[no footprint loaded]" | the user's Footprint Editor had the Library Tree pane hidden, so the filter box did not exist | show the pane through the app's own View menu, then look again | | no beat verified in front | a minimized RustDesk and a shell popup sat at the top of the z-order | "in front" skips minimized windows, shell popups and our overlays |+| footprint failed on every run AFTER the first | the tour rewrote an identical footprint file each run; the newer mtime made KiCad's cache look stale | leave an identical file untouched; restart during prepare only when the file is newer than the running process |+| footprint still failed with the pane fix in | the pane fix covered one loader path of two, and the hidden control still "existed" | one shared helper for every loader; visible means IsWindowVisible |+| 3D board with bare MOSFET pads | the design's MOSFET bodies pointed at the author's disk; the viewer also held the pre-patch copy | drop dead bodies, attach KiCad's, reopen the board when the file is newer than pcbnew |+| the tour died twice for no reason | another thread was force-installing its own bridge build on the same box | one owner per box at a time; ask before installing where someone else is working | ## Rules
skills/demo-recording/SKILL.md+22@@ -66,6 +66,28 @@ restart anything but its own windows. wiki issue on the product page (`adom-wiki issue create <owner>/<slug> --file out.mp4`) for a tappable link that survives. +## A muted box: mix the narration in post, at true offsets++The office box may have to stay muted (John, 2026-09-05: colleagues hear it). Record anyway, run the tour+UNMUTED so its pacing follows the lines, and mix the same mp3s in afterwards at their true offsets: the+bridge records partAAt / partBAt / partBEndAt per beat on the box clock, the pup recorder's filename+carries its start epoch on the same clock (rec-desktop-<ms>.webm), and each prelude click is marked with+the recorder's `durationMs` right after the click. ffmpeg: one `adelay` per clip into `amix`. Verify the+alignment with two frames before the long encode (a frame at a mark must show what the mark says).++## Two cuts++1. **Full**: from two seconds before the dock-bar click to the end, everything mixed.+2. **Part B only**: the prelude segment, then each beat's [partBAt, partBEndAt] segment concatenated,+ each with its part B line at the segment start. The viewer never watches a load.++## The narrated prelude++Before Play the demo: dock bar opened (line: what the dock bar is), KiCad card clicked (line: what the+dashboard shows), then the line "I am about to click Play the demo, you can do the same, it runs live"+and the click, then hide the cursor. Close every webview tab but the wiki first, and dismiss any update+banner, so the prelude is the product and nothing else.+ ## The true user flow is what you record Start the recording, then do what a user does: open the dock bar in Hydrogen, click the app's card, click
skills/demo-windows/SKILL.md+16−15@@ -34,19 +34,11 @@ recorder HUD, the demo panel). Carry `minimized` and `image` through whatever ro parse ab's reply as it actually is: the direct API returns the payload unwrapped (top-level `windows`), older wrappers had output/data; accept all, or you silently fall back to a local list with no z at all. -## Sizes and slots (John, 2026-09-04)+## Size (John, 2026-09-05, superseding the 80% corner slots) -Editor and viewer windows: 80% x 80% of the primary monitor's WORK AREA (`desktop_list_monitors` gives-`workArea`; the payload is unwrapped too). Slots, anchored so each new window is visibly a fresh window:--| Beat | Window | Placement |-|---|---|---|-| 1 | part editor (symbol / sketch) | top-left |-| 2 | second part view (footprint / body) | top row, offset 15% right |-| 3 | part in 3D | top-right |-| 4 | whole design, abstract (schematic / assembly) | bottom-left |-| 5 | whole design, 2D (board / drawing) | bottom row, offset 15% right |-| 6 | whole design in 3D | bottom-right |+Every editor and viewer window: 98% of the primary monitor's WORK AREA (`desktop_list_monitors` gives+`workArea`; the payload is unwrapped), centred. The earlier 80% corner slots made the video busy; one big+centred window per beat reads cleanly, and the foreground note says which window it is. **The app's main window is never resized or centred.** "No user ever maximizes KiCad's first window"; leave it as the app opens it (John, 2026-09-05).@@ -62,6 +54,15 @@ geometry too. ## Hidden panes A user's editor may not look like yours. On arav-rog the Footprint Editor's Library Tree pane was hidden,-so the bridge typed a filter into a search box that did not exist and every load "failed". Before-navigating a tree or filter, check the control exists; if not, show the pane through the app's own View-menu (the KiCad plugin's `get_menu_ids` + `wm_command` on the right frame) and look again.+so the bridge typed a filter into a search box nobody could see and every load "failed", for three runs.+Two traps inside that one: wx HIDES a closed pane, so the control still EXISTS and "found" is not enough,+check `IsWindowVisible`; and a toggle is a toggle, so show the pane once per editor and then wait for the+control to become visible, never toggle again on the retry (that hid it straight back). Show it through+the app's own View menu (the KiCad plugin's `get_menu_ids` + `wm_command` on the right frame).++## Cursor hygiene++ab's glowing cursor rides every `desktop_click` and `desktop_hover` by default and stays until it+auto-hides. After the last click of a narrated prelude (Play the demo), call `desktop_cursor+{action:"hide"}` or the arrow sits on top of every window of the tour (John saw it in the first take).+The tour's own gestures use raw SendInput and never show it.