add-api-route
Add a new JobPilot API route or module the standard way - contracts schema, controller, service, response schema, optional web hook. Use for "add an endpoint",…
Film, cut, and deliver a short teaser/demo video of any app by driving it with Playwright and editing with ffmpeg - storyboard, authenticated capture, PII review, animated title cards, MP4 + GIF. Use for "make a teaser", "record a demo video", "product launch video", "screen
$ npx -y skills add suxrobGM/jobpilot --skill teaser-video --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/teaser-videoContext preview
The summary Claude sees to decide when to auto-load this skill.
Film, cut, and deliver a short teaser/demo video of any app by driving it with Playwright and editing with ffmpeg - storyboard, authenticated capture, PII review, animated title cards, MP4 + GIF. Use for "make a teaser", "record a demo video", "product launch video", "screen
name: teaser-video description: Film, cut, and deliver a short teaser/demo video of any app by driving it with Playwright and editing with ffmpeg - storyboard, authenticated capture, PII review, animated title cards, MP4 + GIF. Use for "make a teaser", "record a demo video", "product launch video", "screen recording for the README". user-invocable: true version: 1.0.0 updated: 2026-08-01 portable: true requires: - node >=24 - npm packages (installed into a scratch dir, not the project): playwright, ffmpeg-static, pngjs - a Chromium/Chrome channel available to Playwright files: - SKILL.md - reference/package.json - reference/login.js - reference/scout.js - reference/rig.js - reference/build.js - reference/cards.js - reference/jitter.js
Produce a launch-quality teaser (~30-45s) of a running app: storyboard it, film it by driving the real UI, cut it with ffmpeg, and hand back an MP4 plus a GIF for the README.
The output must look like a product video, not a screen recording. The difference is direction - staging, framing, and rhythm - not resolution.
Reference implementations live in `reference/`; they are working ESM modules, not pseudocode. Set up in a scratch directory - never inside the project:
cp -r <skill>/reference/* "$SCRATCH/" && cd "$SCRATCH" && npm install export TEASER_BASE_URL="https://the-app.example.com"
`reference/package.json` declares `"type": "module"` and the three dependencies. Every script reads `TEASER_BASE_URL`, so nothing is hardcoded to one app.
**1. Never trigger real-world side effects without explicit, itemized consent.**
Filming a real app means clicking real buttons. Some of those send email, post publicly, charge money, or submit forms to third parties. Before you touch the app:
agreement on the count.
dry-run, a confirmation gate you can film and then decline).
There is no such thing as a read-only probe against a live system. A "diagnostic" click that lands in an already-running session fires for real. If you are debugging why an action did not work, assume your next click *will* work, and be ready for it.
If something fires that you did not intend: stop the process at its source immediately (kill the session/worker, not just the UI button, which may not take effect), verify the stopped state by reading it back, and tell the user plainly in your final message - count included.
**2. Assume every frame is public and full of PII.**
Real accounts carry names, emails, addresses, and documents. Decide the policy with the user up front:
persistent chrome (sidebars, avatars, account menus) at the ffmpeg stage.
cards *before* the camera rolls. Never film it and hope to cut around it.
Review every frame of the final cut at full resolution before delivering. Not the contact sheet - the frames.
Take authenticated screenshots of every candidate screen first (`reference/scout.js`). Look at them. Then write a storyboard table: beat, shot, what the viewer should *feel*, and length. A shot with no assigned job gets cut before it is filmed.
Arc that works: tension (the problem) → reveal (the product) → proof (it really does the thing) → scale (the results) → trust (where it runs) → close.
Note in the storyboard which screens hold PII and which are safe.
Curate before rolling, never after:
recognizable names, non-zero counts. Never film a spinner, an empty state, or a half-rendered chart.
position) via `localStorage` in an init script or a pre-roll `page.evaluate`.
Use **CDP screencast** (`Page.startScreencast`), not screen recording. It captures the page off-screen at ~100fps, so nothing the user is doing appears in frame and the machine stays usable. Playwright drives; CDP films. `reference/rig.js` implements it.
(`cameraScroll`), never from a filter. See the zoompan warning below.
glides with easing and dips on press, or hide it. No idle drift.
**Filming an external window** (a browser the app itself opens, a desktop app) needs OS capture - `gdigrab`/`x11grab`/`avfoundation` (`recordDesktop` in the rig). This captures *everything on screen*, including the user's own work. Warn the user, ask them to step away, and review the result frame by frame; delete it if it caught anything private.
Animated HTML/CSS filmed in-browser, not static images. Inject the card markup into a blank page **on the app's own origin** so its web fonts and palette resolve, then screencast it. Pull the real display font off the live page (`getComputedStyle`) and pin a known-good mono stack rather than sniffing one.
Match the app's motion language (its own easing curves and durations). Load the `frontend-design` skill before designing them if the project has no established card style.
`reference/build.js` normalizes each segment to a common size/fps, then crossfades the chain. Keep cuts every ~
An AI agent that applies to jobs for you, on the Claude or Codex subscription you already have.
Repo: suxrobGM/jobpilot
Add a new JobPilot API route or module the standard way - contracts schema, controller, service, response schema, optional web hook. Use for "add an endpoint",…
Review and clean up the given file(s)/folder(s)/module(s): rate organization, find dead code, duplication, coupling, over-engineering, deep nesting, structural…
Create and apply a Prisma migration safely against the remote (tunneled) PostgreSQL. Use for schema changes - "create a migration", "apply migrations", "add a…
Add knip to a TypeScript project and use it to remove dead exports, collapse pass-through barrels, and narrow every export to what another file actually…
Bump the unified JobPilot version (host + plugin), update the changelog, commit, and tag a new release
Rebuild the .NET terminal host, restart it, and wait for /healthz. Use after any C# change under apps/terminal, or when asked to "restart the terminal host".