Skip to content

mk:showcase

What This Skill Does

Produces a self-contained, polished HTML page (with optional screenshots) from a user-supplied mission and explicit artifact paths. Output lands in assets/showcase/<mission-slug>/: index.html, content.md, and optionally images/.

Publishing is local-only by default; if a publish target is not configured, the skill fails clearly rather than guessing a destination.

When to Use

Triggers:

  • "make a showcase page for X", "create a demo page", "package this as a shareable HTML"
  • Preparing a visual summary of completed work for social posting or portfolio
  • Presenting a topic as a polished, scrollable HTML deliverable with screenshots

Anti-triggers:

  • Rendering a plan as HTML — use mk:visual-plan
  • Generic code/diagram/diff visuals or explanations — use mk:preview
  • Plan critique or scope review — use mk:plan-ceo-review
  • Long-form markdown reading — use mk:markdown-reader

Usage

/mk:showcase "Topic or mission description"
/mk:showcase "Mission" path/to/artifact1.md path/to/artifact2.json
/mk:showcase "Mission" --languages en --no-screenshots
/mk:showcase "Mission" --no-publish

Key Flags

FlagEffect
--no-screenshotsSkip Puppeteer capture; report local HTML path only
--no-publishKeep output local (default)
--languages en|vi|en,viSet language mode for generated content

Output

assets/showcase/<mission-slug>/
├── index.html      # Self-contained HTML (inline CSS + JS)
├── content.md      # Raw content with citations
└── images/         # Screenshots per section × ratio (if enabled)
    ├── horizontal-hero.png
    ├── vertical-hero.png
    └── square-hero.png

Screenshots (Optional)

Screenshots require Puppeteer:

bash
cd .claude/skills/showcase/scripts && npm install

The capture script blocks external HTTP requests when rendering local file:// HTML, preventing data exfiltration from generated content. Screenshots are optional — --no-screenshots skips this step entirely.

Preferences

Workflow preferences persist in ${CLAUDE_PLUGIN_DATA}/showcase/preferences.json:

bash
# Read current preferences
node .claude/skills/showcase/scripts/preferences.js get

# Disable screenshots and publish by default
node .claude/skills/showcase/scripts/preferences.js set --no-screenshots --no-publish

# English-only content
node .claude/skills/showcase/scripts/preferences.js set --languages en

# Reset to defaults
node .claude/skills/showcase/scripts/preferences.js reset

CLI flags override stored preferences for the current run.

Security

  • No auto-scan — only reads artifact paths you supply explicitly; never searches the repo
  • Artifact path guard — rejects absolute paths outside the project root and .. traversal
  • HTML-entity-encoding — all user-supplied strings are encoded before template insertion
  • DATA boundary — artifact content is read as data; embedded instructions are never executed
  • Publish fail-closed — without a configured publish path the skill prints "no toolkit publishing path configured" and stops
  • Screenshot request guard — external HTTP/HTTPS requests blocked during Puppeteer capture of local HTML

Gotchas

  • No auto-scan: supply mission text and artifact paths explicitly; the skill does not search the repo
  • Screenshots opt-in: Puppeteer requires npm install in .claude/skills/showcase/scripts/; headless Chrome may fail in sandboxed CI — use --no-screenshots there
  • Publish is local-only by default: configure a publish path before requesting publish; a missing path stops the skill (fail-closed)
  • Bilingual mode (["vi", "en"]) adds a visible language toggle to the page; English-only removes it
  • Mission slug is derived from the first words of the mission text (lowercase, hyphenated)

Workflow Position

  • Phase: on-demand (Phase 5 / post-ship packaging)
  • Follows: completed feature work, research, or content the user wants to present
  • Precedes: sharing, publishing (when configured)

Released under the MIT License.