From passionfruit
Replace placeholder favicon and OG image with your brand assets. Supports uploading existing logos or generating new ones.
How this skill is triggered — by the user, by Claude, or both
Slash command
/passionfruit:brandThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill helps users replace the template's placeholder favicon and OG image with their own brand assets.
This skill helps users replace the template's placeholder favicon and OG image with their own brand assets.
/brand/onboard completesAsk using AskUserQuestion with these options:
"Let's set up your brand assets. Do you have a logo?"
Options:
Ask for the file path. Then:
public/favicon.svg. This is the preferred format — crisp at all sizes.<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="32" height="32">
<image href="data:image/png;base64,..." width="32" height="32"/>
</svg>
Base64-encode the image and embed it. Also suggest generating an SVG-native version using pnpm generate-image for better scaling.public/favicon.ico for legacy browsers: use sharp to convert the source to a 32x32 ICO, or inform the user they can use an online converter (realfavicongenerator.net). The SVG favicon covers all modern browsers.Ask: "Describe your brand briefly — what does your company do, and what style do you prefer? (minimal, bold, playful, corporate, etc.)"
Then generate:
pnpm generate-image "<prompt for a minimal icon suitable as a favicon, simple shapes, single subject, no text>" -o public/favicon-source.png --size 1024x1024
Remind the user: This requires OPENAI_API_KEY in .env. If missing, prompt them to add it.
After generation, create public/favicon.svg from the result (either use the PNG as a base64-embedded SVG, or ask the user to trace/simplify it for a proper SVG).
Move on. The template ships with a default passionfruit-themed favicon.
This is the image that appears when someone shares a link to the site on LinkedIn, Twitter/X, Slack, etc. There are two ways to make one — ask the user via AskUserQuestion:
"How should we create your social sharing image?"
Options:
site.name + site.tagline + accent color + favicon into a clean 1200×630 PNG. Runs in under a second, no API key needed, produces one image per locale.OPENAI_API_KEY.public/og-default-{de,en}.png.Run:
pnpm generate-og
This writes public/og-default-de.png and public/og-default-en.png from the project's i18n strings (site.name, site.tagline), the accent color in src/styles/global.css, and the logo in public/favicon.svg. If the user has run /onboard (so the i18n + accent are theirs) and the favicon is their logo (Step 1 above), the result is on-brand without any prompting.
For per-locale regeneration: pnpm generate-og --lang de or --lang en.
Optional background photo. Drop a 1200×630-ish image at src/assets/og/bg.png before running and the generator composites it full-cover behind the text (a left-anchored scrim keeps the title legible regardless of the photo's brightness). Best results when the photo has a darker left third — Satori text sits on the left. Use pnpm generate-image to produce a fitting photo first, e.g.:
pnpm generate-image "<describe a banner-style photo with empty/dark left third, no text>" -o src/assets/og/bg.png --size 1536x1024
pnpm generate-og
No code changes needed — bg.png absence falls back to the flat surface look.
Ask: "Describe what you'd like the image to convey — visual style, mood, key elements."
Generate once, then copy to the second locale — gpt-image-2 is non-deterministic, so two separate calls with the same prompt produce two visually different images. We want DE and EN visitors to see the same artistic image.
pnpm generate-image "<prompt including company name, brand style, professional look>" -o public/og-default-de.png --size 1536x1024
cp public/og-default-de.png public/og-default-en.png
Guidelines for the prompt:
Remind the user: This requires OPENAI_API_KEY in .env.
Move on. The current public/og-default-{de,en}.png files stay as they are.
After assets are created, verify:
Favicon: public/favicon.svg exists and is referenced in src/layouts/BaseLayout.astro at:
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
This is already configured in the template (line 94). No changes needed unless the user wants a different path.
OG image: public/og-default-de.png AND public/og-default-en.png exist. src/layouts/BaseLayout.astro already picks the locale-specific file:
const defaultOgImage = `/og-default-${lang}.png`;
No changes needed unless the user wants a different path. Individual pages can still override via the ogImage prop.
Run pnpm build to confirm no broken asset references.
"Your brand assets are set up:
- Favicon:
public/favicon.svg— appears in browser tabs- OG images:
public/og-default-de.pngandpublic/og-default-en.png— appear when your site is shared on social media (locale-aware: DE pages get the DE image, EN pages get the EN image)Individual pages can override the OG image by passing
ogImageto BaseLayout. To regenerate the branded template later, runpnpm generate-og. To run the full brand flow again, use/brand."
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
npx claudepluginhub passion4it-gmbh/passionfruit --plugin passionfruit