plugins/og-image/skills/og-image/SKILL.md
This skill should be used when the user wants to generate Open Graph (OG) images for Nuxt pages. These images act as placeholders when services use the opengraph protocol to render a preview on another service, such as the preview for github rendered on Slack when you post a link. While generally for Nuxt pages, it can be used to similarly generate any image using the html2png.dev API. It discovers pages from app/pages/, identifies which are missing OG images (by analyzing the tags), generates beautiful HTML designs, converts them to PNG via html2png.dev API, and saves them to public/og-images/. Trigger phrases: - generate og image - create og images - make social preview - og-image - generate image - opengraph meta tags
npx skillsauth add nsheaps/ai-mktpl opengraph-imageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate Open Graph images for Nuxt pages with consistent, high-quality designs.
If image generation request is not for a specific image, skip to step 4 to generate a generic blog OG image without concern for existing/missing pages or images.
Scan app/pages/ directory for Vue files to identify available pages:
find app/pages -name "*.vue" -type f
Filtering rules:
[ brackets (e.g., [...slug].vue, [category].vue)blog/ directory (they have separate OG handling)For each discovered page, derive the slug and check if OG image exists:
| Page Path | Slug | OG Image Path |
| ----------------------------- | --------- | ------------------------------ |
| app/pages/index.vue | index | public/og-images/index.png |
| app/pages/about.vue | about | public/og-images/about.png |
| app/pages/pricing/index.vue | pricing | public/og-images/pricing.png |
| app/pages/blog/index.vue | blog | public/og-images/blog.png |
Present the list of pages with missing OG images to the user and ask which one to generate.
Read the selected page's Vue file to understand:
Also check for docs/design-system.md if present for brand guidelines (colors, fonts, style).
Create a single-file HTML document optimized for 1200x630 dimensions:
Template structure:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=1200, height=630" />
<script src="https://cdn.tailwindcss.com"></script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap"
rel="stylesheet"
/>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
}
</style>
</head>
<body>
<div style="width: 1200px; height: 630px;" class="...">
<!-- OG image content -->
</div>
</body>
</html>
Design guidelines:
Save HTML to: keep/og-images/<slug>.html
Ensure the keep/og-images/ directory exists before saving.
Use the html2png.dev API to convert the HTML:
curl -X POST "https://html2png.dev/api/convert?width=1200&height=630&format=png&deviceScaleFactor=2" \
-H "Content-Type: text/html" \
--data-binary u/keep/og-images/<slug>.html
The API returns JSON with a url field containing the generated image URL.
Download the image from the returned URL. Be sure to save the source html and the generated image in a directory appropriate to preserve and iterate on it. If generated as part of a project, be sure to save it in that project, following any existing directory structure patterns. Ensure any needed directories exist before saving.
Inform the user:
project/
├── keep/
│ └── og-images/
│ └── <slug>.html # Preserved HTML source
├── public/
│ └── og-images/
│ └── <slug>.png # Generated OG images
tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su