
Ui Demo
Record scripted WebM walkthroughs of a web app with Playwright when you need onboarding, docs, or stakeholder demo videos without guessing selectors blind.
Overview
UI Demo is an agent skill most often used in Build (also Grow, Launch) that records polished WebM demo videos of web apps with Playwright using a mandatory discover-rehearse-record workflow.
Install
npx skills add https://github.com/affaan-m/everything-claude-code --skill ui-demoWhat is this skill?
- Three-phase workflow—Discover, Rehearse, Record—with a hard rule to never skip straight to recording
- Playwright capture with injected cursor overlay, natural pacing, and WebM output
- Discover phase dumps real inputs, selects, textareas, and buttons per page before scripting
- Targets demo, walkthrough, screen recording, and tutorial requests for web applications
- Suited for documentation, onboarding flows, and stakeholder feature showcases
- Mandatory three-phase process: Discover, Rehearse, Record
- Outputs WebM videos with visible cursor overlay via Playwright
Adoption & trust: 3.3k installs on skills.sh; 210k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need a trustworthy UI walkthrough video but ad-hoc recording breaks when selectors, custom widgets, or pacing do not match what you assumed about the page.
Who is it for?
Solo builders shipping a web app who want repeatable, element-aware demo videos for docs, onboarding, or feature announcements.
Skip if: Native-only mobile apps, static screenshot needs, or desktop software outside a browser without adapting the Playwright flow yourself.
When should I use this skill?
User asks for a demo video, screen recording, walkthrough, or tutorial video of a web application, or wants to showcase a feature for documentation, onboarding, or stakeholder presentation.
What do I get? / Deliverables
You get a rehearsed Playwright script and a WebM demo with cursor overlay and stable pacing, ready to embed in docs, onboarding, or launch materials.
- WebM demo video with cursor overlay and intentional pacing
- Page-aware demo script informed by discovered interactive elements
- Rehearsed flow timing before the final recorded take
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Build/docs because the primary output is product documentation and onboarding artifacts that explain how the shipped UI works. Docs is where solo builders produce explainers and tutorials; this skill automates polished screen recordings for those materials.
Where it fits
After shipping a settings screen, record a paced WebM tour for your internal README and customer help center.
Publish a feature highlight reel on your blog or changelog without re-filming every time copy tweaks move a button.
Hand investors or beta users a crisp workflow video that shows the core loop instead of a live-only demo call.
Capture a prototype path for async feedback once the clickable UI is stable enough to script.
How it compares
A structured Playwright demo workflow with page discovery—not a one-shot screen recorder or a design mockup skill.
Common Questions / FAQ
Who is ui-demo for?
Indie and solo builders using Claude Code, Cursor, or similar agents who document or sell a web product and need professional screen recordings without manual retakes for every UI change.
When should I use ui-demo?
Use it during Build/docs when writing product guides, during Grow/content for tutorial or feature videos, or near Launch/distribution when you need a stakeholder walkthrough—always after you can load the real pages in a browser.
Is ui-demo safe to install?
Treat it like any skill that drives a browser and writes files: review what URLs it hits and where videos are saved, and check the Security Audits panel on this Prism page before enabling it in sensitive environments.
SKILL.md
READMESKILL.md - Ui Demo
# UI Demo Video Recorder Record polished demo videos of web applications using Playwright's video recording with an injected cursor overlay, natural pacing, and storytelling flow. ## When to Use - User asks for a "demo video", "screen recording", "walkthrough", or "tutorial" - User wants to showcase a feature or workflow visually - User needs a video for documentation, onboarding, or stakeholder presentation ## Three-Phase Process Every demo goes through three phases: **Discover -> Rehearse -> Record**. Never skip straight to recording. --- ## Phase 1: Discover Before writing any script, explore the target pages to understand what is actually there. ### Why You cannot script what you have not seen. Fields may be `<input>` not `<textarea>`, dropdowns may be custom components not `<select>`, and comment boxes may support `@mentions` or `#tags`. Assumptions break recordings silently. ### How Navigate to each page in the flow and dump its interactive elements: ```javascript // Run this for each page in the flow BEFORE writing the demo script const fields = await page.evaluate(() => { const els = []; document.querySelectorAll('input, select, textarea, button, [contenteditable]').forEach(el => { if (el.offsetParent !== null) { els.push({ tag: el.tagName, type: el.type || '', name: el.name || '', placeholder: el.placeholder || '', text: el.textContent?.trim().substring(0, 40) || '', contentEditable: el.contentEditable === 'true', role: el.getAttribute('role') || '', }); } }); return els; }); console.log(JSON.stringify(fields, null, 2)); ``` ### What to look for - **Form fields**: Are they `<select>`, `<input>`, custom dropdowns, or comboboxes? - **Select options**: Dump option values AND text. Placeholders often have `value="0"` or `value=""` which looks non-empty. Use `Array.from(el.options).map(o => ({ value: o.value, text: o.text }))`. Skip options where text includes "Select" or value is `"0"`. - **Rich text**: Does the comment box support `@mentions`, `#tags`, markdown, or emoji? Check placeholder text. - **Required fields**: Which fields block form submission? Check `required`, `*` in labels, and try submitting empty to see validation errors. - **Dynamic content**: Do fields appear after other fields are filled? - **Button labels**: Exact text such as `"Submit"`, `"Submit Request"`, or `"Send"`. - **Table column headers**: For table-driven modals, map each `input[type="number"]` to its column header instead of assuming all numeric inputs mean the same thing. ### Output A field map for each page, used to write correct selectors in the script. Example: ```text /purchase-requests/new: - Budget Code: <select> (first select on page, 4 options) - Desired Delivery: <input type="date"> - Context: <textarea> (not input) - BOM table: inline-editable cells with span.cursor-pointer -> input pattern - Submit: <button> text="Submit" /purchase-requests/N (detail): - Comment: <input placeholder="Type a message..."> supports @user and #PR tags - Send: <button> text="Send" (disabled until input has content) ``` --- ## Phase 2: Rehearse Run through all steps without recording. Verify every selector resolves. ### Why Silent selector failures are the main reason demo recordings break. Rehearsal catches them before you waste a recording. ### How Use `ensureVisible`, a wrapper that logs and fails loudly: ```javascript async function ensureVisible(page, locator, label) { const el = typeof locator === 'string' ? page.locator(locator).first() : locator; const visible = await el.isVisible().catch(() => false); if (!visible) { const msg =