원클릭으로
favicon
Generate favicons and app icons for Next.js projects. Creates all required sizes, formats, and configures metadata.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Generate favicons and app icons for Next.js projects. Creates all required sizes, formats, and configures metadata.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Setup domains in Cloudflare with DNS for Clerk, Vercel, and email routing. Use when adding new domains, configuring DNS records, or setting up email redirects.
Help with AbacatePay payment integration in Next.js projects. Use when implementing PIX payments, managing subscriptions, handling webhooks, or debugging payment flows. Covers SDK usage, webhook verification, and billing management for Brazilian SaaS applications.
Generate compelling marketing copy using the Elevated Direct Response framework. Use this skill when creating landing pages, headlines, email campaigns, ad copy, CTAs, value propositions, or any persuasive marketing content. Applies contrarian educator tone and direct response principles.
Implement PostHog analytics, feature flags, and session replay for Next.js apps. Use this skill for event tracking, user identification, A/B testing, experiments, and session recording setup. Also handles analytics reporting (funnel analysis, retention, SEO) with Google Search Console integration.
Implement technical SEO infrastructure for Next.js apps. Use this skill when setting up sitemaps, robots.txt, meta tags, OpenGraph, structured data (JSON-LD), canonical URLs, and other technical SEO elements. Covers Next.js 15/16 App Router patterns and 2025 best practices.
Help with Stripe payment integration in Next.js projects. Use when implementing checkout flows, subscriptions, webhooks, customer portal, or debugging payment issues. Covers Stripe SDK usage, webhook verification, and subscription management.
| name | favicon |
| description | Generate favicons and app icons for Next.js projects. Creates all required sizes, formats, and configures metadata. |
| allowed-tools | Read, Glob, Grep, Write, Edit, Bash, WebFetch |
Generate complete favicon sets for Next.js projects.
IMPORTANT: Before asking the user anything, scan the codebase to extract:
# Check these files in order:
// Read package.json for name and description
{
"name": "my-app", // App name
"description": "..." // App description
}
// Look for metadata export
export const metadata: Metadata = {
title: "App Title", // App name
description: "...", // App description
};
// Or metadataBase, applicationName
# App Name <- Extract from H1
Description paragraph <- Extract first paragraph
// Look for custom colors in theme.extend.colors
theme: {
extend: {
colors: {
primary: "#6366f1", // Brand color
brand: { ... }
}
}
}
:root {
--primary: #6366f1; /* Brand color */
--brand-color: ...;
}
# Check if icons already exist
public/favicon.ico
public/apple-touch-icon.png
app/icon.tsx
app/icon.png
After scanning, present what was found:
I found the following from your codebase:
App name: Striggo
Description: A study platform for professional certification exams
Brand color: #8b5cf6 (from Tailwind config)
Existing icons: None found
Should I generate a favicon based on this? Or would you like to customize?
Only ask questions if:
Based on user input, choose one of these approaches:
Best for: Professional SaaS apps, clean minimal branding.
// app/icon.tsx
import { ImageResponse } from "next/og";
export const runtime = "edge";
export const contentType = "image/png";
export const size = { width: 32, height: 32 };
export default function Icon() {
return new ImageResponse(
(
<div
style={{
// Use app's primary brand color
background: "linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%)",
width: "100%",
height: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
borderRadius: 8,
color: "white",
fontSize: 20,
fontWeight: 700,
fontFamily: "system-ui, sans-serif",
}}
>
{/* First letter or initials of app name */}
S
</div>
),
{ ...size }
);
}
Create matching apple-icon.tsx:
// app/apple-icon.tsx
import { ImageResponse } from "next/og";
export const runtime = "edge";
export const contentType = "image/png";
export const size = { width: 180, height: 180 };
export default function AppleIcon() {
return new ImageResponse(
(
<div
style={{
background: "linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%)",
width: "100%",
height: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
borderRadius: 40,
color: "white",
fontSize: 100,
fontWeight: 700,
fontFamily: "system-ui, sans-serif",
}}
>
S
</div>
),
{ ...size }
);
}
Best for: Fun apps, MVPs, quick prototypes.
// app/icon.tsx
import { ImageResponse } from "next/og";
export const runtime = "edge";
export const contentType = "image/png";
export const size = { width: 32, height: 32 };
export default function Icon() {
return new ImageResponse(
(
<div
style={{
background: "#f8fafc",
width: "100%",
height: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
borderRadius: 6,
fontSize: 24,
}}
>
{/* Choose emoji that represents the app */}
🚀
</div>
),
{ ...size }
);
}
Best for: Technical apps, developer tools.
// app/icon.tsx
import { ImageResponse } from "next/og";
export const runtime = "edge";
export const contentType = "image/png";
export const size = { width: 32, height: 32 };
export default function Icon() {
return new ImageResponse(
(
<div
style={{
background: "#0f172a",
width: "100%",
height: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
borderRadius: 6,
}}
>
{/* Simple geometric shape or symbol */}
<svg
width="20"
height="20"
viewBox="0 0 24 24"
fill="none"
stroke="white"
strokeWidth="2"
>
<path d="M12 2L2 7l10 5 10-5-10-5z" />
<path d="M2 17l10 5 10-5" />
<path d="M2 12l10 5 10-5" />
</svg>
</div>
),
{ ...size }
);
}
| App Type | Style | Colors | Icon Ideas |
|---|---|---|---|
| Finance/Banking | Minimal, professional | Blue, green, dark | Letter, shield, chart |
| Productivity | Clean, modern | Purple, blue | Checkmark, layers, grid |
| Social/Community | Friendly, warm | Orange, pink | Heart, people, chat |
| Developer Tools | Technical, dark | Dark gray, cyan | Terminal, brackets, code |
| E-commerce | Bold, trustworthy | Orange, blue | Cart, bag, tag |
| Health/Fitness | Energetic, fresh | Green, teal | Heart, leaf, pulse |
| Education | Approachable | Blue, yellow | Book, cap, lightbulb |
Based on app purpose, suggest colors:
const colorSchemes = {
professional: "linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%)",
creative: "linear-gradient(135deg, #ec4899 0%, #8b5cf6 100%)",
growth: "linear-gradient(135deg, #059669 0%, #10b981 100%)",
energy: "linear-gradient(135deg, #ea580c 0%, #f59e0b 100%)",
trust: "linear-gradient(135deg, #0284c7 0%, #06b6d4 100%)",
minimal: "#0f172a", // Solid dark
light: "#f8fafc", // Solid light with colored icon
};
bun add sharp
// scripts/generate-favicons.ts
import sharp from "sharp";
import { join } from "path";
const SOURCE = "source-icon.png";
const OUTPUT_DIR = "public";
const sizes = [
{ name: "favicon-16x16.png", size: 16 },
{ name: "favicon-32x32.png", size: 32 },
{ name: "apple-touch-icon.png", size: 180 },
{ name: "android-chrome-192x192.png", size: 192 },
{ name: "android-chrome-512x512.png", size: 512 },
];
async function generateFavicons() {
for (const { name, size } of sizes) {
await sharp(SOURCE)
.resize(size, size)
.png()
.toFile(join(OUTPUT_DIR, name));
console.log(`Generated: ${name}`);
}
// Create ICO
await sharp(SOURCE)
.resize(32, 32)
.toFile(join(OUTPUT_DIR, "favicon.ico"));
}
generateFavicons();
brew install imagemagick
# Generate all sizes
convert source.png -resize 16x16 public/favicon-16x16.png
convert source.png -resize 32x32 public/favicon-32x32.png
convert source.png -resize 180x180 public/apple-touch-icon.png
convert source.png -resize 192x192 public/android-chrome-192x192.png
convert source.png -resize 512x512 public/android-chrome-512x512.png
convert source.png -resize 32x32 -define icon:auto-resize=32,16 public/favicon.ico
// public/site.webmanifest
{
"name": "APP_NAME",
"short_name": "APP_SHORT",
"description": "APP_DESCRIPTION",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#PRIMARY_COLOR",
"background_color": "#ffffff",
"display": "standalone",
"start_url": "/"
}
Or use dynamic manifest:
// app/manifest.ts
import type { MetadataRoute } from "next";
export default function manifest(): MetadataRoute.Manifest {
return {
name: "App Name",
short_name: "App",
description: "App description",
start_url: "/",
display: "standalone",
background_color: "#ffffff",
theme_color: "#6366f1",
icons: [
{
src: "/android-chrome-192x192.png",
sizes: "192x192",
type: "image/png",
},
{
src: "/android-chrome-512x512.png",
sizes: "512x512",
type: "image/png",
},
],
};
}
// app/layout.tsx
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "App Name",
description: "App description",
icons: {
icon: [
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
],
apple: [
{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" },
],
},
manifest: "/site.webmanifest",
};
When running /favicon:
# Read these files
cat package.json
cat app/layout.tsx
cat README.md
cat tailwind.config.ts
cat app/globals.css
ls public/favicon* app/icon* 2>/dev/null
I scanned your codebase and found:
App name: Striggo
Description: A study platform for professional certification exams
Brand color: #8b5cf6 (from tailwind.config.ts)
Existing icons: None
I'll generate a favicon with:
- Letter "S" on purple gradient background
- Professional style (matching education/learning apps)
Proceed with this? Or customize (name/color/style)?
I couldn't detect a brand color. What color should I use?
1. Purple (education/learning)
2. Blue (trust/professional)
3. Green (growth/success)
4. Custom hex code
> 1
app/icon.tsx - Dynamic 32x32 faviconapp/apple-icon.tsx - Dynamic 180x180 Apple iconapp/manifest.ts - PWA manifestapp/layout.tsx with theme colorsapp/
├── icon.tsx # 32x32 favicon (generated)
├── apple-icon.tsx # 180x180 Apple icon (generated)
└── manifest.ts # PWA manifest
public/
├── favicon.ico
├── favicon-16x16.png
├── favicon-32x32.png
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
└── site.webmanifest
| Issue | Solution |
|---|---|
| Icon not updating | Clear cache, restart dev server |
| Apple icon not showing | Must be exactly 180x180 PNG |
| Dynamic icon 500 error | Check ImageResponse syntax |
| Emoji not rendering | Use system emoji font |
| Gradient looks wrong | Use standard CSS gradient syntax |