competitor-visual
npx skills add https://github.com/tendtoyj/tendtoyj-claude-skills --skill competitor-visual
Agent 安装分布
Skill 文档
Competitor Visual
Capture competitor landing pages with Playwright and analyze design patterns â color, typography, layout, visual tone, and responsiveness. This is the final step in the competitive chain: competitor-finder â competitor-analyzer â competitor-visual.
Purpose
Copy tells people what you say. Design tells people how you feel.
Competitor Visual captures what text scraping cannot â the visual identity of competitor landing pages. It produces:
- Screenshots of hero sections, feature pages, and pricing pages
- Extracted color palettes, typography stacks, and layout patterns
- A cross-competitor visual comparison matrix
- Design gaps and visual differentiation opportunities
Output enriches research-memory/competitive-intel.md (Design Patterns section) and saves screenshots to research-skills/screenshots/.
Modes
| Mode | When to Use | Behavior |
|---|---|---|
| Full Visual Audit | Design Patterns section in competitive-intel.md is empty |
Capture + analyze all competitors |
| Refresh | Design Patterns section has existing data | Re-capture specific competitors or reflect list changes |
| Single Site | User provides a specific URL | Analyze one site (can be non-competitor benchmark) |
Auto-Load Protocol
On every invocation, BEFORE any capture:
- Check
research-memory/directory - If files exist â Read ALL
.mdfiles (except README.md) - Read
competitive-intel.mdâ Extract competitor names + URLs from the Competitive Set table - If NO competitor URLs found â Stop. Tell user to run
competitor-finderfirst - If Design Patterns section already has data â Suggest Refresh mode
- Check
brand-memory/(read-only) â If exists, note brand’s own visual identity for comparison context
Input Gathering
Collect conversationally. Most inputs auto-load from competitive-intel.md.
| Field | Required | Description |
|---|---|---|
| Competitor URLs | YES (auto-load) | Pulled from competitive-intel.md. If missing, ask user directly |
| Capture scope | Optional | Landing page only (default) / Include features + pricing / Full site |
| Focus area | Optional | Color, typography, layout, mobile, or all (default) |
| Own site URL | Optional | If provided, adds self-vs-competitor comparison |
| Language | Optional | 결과물 ìì± ì¸ì´ (default: English) |
Show the extracted URL list to the user and confirm before proceeding.
For Refresh mode: Show current Design Patterns summary and ask which competitors to update.
Process
Step 1: Extract URLs + Plan Capture
Goal: Build the capture target list from competitive-intel.md.
- Parse the Competitive Set table â extract
Company+URLcolumns - For each competitor, plan capture targets:
- Required: Homepage / landing page (hero section)
- Recommended: Features page, pricing page (if identifiable)
- Optional: About page, blog (if user requests full scope)
- Present the capture plan to user for confirmation:
I'll capture these competitors: 1. [Company A] â homepage, features, pricing 2. [Company B] â homepage, pricing 3. [Company C] â homepage, features Proceed?
Step 2: Playwright Screenshot Capture
Goal: Navigate to each competitor site and capture screenshots + extract CSS data.
For each competitor site, execute this sequence:
2a. Desktop Capture (1280Ã800)
browser_resize â width: 1280, height: 800
browser_navigate â competitor URL
browser_wait_for â time: 3 (allow content to load)
browser_take_screenshot â filename: "screenshots/[company]-hero.png"
browser_take_screenshot â fullPage: true, filename: "screenshots/[company]-full.png"
If cookie/consent banner appears:
browser_snapshot â find dismiss/accept button
browser_click â close the banner
browser_take_screenshot â re-capture without banner
2b. Extract Design Tokens (CSS)
Use browser_evaluate to programmatically extract color and typography data:
Color extraction:
() => {
const body = getComputedStyle(document.body);
const hero = document.querySelector('[class*="hero"], header, .banner, main > section:first-child');
const hs = hero ? getComputedStyle(hero) : {};
const cta = document.querySelector('a[class*="btn"], button[class*="btn"], .cta, [class*="cta"]');
const cs = cta ? getComputedStyle(cta) : {};
return {
bodyBg: body.backgroundColor, bodyColor: body.color,
heroBg: hs.backgroundColor || 'N/A',
ctaBg: cs.backgroundColor || 'N/A', ctaColor: cs.color || 'N/A',
fontFamily: body.fontFamily
};
}
Typography extraction:
() => {
const tags = ['h1','h2','h3'].map(t => {
const el = document.querySelector(t);
if (!el) return null;
const s = getComputedStyle(el);
return { tag: t, font: s.fontFamily, size: s.fontSize, weight: s.fontWeight };
}).filter(Boolean);
const b = getComputedStyle(document.body);
return { headings: tags, bodyFont: b.fontFamily, bodySize: b.fontSize };
}
2c. Mobile Capture (optional â 390Ã844)
browser_resize â width: 390, height: 844
browser_wait_for â time: 2
browser_take_screenshot â filename: "screenshots/[company]-mobile.png"
browser_resize â width: 1280, height: 800 (reset)
2d. Additional Pages
If capture scope includes features/pricing:
browser_navigate â [features URL]
browser_wait_for â time: 3
browser_take_screenshot â filename: "screenshots/[company]-features.png"
Repeat for pricing page if applicable.
Error handling: If a site blocks access, times out, or triggers CAPTCHA â skip that competitor, note it in the analysis, and move to the next.
Save all screenshots to research-skills/screenshots/[company-name]/ (create subdirectory per competitor).
Step 3: Analyze Design Patterns
Goal: Synthesize screenshots + extracted CSS data into structured design analysis.
For each competitor, analyze:
| Dimension | What to Document |
|---|---|
| Color Palette | Primary, secondary, accent colors (HEX). Strategy: warm/cool, high/low contrast, monochrome/complementary |
| Typography | Heading font, body font, size hierarchy (h1 â h2 â body), readability |
| Hero Section | Type: centered / left-aligned / full-screen image / video. Key elements present |
| Layout Pattern | Number of sections, scroll depth, grid structure, whitespace usage |
| Visual Tone | Minimal vs rich, corporate vs friendly, tech vs emotional, illustration vs photography |
| CTA Design | Button color, size, placement, repetition count, contrast against background |
| Social Proof | Format: logo bar, testimonial cards, stats badges, case study links |
| Mobile Quality | Responsive: Good (adapts well) / Basic (works but not optimized) / Poor (broken) |
Then build the cross-competitor comparison:
- What patterns do ALL competitors share? (industry norms)
- What does only ONE competitor do differently? (differentiation)
- What does NOBODY do? (visual white space = opportunity)
Step 4: Enrich competitive-intel.md + Save + Log
Goal: Write findings into the correct sections of competitive-intel.md without touching other skills’ content.
4a. Enrichment Rules
- NEVER modify sections tagged
[competitor-finder]or[competitor-analyzer] - ONLY write to sections tagged
[competitor-visual]:## Design Patterns & Visual Audit [competitor-visual]
- Append to
## Gaps & Opportunitiesâ add design-related opportunities with[competitor-visual]tag, keep existing items
Language rule: ì¹ì í¤ëì í ì´ë¸ 컬ë¼ëª ì ìì´ë¡ ì ì§í©ëë¤. 본문, ì ê°, ì¤ëª , ë¶ì í ì¤í¸ë ì¬ì©ìê° ì§ì í ì¸ì´ë¡ ìì±í©ëë¤. ì¸ì´ê° ì§ì ëì§ ìì¼ë©´ Englishë¡ ìì±í©ëë¤. ì¶ì¶ë CSS ë°ì´í°(HEX, font name ë±)ë ìë íí ì ì§. ë¶ì í ì¤í¸ë§ ì§ì ì¸ì´ë¡ ìì±.
4b. Write Design Patterns Section
Replace the ## Design Patterns & Visual Audit [competitor-visual] section with:
## Design Patterns & Visual Audit [competitor-visual]
> Last updated: [YYYY-MM-DD]
> Screenshots: research-skills/screenshots/
### Visual Comparison Matrix
| Competitor | Colors | Typography | Hero Type | Visual Tone | CTA | Mobile |
|-----------|--------|------------|-----------|-------------|-----|--------|
| [name] | [primary HEX] | [heading font] | [type] | [tone] | [color, style] | Good/Basic/Poor |
### [Competitor Name]
- **Color Palette**: Primary [hex], Secondary [hex], Accent [hex]
- **Color Strategy**: [warm/cool, high/low contrast]
- **Typography**: Heading: [font], Body: [font]
- **Hero Section**: [type], [key elements]
- **Layout**: [sections, scroll depth, grid]
- **Visual Tone**: [description]
- **CTA Design**: [color, placement, repetition]
- **Social Proof**: [format]
- **Mobile**: [quality assessment]
- **Screenshots**: `screenshots/[name]/hero.png`, `screenshots/[name]/full.png`
(Repeat for each competitor)
### Design Trends Across Competitors
- **Shared patterns**: [what most competitors do]
- **Differentiators**: [unique approaches by specific competitors]
- **White space**: [what nobody does â opportunity for our brand]
4c. Update Gaps & Opportunities
Append design-relevant gaps (do NOT delete existing rows):
| [next #] | [design gap description] [competitor-visual] | [evidence from visual audit] | [priority] |
4d. Update research-log.md
Append one row:
| [YYYY-MM-DD] | competitor-visual | Full Audit / Refresh / Single | [# competitors captured, key visual findings] | Playwright |
Playwright Tool Reference
| Tool | Purpose | When |
|---|---|---|
browser_navigate |
Go to URL | Every competitor site |
browser_take_screenshot |
Capture viewport or full page | Hero, features, pricing, mobile |
browser_snapshot |
Get accessibility tree | Find dismiss buttons, understand structure |
browser_resize |
Change viewport size | Desktop (1280Ã800) â Mobile (390Ã844) |
browser_evaluate |
Run JavaScript | Extract colors, fonts via getComputedStyle |
browser_click |
Click elements | Dismiss cookie banners, navigate tabs |
browser_wait_for |
Wait for content | Allow pages to fully render |
Tips:
- Always wait 2-3 seconds after navigation for content to load
- Cookie banners: use
browser_snapshotto find the dismiss button, thenbrowser_click - If a site blocks or CAPTCHAs â skip and note in analysis
- Save screenshots with descriptive names:
[company]-hero.png,[company]-mobile.png - Reset viewport to 1280Ã800 after mobile captures
Quality Checklist
Before saving, verify:
- Every competitor in the Competitive Set has at least a hero screenshot
- CSS-extracted colors include HEX values (not just rgb strings â convert if needed)
- Typography documents both heading and body fonts
- Visual Comparison Matrix covers all analyzed competitors
- “Design Trends Across Competitors” section identifies at least 1 shared pattern and 1 opportunity
- Existing
[competitor-finder]and[competitor-analyzer]sections are untouched - Screenshots saved to
research-skills/screenshots/[company]/ -
research-log.mdupdated with execution record
What This Skill Does NOT Do
- Text/messaging analysis â Use
competitor-analyzer(Firecrawl) - Competitor discovery â Use
competitor-finder(Perplexity) - Brand voice definition â Use
brand-voice(marketing skill) - Design system generation â Out of scope. This skill observes, not creates
Competitor Visual stays focused on how competitors look â color, type, layout, tone.