product-showcase by jezweb/claude-skills
npx skills add https://github.com/jezweb/claude-skills --skill product-showcase生成一个真正教会人们网络应用功能的营销网站。不仅仅是一个英雄区和功能网格——而是一个多页面的网站,包含真实的截图、工作流程的动画 GIF 演示、功能深度解析,以及从“这是什么”到“具体如何运作”的渐进式深度展示。
对于复杂的应用程序、智能代理 AI 工具以及任何静态截图无法传达其价值的应用来说,这尤其有价值。
| 深度 | 输出 | 耗时 |
|---|---|---|
| 快速 | 单页面——英雄区、功能、行动号召。与之前相同。 | 15-20 分钟 |
| 标准 | 多页面网站——主页、功能页面、带截图的“工作原理”页面。 | 1-2 小时 |
| 详尽 | 综合性网站——主页、每个功能的独立页面、动画 GIF 演示、使用案例、对比页面、文档式演示。 | 3-6 小时 |
默认:标准
开始之前,检测可用的浏览器工具:
mcp__claude-in-chrome__*) —— 首选用于需要身份验证的应用mcp__plugin_playwright_playwright__*) —— 用于公开应用广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 字段 | 必需 | 示例 |
|---|---|---|
| 应用 URL | 是 | https://app.example.com 或 http://localhost:5173 |
| 应用名称 | 是 | "Acme CRM" |
| 标语 | 否 | "不打扰你的 CRM" |
| 目标受众 | 否 | "小企业主" |
| 定价信息 | 否 | 免费版,专业版 $29/月 |
| 行动号召文本 + URL | 否 | "开始免费试用" → 注册页面 |
| 用户评价 | 否 | 用户提供或跳过该部分 |
浏览应用并捕捉其故事:
浏览每个主要部分:
找到主要的工作流程(用户最常做的事情):
为功能网格,捕捉聚焦的截图:
如果应用有深色模式,截取英雄图像和 2-3 个关键屏幕在亮色和深色模式下的截图。使用视觉效果最好的模式作为英雄图像,在“也支持深色模式”部分或并排对比中展示另一种模式。
不要仅仅列出功能。对于每一个,回答:用户为什么要在乎?
一个 HTML 文件:英雄区 + 功能网格 + 行动号召。用于 MVP 和快速营销。
showcase/
├── index.html # 主页——英雄区、概述、功能亮点、行动号召
├── features.html # 所有功能,带截图和描述
├── how-it-works.html # 带截图的逐步工作流程演示
├── screenshots/ # 所有捕捉的图像
│ ├── hero.png
│ ├── feature-*.png
│ ├── workflow-step-*.png
│ └── *.gif # 动画演示
└── styles.css # 共享样式(或内联的 Tailwind CDN)
主页:带有动画 GIF 或关键截图的英雄区,3-4 个功能亮点(不是所有功能——只是最好的),“工作原理”摘要(3 个步骤),行动号召。
功能页面:每个功能都配有真实截图和以利益为中心的描述。如果有 6 个以上功能,按类别分组。每个功能都有足够的空间来实际解释它的作用。
工作原理页面:将主要工作流程作为逐步视觉指南。每个步骤都有截图(或动画 GIF)、标题和 2-3 句话。这个页面回答了“好吧,但实际使用起来是什么样子的?”
showcase/
├── index.html # 主页——英雄区、概述、价值主张
├── features/
│ ├── index.html # 功能概述网格
│ ├── [feature-1].html # 深度解析:每个主要功能一个页面
│ ├── [feature-2].html # 每个页面都包含截图、GIF、使用案例
│ └── [feature-n].html
├── how-it-works.html # 完整的工作流程演示
├── use-cases/
│ ├── [use-case-1].html # 场景:"...的一天"
│ └── [use-case-2].html # 场景:"当新客户来电时..."
├── compare.html # "为什么选择 [应用] 而不是替代品"(可选)
├── screenshots/
│ ├── hero.png
│ ├── feature-*/ # 每个功能的截图集
│ └── workflows/ # 动画 GIF
└── styles.css
每个功能的深度解析页面:每个主要功能都有自己的页面,包含:
使用案例页面:以故事驱动的页面,展示应用在真实场景中的应用:
对比页面(可选):"为什么选择 [应用] 而不是 [替代品]"——诚实的对比,而不是营销废话。功能对比表、关键差异点、最适合谁。
静态截图无法传达工作流程。对于关键功能,捕捉展示实际交互的动画 GIF:
如何捕捉(使用 Playwright 或 Chrome MCP):
生成 GIF(Python 脚本):
from PIL import Image
import glob
frames = []
for f in sorted(glob.glob('.jez/screenshots/workflow-*.png')):
frames.append(Image.open(f))
frames[0].save('showcase/screenshots/workflows/create-client.gif',
save_all=True, append_images=frames[1:],
duration=500, loop=0) # 每帧 500 毫秒
动画化什么:
GIF 指南:
在 HTML 中显示:
<div class="browser-frame">
<div class="browser-frame-bar">
<span class="browser-frame-dot"></span>
<span class="browser-frame-dot"></span>
<span class="browser-frame-dot"></span>
</div>
<img src="screenshots/workflows/create-client.gif"
alt="3 次点击创建新客户"
loading="lazy" width="640" height="360">
</div>
智能代理应用尤其难以营销,因为其价值是不可见的——AI 完成了用户从未看到的工作。标准截图显示的是聊天界面。这并不吸引人。
适用于智能代理应用的有效模式:
| 模式 | 展示内容 | 示例 |
|---|---|---|
| 前后对比 | 用户过去手动操作 vs 代理现在自动操作 | "过去:从 3 个系统复制粘贴。现在:代理在后台完成。" |
| 时间线 | 随时间发生的事情——展示代理在数小时/数天内的工作 | "上午 8 点:代理检查收件箱。上午 9 点:分类 47 封邮件。上午 10 点:标记 3 封紧急邮件。" |
| 成果展示 | 跳过过程,展示输出 | "代理挖掘了 1,200 封邮件 → 89 个客户,340 个联系人,2,100 条知识事实" |
| 并排对比 | 将代理的工作与人类本应完成的工作并排展示 | 分屏:左侧是原始邮件,右侧是提取的结构化数据 |
| 神奇时刻 GIF | 最令人印象深刻的事情的动画 | 用户提问 → 代理搜索知识 → 返回带来源的答案 |
智能代理应用的文案技巧:
截图使用 CSS 在浏览器框架模拟中展示:
.browser-frame {
border-radius: 8px;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.1);
}
.browser-frame-bar {
background: #f1f5f9;
padding: 8px 12px;
display: flex;
gap: 6px;
}
.browser-frame-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: #e2e8f0;
}
这为截图提供了精致的“浏览器中的应用”外观,而无需编辑图像。
多页面网站需要一致的导航:
<nav>
<a href="/">主页</a>
<a href="/features/">功能</a>
<a href="/how-it-works.html">工作原理</a>
<a href="/use-cases/">使用案例</a> <!-- 仅详尽模式 -->
<a href="#pricing">定价</a>
<button>开始使用</button>
</nav>
生成后,告知用户:
python3 -m http.server -d showcase 然后打开 http://localhost:8000showcase/ 文件夹拖到 Cloudflare Pages、Netlify 或任何静态主机颜色:如果应用有明确的品牌颜色,提取它并将其用作主色调。否则默认使用中性调色板(石板色/蓝色)。
排版:系统字体栈(无外部请求)。与 landing-page 相同的方法。
响应式:移动优先,截图优雅地缩放。在移动设备上,截图垂直堆叠而不是网格排列。
深色模式:三态切换(亮色/深色/系统),使用 CSS 自定义属性。
性能:懒加载截图图像。使用 Tailwind CDN 进行样式设计。无需构建步骤。
[asdf@example.com](https://github.com/jezweb/claude-skills/blob/HEAD/plugins/frontend/skills/product-showcase/mailto:asdf@example.com)真实截图证明产品是真实的。模拟图展示产品是精致的。两者都用:
手机模拟框架(CSS):
.phone-frame {
border: 8px solid #1f2937;
border-radius: 32px;
overflow: hidden;
max-width: 280px;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.3);
}
.phone-frame-notch {
background: #1f2937;
height: 24px;
border-radius: 0 0 16px 16px;
width: 120px;
margin: 0 auto;
}
/* 当用户滚动时淡入部分(通过 CSS 的交集观察者) */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.section { animation: fadeInUp 0.6s ease-out both; }
/* 英雄截图上微妙的浮动效果 */
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-8px); }
}
.hero-screenshot { animation: float 6s ease-in-out infinite; }
提取应用的主色调,并将其用于部分的微妙渐变背景:
.hero { background: linear-gradient(135deg, var(--primary) 0%, transparent 60%); }
.cta-banner { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; }
展示网站需要托管在真实的地方——而不仅仅是从文件打开。根据可用选项选择:
如果要展示的应用已经在 Cloudflare 上,也将展示网站部署为 Worker:
# 在 showcase/ 目录中,创建一个最小的 wrangler.jsonc:
{
"name": "myapp-showcase",
"main": "src/index.ts", // 或使用纯静态模式
"compatibility_date": "2026-03-01",
"assets": { "directory": "./" }
}
npx wrangler deploy
或者附加自定义域名:showcase.myapp.com 或 myapp.com(如果应用本身在 app.myapp.com)。
仪表板 → Pages → 创建 → 上传资源 → 拖放 showcase/ 文件夹。立即获得一个 .pages.dev URL。
任何静态主机都适用——它只是 HTML + CSS + 图像。没有服务器端代码。
对于专业的展示,始终使用自定义域名:
myapp.com —— 展示网站是主站点,应用在 app.myapp.comwww.myapp.com → 展示网站,app.myapp.com → 实际应用每个展示网站都需要一种让感兴趣的人联系的方式。不要只放“给我们发邮件”——添加一个真实的表单。
<form action="https://formspree.io/f/YOUR_FORM_ID" method="POST">
<input type="text" name="name" placeholder="你的姓名" required>
<input type="email" name="email" placeholder="你的邮箱" required>
<textarea name="message" placeholder="告诉我们你的需求"></textarea>
<button type="submit">联系我们</button>
</form>
免费层级处理大多数展示网站的流量。提交内容会发送到你的邮箱。
如果展示网站部署在 Workers 上,添加一个 /api/enquiry 路由:
app.post('/api/enquiry', async (c) => {
const { name, email, message } = await c.req.json();
// 通过 SMTP2Go、Resend 发送或存储在 D1 中
await sendEmail({ to: 'hello@company.com', subject: `来自 ${name} 的咨询`, body: message });
return c.json({ success: true });
});
添加 Cloudflare Turnstile 以防止机器人提交:
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
在处理提交之前,在服务器端验证令牌。
| 字段 | 必需 | 原因 |
|---|---|---|
| 姓名 | 是 | 个性化跟进 |
| 邮箱 | 是 | 回复渠道 |
| 公司/角色 | 否,但有用 | 筛选潜在客户 |
| 消息 / "你在寻找什么?" | 否,但有用 | 回复的上下文 |
| 电话 | 否 | 有些人更喜欢电话 |
提交后:重定向到感谢页面或显示内联确认。不要默默地重置表单。
| 页面 | 何时包含 | 作用 |
|---|---|---|
| 定价 | 如果定价已定义 | 层级卡片、功能对比、关于账单的 FAQ |
| 关于 | 对于有故事的产品 | 谁构建了它、为什么、历程(与 jez-voice 配对) |
| 更新日志 | 对于已发布的产品 | 最近的更新,展示产品正在积极开发中 |
| 文档链接 | 如果存在应用文档 | 链接到由 /app-docs 生成的用户指南 |
| 博客 / 文章 | 如果存在内容 | 链接到新闻通讯存档或关于产品的博客文章 |
| 隐私 / 条款 | 总是 | 即使是占位符——也显示合法性 |
| 状态页面 | 对于 SaaS | 链接到正常运行时间监控(Cloudflare 健康检查) |
每个展示页面都应包含:
<title>[应用名称] —— [标语]</title>
<meta name="description" content="[一句话价值主张]">
<meta property="og:title" content="[应用名称]">
<meta property="og:description" content="[价值主张]">
<meta property="og:image" content="screenshots/hero.png">
<link rel="canonical" href="https://myapp.com/">
对于多页面:每个页面都有自己的标题和描述。不要在所有页面上使用相同的元数据。
如果产品服务于特定地点,请使用 seo-local-business 技能来生成 JSON-LD。
每周安装次数
107
仓库
GitHub 星标数
643
首次出现
9 天前
安全审计
安装于
opencode103
kimi-cli102
gemini-cli102
amp102
cline102
github-copilot102
Generate a marketing website that actually teaches people what a web app does. Not just a hero and feature grid — a multi-page site with real screenshots, animated GIF walkthroughs of workflows, feature deep-dives, and progressive depth from "what is this" to "here's exactly how it works."
Especially valuable for complex apps, agentic AI tools, and anything where a static screenshot doesn't convey the value.
| Depth | Output | Duration |
|---|---|---|
| quick | Single page — hero, features, CTA. Same as before. | 15-20 min |
| standard | Multi-page site — home, features page, how-it-works with screenshots. | 1-2 hours |
| thorough | Comprehensive site — home, per-feature pages, animated GIF walkthroughs, use cases, comparison page, docs-style demo. | 3-6 hours |
Default: standard
Before starting, detect available browser tools:
mcp__claude-in-chrome__*) — preferred for authenticated appsmcp__plugin_playwright_playwright__*) — for public apps| Field | Required | Example |
|---|---|---|
| App URL | Yes | https://app.example.com or http://localhost:5173 |
| App name | Yes | "Acme CRM" |
| Tagline | No | "The CRM that gets out of your way" |
| Target audience | No | "Small business owners" |
| Pricing info | No | Free tier, $29/mo pro |
| CTA text + URL | No | "Start Free Trial" → signup page |
| Testimonials | No | User provides or skip section |
Navigate the app and capture the story:
Navigate through each major section:
Find the main workflow (the thing a user does most):
For the feature grid, capture focused screenshots:
If the app has dark mode, capture the hero and 2-3 key screens in both light and dark. Use the best-looking mode for the hero, show the other in a "Works in dark mode too" section or as a side-by-side comparison.
Don't just list features. For each one, answer: why does the user care?
One HTML file: hero + feature grid + CTA. Use for MVPs and quick marketing.
showcase/
├── index.html # Home — hero, overview, feature highlights, CTA
├── features.html # All features with screenshots and descriptions
├── how-it-works.html # Step-by-step workflow walkthrough with screenshots
├── screenshots/ # All captured images
│ ├── hero.png
│ ├── feature-*.png
│ ├── workflow-step-*.png
│ └── *.gif # Animated walkthroughs
└── styles.css # Shared styles (or inline Tailwind CDN)
Home page : Hero with animated GIF or key screenshot, 3-4 feature highlights (not all features — just the best), "How It Works" summary (3 steps), CTA.
Features page : Every feature with a real screenshot and benefit-focused description. Group by category if there are 6+. Each feature gets enough space to actually explain what it does.
How It Works page : The primary workflow as a step-by-step visual guide. Each step has a screenshot (or animated GIF), a heading, and 2-3 sentences. This page answers "ok but what does using it actually look like?"
showcase/
├── index.html # Home — hero, overview, value proposition
├── features/
│ ├── index.html # Feature overview grid
│ ├── [feature-1].html # Deep-dive: one page per major feature
│ ├── [feature-2].html # Each with screenshots, GIFs, use cases
│ └── [feature-n].html
├── how-it-works.html # Full workflow walkthrough
├── use-cases/
│ ├── [use-case-1].html # Scenario: "A day in the life of..."
│ └── [use-case-2].html # Scenario: "When a new client calls..."
├── compare.html # "Why [app] vs alternatives" (optional)
├── screenshots/
│ ├── hero.png
│ ├── feature-*/ # Per-feature screenshot sets
│ └── workflows/ # Animated GIFs
└── styles.css
Per-feature deep-dive pages : Each major feature gets its own page with:
Use case pages : Story-driven pages that show the app in a real scenario:
Comparison page (optional): "Why [app] vs [alternatives]" — honest comparison, not marketing fluff. Feature table, key differentiators, who it's best for.
Static screenshots don't convey workflow. For key features, capture animated GIFs that show the actual interaction:
How to capture (using Playwright or Chrome MCP):
Generating the GIF (Python script):
from PIL import Image
import glob
frames = []
for f in sorted(glob.glob('.jez/screenshots/workflow-*.png')):
frames.append(Image.open(f))
frames[0].save('showcase/screenshots/workflows/create-client.gif',
save_all=True, append_images=frames[1:],
duration=500, loop=0) # 500ms per frame
What to animate :
GIF guidelines :
Display in HTML :
<div class="browser-frame">
<div class="browser-frame-bar">
<span class="browser-frame-dot"></span>
<span class="browser-frame-dot"></span>
<span class="browser-frame-dot"></span>
</div>
<img src="screenshots/workflows/create-client.gif"
alt="Creating a new client in 3 clicks"
loading="lazy" width="640" height="360">
</div>
Agentic apps are especially hard to market because the value is invisible — the AI does work the user never sees. Standard screenshots show a chat interface. That's not compelling.
Patterns that work for agentic apps :
| Pattern | What it shows | Example |
|---|---|---|
| Before/after | What the user used to do manually vs what the agent does | "Used to: copy-paste from 3 systems. Now: agent does it in background." |
| Timeline | What happens over time — show the agent working across hours/days | "8am: agent checks inbox. 9am: classifies 47 emails. 10am: flags 3 urgent." |
| Result showcase | Skip the process, show the output | "Agent mined 1,200 emails → 89 clients, 340 contacts, 2,100 knowledge facts" |
| Side-by-side | Show the agent's work next to what a human would have done | Split screen: left is the raw email, right is the extracted structured data |
| Magic moment GIF | One animation of the most impressive thing | User asks a question → agent searches knowledge → returns answer with sources |
Copy tips for agentic apps :
Screenshots are shown in browser-frame mockups using CSS:
.browser-frame {
border-radius: 8px;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.1);
}
.browser-frame-bar {
background: #f1f5f9;
padding: 8px 12px;
display: flex;
gap: 6px;
}
.browser-frame-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: #e2e8f0;
}
This gives screenshots a polished "app in a browser" look without needing to edit the images.
Multi-page sites need consistent navigation:
<nav>
<a href="/">Home</a>
<a href="/features/">Features</a>
<a href="/how-it-works.html">How It Works</a>
<a href="/use-cases/">Use Cases</a> <!-- thorough only -->
<a href="#pricing">Pricing</a>
<button>Get Started</button>
</nav>
After generating, tell the user:
python3 -m http.server -d showcase then open http://localhost:8000showcase/ folder to Cloudflare Pages, Netlify, or any static hostColour : If the app has a clear brand colour, extract it and use it as the primary. Otherwise default to a neutral palette (slate/blue).
Typography : System font stack (no external requests). Same approach as landing-page.
Responsive : Mobile-first, screenshots scale down gracefully. On mobile, screenshots stack vertically instead of grid.
Dark mode : Three-state toggle (light/dark/system) with CSS custom properties.
Performance : Lazy-load screenshot images. Tailwind CDN for styling. No build step.
Real screenshots show the product is real. Mockups show the product is polished. Use both:
Phone mockup frame (CSS):
.phone-frame {
border: 8px solid #1f2937;
border-radius: 32px;
overflow: hidden;
max-width: 280px;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.3);
}
.phone-frame-notch {
background: #1f2937;
height: 24px;
border-radius: 0 0 16px 16px;
width: 120px;
margin: 0 auto;
}
/* Fade in sections as user scrolls (intersection observer via CSS) */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.section { animation: fadeInUp 0.6s ease-out both; }
/* Subtle float on hero screenshot */
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-8px); }
}
.hero-screenshot { animation: float 6s ease-in-out infinite; }
Extract the app's primary colour and use it for subtle gradient backgrounds on sections:
.hero { background: linear-gradient(135deg, var(--primary) 0%, transparent 60%); }
.cta-banner { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; }
The showcase site needs to be hosted somewhere real — not just opened from a file. Choose based on what's available:
If the app being showcased is already on Cloudflare, deploy the showcase as a Worker too:
# In the showcase/ directory, create a minimal wrangler.jsonc:
{
"name": "myapp-showcase",
"main": "src/index.ts", // or use static-only pattern
"compatibility_date": "2026-03-01",
"assets": { "directory": "./" }
}
npx wrangler deploy
Or attach a custom domain: showcase.myapp.com or myapp.com (if the app itself is at app.myapp.com).
Dashboard → Pages → Create → Upload assets → drag the showcase/ folder. Gets a .pages.dev URL instantly.
Any static host works — it's just HTML + CSS + images. No server-side code.
For a professional showcase, always use a custom domain:
myapp.com — showcase is the main site, app is at app.myapp.comwww.myapp.com → showcase, app.myapp.com → the actual appEvery showcase needs a way for interested people to get in touch. Don't just put "email us" — add a real form.
<form action="https://formspree.io/f/YOUR_FORM_ID" method="POST">
<input type="text" name="name" placeholder="Your name" required>
<input type="email" name="email" placeholder="Your email" required>
<textarea name="message" placeholder="Tell us about your needs"></textarea>
<button type="submit">Get in Touch</button>
</form>
Free tier handles most showcase volumes. Submissions go to your email.
If the showcase is on Workers, add a /api/enquiry route:
app.post('/api/enquiry', async (c) => {
const { name, email, message } = await c.req.json();
// Send via SMTP2Go, Resend, or store in D1
await sendEmail({ to: 'hello@company.com', subject: `Enquiry from ${name}`, body: message });
return c.json({ success: true });
});
Add Cloudflare Turnstile to prevent bot submissions:
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
Verify the token server-side before processing the submission.
| Field | Required | Why |
|---|---|---|
| Name | Yes | Personalise follow-up |
| Yes | Reply channel | |
| Company/Role | No but helpful | Qualify the lead |
| Message / "What are you looking for?" | No but helpful | Context for response |
| Phone | No | Some people prefer a call |
After submission : redirect to a thank-you page or show an inline confirmation. Don't just reset the form silently.
| Page | When to include | What it does |
|---|---|---|
| Pricing | If pricing is defined | Tier cards, feature comparison, FAQ about billing |
| About | For products with a story | Who built it, why, the journey (pairs with jez-voice) |
| Changelog | For shipped products | Recent updates, shows the product is actively developed |
| Docs link | If app-docs exist | Link to the user guide generated by /app-docs |
| Blog / Articles | If content exists | Link to newsletter archive or blog posts about the product |
| Privacy / Terms | Always | Even placeholder — shows legitimacy |
Every showcase page should have:
<title>[App Name] — [Tagline]</title>
<meta name="description" content="[One sentence value proposition]">
<meta property="og:title" content="[App Name]">
<meta property="og:description" content="[Value proposition]">
<meta property="og:image" content="screenshots/hero.png">
<link rel="canonical" href="https://myapp.com/">
For multi-page: each page gets its own title and description. Don't use the same meta across all pages.
Use the seo-local-business skill for JSON-LD if the product serves a specific location.
Weekly Installs
107
Repository
GitHub Stars
643
First Seen
9 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode103
kimi-cli102
gemini-cli102
amp102
cline102
github-copilot102
营销心理学与心智模型应用指南 | 提升营销决策与客户行为理解
42,000 周安装
| For SaaS |
| Link to uptime monitoring (Cloudflare health checks) |