
Product Appeal Analyzer
- 136 installs
- 178 repo stars
- Updated July 14, 2026
- erichowens/some_claude_skills
Stress-test positioning, headlines, and value props against a target buyer before you commit engineering time or ad spend on a weak offer.
About
Product-appeal-analyzer evaluates how compelling a product concept, landing message, or offer feels to a defined audience. It surfaces weak hooks, unclear benefits, and positioning risks early so teams refine scope and narrative before prototyping or shipping code.
- Value proposition critique
- Buyer persona fit check
- Differentiation gaps
- Messaging sharpness
- Go/no-go signal before build
Product Appeal Analyzer by the numbers
- 136 all-time installs (skills.sh)
- Ranked #1,227 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/erichowens/some_claude_skills --skill product-appeal-analyzerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 136 |
|---|---|
| repo stars | ★ 178 |
| Last updated | July 14, 2026 |
| Repository | erichowens/some_claude_skills ↗ |
What it does
Stress-test positioning, headlines, and value props against a target buyer before you commit engineering time or ad spend on a weak offer.
Files
Product Appeal Analyzer
Evaluate whether users will want a product—not just use it. The complement to friction analysis.
Core insight: Users don't choose the best product—they choose the product that feels most like it was made for them.
When to Use
✅ Use for:
- Evaluating landing pages, product pages, app store listings
- Positioning a product against alternatives
- Crafting messaging, tone, visual identity direction
- Assessing emotional resonance with target personas
- Pre-launch "will this convert?" analysis
❌ NOT for:
- UX friction audits (→ use ux-friction-analyzer)
- Visual design execution (→ use web-design-expert)
- A/B test implementation (→ use frontend-developer)
- Market size estimation or financial forecasting
- Feature comparison matrices
---
The Desirability Triangle
All three must be present. Missing any one kills conversion:
IDENTITY FIT
"This is for people like me"
/\
/ \
/ \
/ ★ \
/ DESIRE \
/ \
/______________\
PROBLEM TRUST
URGENCY SIGNALS
"I need this now" "This will actually work"| Missing Element | User Reaction |
|---|---|
| Identity Fit | "Seems useful, but not for me" |
| Problem Urgency | "Cool, maybe someday" |
| Trust Signals | "Looks sketchy / too good to be true" |
Decision tree: When analyzing, score each vertex 1-10. If any is <5, that's your priority fix.
---
Quick Analysis: The 5-Second Test
Within 5 seconds of landing, a visitor should know:
1. What is this? (Category recognition) 2. Who is it for? (Identity signal) 3. What's the core promise? (Value proposition) 4. What do I do next? (Clear CTA)
How to run it:
- Show landing page to someone unfamiliar for exactly 5 seconds
- Hide it, then ask: "What was that? Who's it for? What would you do there?"
- Record verbatim—don't coach or clarify
Scoring:
| Result | Score | Action |
|---|---|---|
| All 4 clear in <3 sec | 9-10 | Ship it |
| All 4 clear in 3-5 sec | 7-8 | Minor polish |
| 3 of 4 clear | 5-6 | Fix the gap |
| 2 or fewer clear | 2-4 | Significant rework |
| Confusing/unclear | 0-1 | Start over |
---
Analysis Process
Step 1: Identify Target Personas
For each persona, document:
- Who: One-sentence description
- Problem: What's broken + how it feels
- Current workaround: What they do today (and why it sucks)
- Identity: How they see themselves, who they want to become
Step 2: Score the Desirability Triangle
For each persona:
PERSONA: [Name]
IDENTITY FIT [/10]
Visual identity match [/10] "Does this look like my kind of tool?"
Language resonance [/10] "Do they speak my language?"
Implied user match [/10] "Are people like me shown?"
PROBLEM URGENCY [/10]
Pain point acknowledged [/10] "They understand my problem"
Emotional resonance [/10] "They get how frustrating it is"
Solution clarity [/10] "I see how this fixes it"
TRUST SIGNALS [/10]
Professional execution [/10] "This looks legitimate"
Social proof [/10] "Others like me use it"
Risk reduction [/10] "What if it doesn't work?"
OVERALL APPEAL SCORE: [/90]Step 3: Map Objections
| Objection | Type | How Addressed? |
|---|---|---|
| "Is this legit?" | Trust | [Answer] |
| "I've tried things before" | Skepticism | [Answer] |
| "Too expensive" | Value | [Answer] |
| "Too complicated" | Effort | [Answer] |
| "Not for people like me" | Identity | [Answer] |
| "What if it doesn't work?" | Risk | [Answer] |
| "I'll do it later" | Urgency | [Answer] |
Step 4: Generate Recommendations
Use priority formula: Impact = (Users Affected × Severity) / Fix Difficulty
Categorize into:
- Immediate (ship this week)
- Medium-term (this sprint)
- Long-term (roadmap)
---
Common Anti-Patterns
Feature Soup Headline
Novice thinking: "List all capabilities to show value"
Reality: Visitors scan for 2-3 seconds. Feature lists feel generic.
What to use instead:
| Bad | Good |
|---|---|
| "AI-Powered Recovery Planning Tool with Analytics" | "Know exactly what to do next in your recovery" |
| "Comprehensive Legal Document Platform" | "Find out in 2 minutes if your record can be expunged" |
Detection: Headline contains 3+ nouns or buzzwords like "AI-powered", "comprehensive", "platform"
Screenshot Hero
Novice thinking: "Show the product interface so people know what they're getting"
Reality: Strangers don't understand your UI. They care about outcomes.
What to use instead:
- Person experiencing the benefit
- The outcome/result they'll get
- Abstract visualization of the transformation
Detection: Hero image is a product screenshot with no context
Trust Ladder Violation
Novice thinking: "Get their email immediately, then convert them"
Reality: Trust builds in stages. Asking for too much too early kills conversion.
The Trust Ladder (each rung requires more trust): 1. Land on page → Professional design, no broken elements 2. Click/explore → Clear navigation, fast load 3. Spend >2 min → Demonstrated value, clear progress 4. Enter info → Why you need it explained, no dark patterns 5. Create account → Privacy visible, minimal fields, clear benefit 6. Pay money → Guarantee, testimonials, recognizable processor
Detection: Asking for account creation before demonstrating value
Identity Mismatch
Novice thinking: "Broad appeal = more users"
Reality: When everyone is the target, no one feels targeted.
What to use instead:
| Signal Type | How It Works |
|---|---|
| Visual identity | Dark mode = "power user"; Soft pastels = "wellness" |
| Language/tone | "Crush your goals" vs "Find your balance" |
| Social proof | Company logos vs individual testimonials |
| Complexity | Minimal = simplicity-seeker; Feature-rich = power user |
Detection: Homepage tries to appeal to 3+ different personas
---
Self-Contained Tools
Analysis Workflow
1. Read the landing page content and structure 2. WebFetch the target URL to analyze live content 3. Write analysis results to a markdown file 4. Edit recommendations into actionable copy changes
Appeal Scorer Script
Run: python scripts/appeal_scorer.py <url>
Produces structured JSON output with scores and recommendations.
Reference Files (See for deep dives)
| File | When to Use |
|---|---|
references/scoring-templates.md | Full scoring matrices and templates |
references/trust-ladder.md | Deep dive on trust building stages |
references/identity-signals.md | Visual/verbal identity signal catalog |
references/objection-catalog.md | Common objections by product type |
---
Output Format
When running this skill, produce:
1. Executive Summary - 3 bullet key findings 2. Desirability Triangle Scores - Per persona 3. 5-Second Test Assessment - What's clear, what's not 4. Top 3 Objections - And how to address them 5. Priority Recommendations - Immediate / Medium / Long-term
---
Integration with ux-friction-analyzer
Appeal + Friction = Complete picture
| This Skill Answers | ux-friction-analyzer Answers |
|---|---|
| "Do they want it?" | "Can they use it?" |
| Will they choose this over alternatives? | Can they complete the task? |
| Does it feel made for them? | Does the flow make sense? |
| Is the promise compelling? | Is the experience smooth? |
Run both: High appeal + high friction = frustrated users. Low friction + low appeal = abandoned product.
---
Philosophy: A product with low friction but low appeal gets abandoned. A product with high appeal but high friction gets frustrated users. You need both.
Changelog
All notable changes to this skill will be documented here.
[1.0.0] - 2026-01-15
Added
- Initial skill release
- Core frameworks: Desirability Triangle, 5-Second Test
- SKILL.md with activation patterns and anti-patterns
scripts/appeal_scorer.pyfor structured analysis- Reference documents:
references/scoring-templates.md- Full assessment templatesreferences/trust-ladder.md- Trust building stages deep divereferences/identity-signals.md- Visual/verbal identity catalogreferences/objection-catalog.md- Universal objections and counters
Integrations
- Pairs with
ux-friction-analyzer(appeal + friction = complete picture) - Pairs with
competitive-cartographer(positioning against alternatives) - Pairs with
web-design-expert(implementing recommendations)
Design Decisions
- Kept SKILL.md under 300 lines for fast activation
- Moved detailed templates to
/referencesfor progressive disclosure - Encoded 4 shibboleths as anti-patterns:
1. Feature Soup Headline 2. Screenshot Hero 3. Trust Ladder Violation 4. Identity Mismatch
- Python scoring script provides structure without requiring external dependencies
Identity Signals Catalog
People choose products that reinforce who they are or want to be. This reference catalogs the signals that communicate "this is for people like you."
The Identity Principle
Users don't choose the best product—they choose the product that feels most made for them.
Identity signals answer:
- "Is this for people like me?"
- "Will people like me be represented?"
- "Does using this align with who I want to be?"
Signal Categories
1. Visual Identity
How design communicates target user:
| Visual Choice | Signal Sent | Appeals To |
|---|---|---|
| Dark mode default | Power user, developer, sophisticated | Tech professionals, gamers, privacy-focused |
| Soft pastels | Calm, wellness, approachable | Self-care, creative, gentle |
| Bold gradients | Modern, innovative, energetic | Startups, marketers, trend-forward |
| Minimal white | Clean, focused, premium | Professionals, designers, minimalists |
| Corporate blue | Trustworthy, established, safe | Enterprise, finance, healthcare |
| Earth tones | Sustainable, natural, grounded | Eco-conscious, wellness, outdoor |
| Neon accents | Edgy, youthful, gaming | Gen Z, creators, gaming |
| Hand-drawn elements | Human, artisan, indie | Creatives, small business, authentic |
2. Typography Signals
| Typography | Signal Sent | Appeals To |
|---|---|---|
| Sans-serif, clean | Modern, efficient | Tech, business |
| Serif, traditional | Established, premium | Luxury, publishing, law |
| Monospace | Developer, technical | Engineers, tech |
| Rounded, friendly | Approachable, fun | Consumer, education |
| All caps headers | Bold, authoritative | Fashion, sports |
| Handwritten accents | Personal, creative | Artists, wellness |
3. Language & Tone
| Tone | Example | Appeals To |
|---|---|---|
| "Crush it" | "Crush your goals", "Dominate", "Win" | Competitive, ambitious |
| "Find balance" | "Discover your path", "Journey", "Grow" | Wellness-oriented, reflective |
| "Build" | "Ship faster", "Scale", "Deploy" | Developers, makers |
| "Transform" | "Become", "Evolve", "Unlock" | Self-improvement, coaching |
| "Simplify" | "Finally easy", "No complexity" | Overwhelmed, non-technical |
| "Expert" | "For professionals", "Advanced" | Specialists, power users |
4. Social Proof Types
Who endorses matters as much as what they say:
| Proof Type | Signal Sent | Best For |
|---|---|---|
| Fortune 500 logos | "Enterprise-ready, proven at scale" | B2B selling to enterprise |
| Startup logos | "Innovative, chosen by disruptors" | B2B selling to startups |
| Individual testimonials | "Real people like you succeeded" | B2C, high-consideration |
| Celebrity/influencer | "Aspirational, trending" | Consumer lifestyle |
| Expert credentials | "Scientifically backed, professional" | Health, finance, education |
| Community numbers | "You're not alone, popular" | Social products, communities |
| Media logos | "Legitimate, newsworthy" | Credibility-building |
| Award badges | "Recognized quality" | Premium positioning |
5. Complexity Level
How much you show upfront:
| Approach | Signal | Best For |
|---|---|---|
| Minimal, 3 features | "I value simplicity, I'm busy" | Overwhelmed users, switchers |
| Feature-rich overview | "I'm a power user, show me everything" | Experts, evaluators |
| Progressive disclosure | "I can grow into this" | Mixed audience |
| Technical specs prominent | "I'm technical, I'll evaluate" | Developers, engineers |
| Results/outcomes focus | "I just want it to work" | Non-technical, time-poor |
6. Price Positioning
| Positioning | Language | Identity Signal |
|---|---|---|
| Premium | "Invest in yourself", "For serious X" | Aspirational, professional |
| Value | "Affordable", "Best value" | Practical, budget-conscious |
| Free | "Free forever", "Open source" | Indie, skeptical, testing |
| Enterprise | "Contact us", "Custom pricing" | Large org, complex needs |
| Transparent | Clear pricing shown upfront | Trust-focused, no-nonsense |
Identity Mismatch Anti-Patterns
Trying to Appeal to Everyone
Symptom: Homepage shows enterprise logos AND indie testimonials AND student pricing Problem: No one feels it's for them specifically Fix: Choose primary persona, make others secondary
Aspirational Mismatch
Symptom: Premium visual design but budget pricing Problem: Users expect premium = expensive Fix: Align visual identity with price positioning
Social Proof Disconnect
Symptom: Enterprise testimonials but indie pricing Problem: "Why is it so cheap? What's wrong?" Fix: Use social proof matching your actual customer base
Tone Inconsistency
Symptom: "Crush your goals" headline, "gentle journey" body copy Problem: Feels like two different products Fix: Unify tone across all touchpoints
Identity Fit Assessment Matrix
For each persona, score 1-10:
PERSONA: [Name]
VISUAL IDENTITY
Does the color palette match their world? [/10]
Does typography feel appropriate? [/10]
Do images reflect their context? [/10]
Is visual complexity appropriate? [/10]
LANGUAGE
Does headline speak their language? [/10]
Is jargon level appropriate? [/10]
Does tone match their expectations? [/10]
SOCIAL PROOF
Are testimonials from people like them? [/10]
Are logos/badges relevant to them? [/10]
Are numbers meaningful to their context? [/10]
ASPIRATION
Does this align with who they want to be? [/10]
Would they be proud to say they use this? [/10]
TOTAL IDENTITY FIT: [/120]Quick Reference: Domain-Specific Identity Signals
B2B SaaS
- Logo walls (customers)
- Integration badges
- Security certifications
- "Trusted by X teams"
- Case study links
Consumer Apps
- User-generated content
- Community size
- App store ratings
- Influencer mentions
- Lifestyle imagery
Developer Tools
- GitHub stars
- Open source badges
- Code examples prominent
- Technical docs linked
- Stack Overflow mentions
Health/Wellness
- Credentials (MD, PhD)
- Research citations
- Before/after results
- Privacy emphasis
- Calming imagery
Finance
- Regulatory compliance
- Encryption mention
- Insurance/guarantee
- Long track record
- Conservative design
Education
- Outcomes data
- Accreditation
- Instructor credentials
- Student testimonials
- Completion rates
Objection Catalog
Every user has objections. Great products acknowledge and address them before users articulate them.
The 7 Universal Objections
| Objection | Type | What They're Really Asking |
|---|---|---|
| "Is this legit?" | Trust | "Can I trust you with my data/money?" |
| "I've tried things before" | Skepticism | "Why is this different?" |
| "Too expensive" | Value | "Is this worth it?" |
| "Too complicated" | Effort | "How much work is this?" |
| "Not for people like me" | Identity | "Is this made for someone like me?" |
| "What if it doesn't work?" | Risk | "What do I lose if it fails?" |
| "I'll do it later" | Urgency | "Why now vs. someday?" |
Objection Responses by Type
Trust Objections
"Is this legit?"
| Counter-Strategy | Implementation |
|---|---|
| Social proof | "Trusted by 10,000+ users" |
| Authority | Press logos, awards, certifications |
| Transparency | Team photos, company info, physical address |
| Security signals | SSL, payment badges, privacy policy |
| Longevity | "Serving customers since 2018" |
Detection: No trust signals above the fold
Skepticism Objections
"I've tried things before"
| Counter-Strategy | Implementation |
|---|---|
| Acknowledge skepticism | "We get it—you've been let down" |
| Differentiation | "Unlike X, we do Y" |
| Case studies | "Here's how Sarah succeeded where she failed before" |
| Proof mechanism | "See results before you commit" |
| Specificity | Concrete metrics, not vague promises |
Detection: Generic claims without proof ("Best solution for X")
Value Objections
"Too expensive"
| Counter-Strategy | Implementation |
|---|---|
| ROI framing | "Saves 10 hours/week = $X value" |
| Comparison anchor | "Less than your daily coffee" |
| Payment options | "Pay monthly", "Start free" |
| Value stack | Show everything included |
| Cost of inaction | "Every day costs you $X" |
Detection: Price hidden or buried, no value justification
Effort Objections
"Too complicated"
| Counter-Strategy | Implementation |
|---|---|
| Time-to-value | "Get started in 5 minutes" |
| Simplicity proof | Show simple UI, not feature dump |
| Onboarding preview | "Here's exactly what happens next" |
| Support assurance | "We'll help you every step" |
| Templates/presets | "Start with proven templates" |
Detection: Feature-heavy homepage, no quick start path
Identity Objections
"Not for people like me"
| Counter-Strategy | Implementation |
|---|---|
| Targeted testimonials | People who look/sound like target user |
| Segment-specific pages | Landing pages for each persona |
| Language matching | Using their terminology |
| Visual identity | Design that signals "your tribe" |
| Anti-persona clarity | "Built for X, not Y" |
Detection: Generic testimonials, no specific persona targeting
Risk Objections
"What if it doesn't work?"
| Counter-Strategy | Implementation |
|---|---|
| Money-back guarantee | "30-day full refund, no questions" |
| Free trial | "Try it free for 14 days" |
| Low-commitment start | Free tier, freemium model |
| Success guarantee | "We'll work with you until it works" |
| Social proof of success | "97% of users see results in 30 days" |
Detection: No risk reversers visible, no trial/demo option
Urgency Objections
"I'll do it later"
| Counter-Strategy | Implementation |
|---|---|
| Cost of delay | "Every day you wait costs $X" |
| Limited time offer | "Price increases in 7 days" |
| Scarcity | "Only 3 spots left this month" |
| Momentum building | "Most people see results in week 1" |
| FOMO | "Join 500+ people who started this week" |
Detection: No urgency drivers, no cost of inaction
Objections by Product Type
B2B SaaS
| Common Objection | Counter |
|---|---|
| "Security concerns" | SOC2, GDPR compliance badges |
| "Integration headaches" | List of integrations, API docs |
| "Getting team buy-in" | Team pricing, admin features |
| "Implementation time" | "Go live in 1 day" stories |
| "Switching cost" | Migration assistance, data import |
Consumer Apps
| Common Objection | Counter |
|---|---|
| "Privacy worries" | "We never sell your data" |
| "Another app I won't use" | "Daily active users: X" |
| "Hidden costs" | Transparent pricing upfront |
| "Platform lock-in" | Data export, cross-platform |
| "Battery/storage" | "Lightweight: only X MB" |
Health/Wellness
| Common Objection | Counter |
|---|---|
| "Is this medically sound?" | Credentials, research citations |
| "Will it work for me?" | Personalization, assessment |
| "Privacy of health data" | HIPAA compliance, encryption |
| "Not another fad" | Longevity, peer-reviewed backing |
| "Too alternative/too clinical" | Balanced approach messaging |
Finance Products
| Common Objection | Counter |
|---|---|
| "Is my money safe?" | Regulatory compliance, insurance |
| "Hidden fees" | Fee breakdown, comparison |
| "Too complex" | Simple onboarding, education |
| "Can I trust you?" | Track record, regulatory bodies |
| "What if you go bankrupt?" | Asset protection, guarantees |
Education/Courses
| Common Objection | Counter |
|---|---|
| "Will I actually learn?" | Outcomes data, completion rates |
| "Another course I won't finish" | Progress tracking, cohorts |
| "Is the content quality?" | Curriculum preview, credentials |
| "No time" | "15 min/day", self-paced |
| "Already know this" | Skill assessment, advanced track |
Objection Mapping Template
PERSONA: [Name]
OBJECTION TYPE CURRENTLY ADDRESSED? HOW/RECOMMENDATION
────────────────────────────────────────────────────────────────────────────────────────
"Is this legit?" Trust ○ Yes / ● No [Add testimonials]
"I've tried things before" Skepticism ○ Yes / ● No [Add differentiation]
"Too expensive" Value ○ Yes / ● No [Show ROI]
"Too complicated" Effort ○ Yes / ● No [Add quick start]
"Not for people like me" Identity ○ Yes / ● No [Targeted proof]
"What if it doesn't work" Risk ○ Yes / ● No [Add guarantee]
"I'll do it later" Urgency ○ Yes / ● No [Cost of delay]
────────────────────────────────────────────────────────────────────────────────────────
UNADDRESSED COUNT: [X/7]
TOP 3 TO FIX:
1. [Most impactful unaddressed objection]
2. [Second most impactful]
3. [Third most impactful]Objection Placement Strategy
Where to address objections on a landing page:
┌─────────────────────────────────────────────────────────────┐
│ HERO: Core promise + primary identity signal │
│ ↓ Trust: Social proof logos/numbers │
├─────────────────────────────────────────────────────────────┤
│ BENEFITS: Address Effort objection │
│ "Get started in 5 minutes" / "No technical skills needed" │
├─────────────────────────────────────────────────────────────┤
│ SOCIAL PROOF: Address Skepticism + Identity │
│ Testimonials from people like target persona │
├─────────────────────────────────────────────────────────────┤
│ HOW IT WORKS: Address Effort objection │
│ Simple steps, not overwhelming feature list │
├─────────────────────────────────────────────────────────────┤
│ PRICING: Address Value objection │
│ Clear pricing, value justification, comparison │
├─────────────────────────────────────────────────────────────┤
│ FAQ: Address remaining objections │
│ Security, refunds, support, specifics │
├─────────────────────────────────────────────────────────────┤
│ FINAL CTA: Address Risk + Urgency │
│ "Start free" + "30-day guarantee" + urgency driver │
└─────────────────────────────────────────────────────────────┘Scoring Templates
Detailed templates for comprehensive product appeal analysis.
Persona-Problem-Promise Mapping
For each target persona, document:
PERSONA: [Name - one sentence description]
PROBLEM
What's broken: [Current pain point]
Emotional weight: [How it feels - frustrated, anxious, stuck]
Current workaround: [What they do today]
Workaround friction: [Why the workaround sucks]
PROMISE
Core transformation: [Before state → After state]
Time to value: [How quickly they'll see results]
Proof mechanism: [How they'll know it worked]
IDENTITY
Self-image: [How they see themselves]
Aspiration: [Who they want to become]
Anti-identity: [Who they don't want to be seen as]Full Identity Fit Assessment
For each persona, rate 1-5 with evidence:
PERSONA: [Name]
Visual identity match: [1-5] "Does this look like something I'd use?"
Evidence: [Quote/observation from page]
Language resonance: [1-5] "Do they speak my language?"
Evidence: [Quote/observation from page]
Implied user match: [1-5] "Are people like me shown/implied?"
Evidence: [Quote/observation from page]
Values alignment: [1-5] "Do they care about what I care about?"
Evidence: [Quote/observation from page]
Status/aspiration fit: [1-5] "Does this fit who I am/want to be?"
Evidence: [Quote/observation from page]
─────────────────────────────────
IDENTITY FIT SCORE: [/25]Competitive Positioning Audit
YOUR PRODUCT: [Name]
ALTERNATIVES (list 3-5):
1. [Direct competitor]
2. [Indirect competitor / different approach]
3. [DIY / manual workaround]
4. [Do nothing / status quo]
POSITIONING TABLE:
─────────────────────────────────────────────────────────────────
│ You │ Alt 1 │ Alt 2 │ Alt 3 │ Alt 4
─────────────────────────────────────────────────────────────────
[Attribute 1] │ │ │ │ │
[Attribute 2] │ │ │ │ │
[Attribute 3] │ │ │ │ │
Price │ │ │ │ │
Trust level │ │ │ │ │
─────────────────────────────────────────────────────────────────
YOUR UNIQUE ANGLE:
[One sentence: Why you, not them?]
VULNERABILITIES:
[Where competitors beat you]Landing Page Appeal Scorecard
Score each element 1-10 with notes:
ELEMENT SCORE NOTES
───────────────────────────────────────────────────────────────
HEADLINE
Clear value proposition [/10]
Speaks to specific audience [/10]
Creates curiosity/urgency [/10]
VISUAL HIERARCHY
Eye path is intentional [/10]
Primary CTA is obvious [/10]
No competing focal points [/10]
TRUST SIGNALS
Social proof present [/10]
Credibility markers [/10]
Risk reducers visible [/10]
IDENTITY MATCH
Imagery reflects target user [/10]
Tone matches audience [/10]
Appropriate complexity level [/10]
FRICTION REDUCTION
Clear next step [/10]
Low commitment entry point [/10]
Objections addressed [/10]
───────────────────────────────────────────────────────────────
TOTAL [/150]
INTERPRETATION:
120-150: Strong appeal, optimize details
90-119: Good foundation, notable gaps
60-89: Significant issues, prioritize fixes
<60: Fundamental positioning problemsEmotional Journey Map
Plot the emotional arc of the user journey:
EMOTIONAL STATE
😊 Excited │ ╭──── Success!
│ ╭──╯
😐 Neutral │───────╮ ╭───╯
│ ╰──╮ ╭──╯
😟 Anxious │ ╰──╮ ╭──╯
│ ╰─╯ ← Commitment point
😰 Fearful │
└─────────────────────────────────────────────
Land Learn Consider Commit Use Success
INFLECTION POINTS:
1. [Where they get excited - what triggers it]
2. [Where anxiety peaks - what causes it]
3. [Where they might abandon - why]
4. [Where delight happens - what creates it]Priority Formula
Calculate recommendation priority:
Priority = (Users Affected × Severity) / Fix Difficulty
Where:
- Users Affected: 1-100 (percentage)
- Severity: 1-10 (impact on conversion)
- Fix Difficulty: 1-10 (effort required, lower is easier)
Example:
- Confusing headline: (100% × 9) / 3 = 300 → HIGH PRIORITY
- Missing testimonials: (80% × 6) / 5 = 96 → MEDIUM PRIORITY
- Footer links broken: (10% × 4) / 2 = 20 → LOW PRIORITYThe Trust Ladder
Trust builds in predictable stages. Users need to climb each rung before you can ask for more commitment.
The Complete Ladder
COMMITMENT LEVEL TRUST REQUIREMENTS
─────────────────────────────────────────────────────────────
5. PAY MONEY → Money-back guarantee, testimonials,
recognizable payment processor,
clear cancellation policy
4. CREATE ACCOUNT → Privacy policy visible, social login,
minimal required fields,
clear value for signing up
3. ENTER PERSONAL → Why you need it explained,
INFORMATION encryption/security mentioned,
no dark patterns
2. SPEND TIME → Clear progress indicators,
(>2 minutes) demonstrated value quickly,
easy exit without loss
1. CLICK/EXPLORE → Professional design, fast load,
no broken elements, clear navigation
0. LAND ON PAGE → Recognizable URL/brand, no warnings,
SSL certificate (https)Trust Requirements by Stage
Level 0: Landing
User has just arrived. Subconscious checks:
- [ ] URL looks legitimate (no typos, proper domain)
- [ ] HTTPS / padlock icon
- [ ] Page loads in <3 seconds
- [ ] No browser security warnings
- [ ] No popup overload
If failing: Visitor bounces immediately.
Level 1: Click/Explore
User is willing to look around:
- [ ] Professional design (no broken images, misaligned elements)
- [ ] Clear navigation (obvious where to go)
- [ ] Fast interactions (no lag on hover, click)
- [ ] Mobile-friendly if on mobile
- [ ] No aggressive popups
If failing: Visitor leaves within 10 seconds.
Level 2: Spend Time (>2 min)
User is interested enough to read/explore:
- [ ] Value demonstrated quickly (don't bury the lead)
- [ ] Progress indicators if multi-step
- [ ] Content is scannable (headers, bullets, images)
- [ ] Easy to leave without feeling trapped
- [ ] No autoplaying video with sound
If failing: Visitor skims and leaves.
Level 3: Enter Personal Info
User considers sharing email, name, etc:
- [ ] Why you need it is explained
- [ ] Privacy policy linked and accessible
- [ ] Minimal fields required (only what's necessary)
- [ ] No dark patterns (pre-checked marketing boxes)
- [ ] Security indicators present
If failing: User abandons form.
Level 4: Create Account
User is committing to a relationship:
- [ ] Social login options (reduce friction)
- [ ] Email-only option (don't force social)
- [ ] Clear benefit of having account
- [ ] Password requirements reasonable
- [ ] No surprise requirements after signup
If failing: User creates account but never returns.
Level 5: Pay Money
User trusts you with their money:
- [ ] Money-back guarantee (30 days standard)
- [ ] Recognizable payment processor (Stripe, PayPal)
- [ ] Clear pricing (no hidden fees revealed at checkout)
- [ ] Testimonials from paying customers
- [ ] Easy cancellation policy visible
If failing: User abandons cart.
Common Trust Violations
Asking Too Much Too Soon
Wrong: "Enter your email to see our pricing" Right: Show pricing openly, ask for email to get trial
Wrong: "Create account to browse features" Right: Let them explore, ask for account to save progress
Dark Patterns That Kill Trust
| Pattern | What It Looks Like | Better Alternative |
|---|---|---|
| Confirm-shaming | "No thanks, I don't want to save money" | "No thanks" or "Maybe later" |
| Hidden costs | Fees revealed at checkout | Show total price upfront |
| Forced continuity | Free trial auto-converts | Clear reminder before charge |
| Roach motel | Easy signup, impossible cancel | One-click cancel |
| Misdirection | Tiny "no" button, huge "yes" | Equal prominence for both |
Missing Trust Signals by Industry
| Industry | Expected Signals | Users Get Suspicious Without |
|---|---|---|
| E-commerce | SSL, reviews, return policy | Payment badges |
| SaaS | Customer logos, testimonials | Security certifications |
| Healthcare | HIPAA badge, credentials | Privacy policy |
| Finance | Regulatory compliance, encryption | Security details |
| Education | Accreditation, outcomes data | Instructor credentials |
Trust Audit Checklist
For each commitment level you're asking for, answer:
1. What trust signals are present at this stage?
- List every trust-building element visible
2. What objections might arise here?
- Put yourself in a skeptical user's shoes
3. What's missing that competitors provide?
- Compare against 2-3 alternatives
4. Is the ask proportional to the value shown?
- Users should feel they've received more than they've given
Optimizing Trust Flow
Progressive Value Revelation
WRONG:
Land → Account required → [Wall] → See value
RIGHT:
Land → See partial value → Want more → Account → Full valueTrust-Building Sequence
1. Demonstrate before asking 2. Explain why you need what you're asking for 3. Offer alternatives (social login, guest checkout) 4. Reduce risk (guarantee, free trial) 5. Prove with social proof matching their persona
Quick Trust Wins
| Fix | Effort | Impact |
|---|---|---|
| Add SSL (https) | Low | High |
| Add customer count ("10,000+ users") | Low | Medium |
| Add recognizable payment badges | Low | High |
| Show team/founder photos | Medium | Medium |
| Add money-back guarantee | Low | High |
| Include testimonials with photos | Medium | High |
| Show press/media logos | Medium | Medium |
#!/usr/bin/env python3
"""
Product Appeal Scorer - Structured analysis of product desirability
Analyzes landing pages and generates appeal scores across the
Desirability Triangle: Identity Fit, Problem Urgency, Trust Signals.
Usage:
python appeal_scorer.py <url>
python appeal_scorer.py --file <screenshot.png>
python appeal_scorer.py --interactive
Output: JSON with scores and recommendations
"""
import sys
import json
import argparse
from dataclasses import dataclass, asdict
from typing import List, Optional, Dict
from enum import Enum
class Priority(Enum):
IMMEDIATE = "immediate"
MEDIUM = "medium"
LONG_TERM = "long_term"
@dataclass
class Score:
"""Individual score with reasoning."""
value: int # 1-10
reasoning: str
evidence: str
@dataclass
class TriangleVertex:
"""One vertex of the Desirability Triangle."""
name: str
overall: Score
sub_scores: Dict[str, Score]
@dataclass
class Objection:
"""User objection and how it's addressed."""
objection: str
type: str # trust, skepticism, value, effort, identity, risk, urgency
addressed: bool
how_addressed: Optional[str]
recommendation: Optional[str]
@dataclass
class Recommendation:
"""Prioritized recommendation."""
title: str
description: str
impact: str
effort: str
priority: Priority
@dataclass
class FiveSecondTest:
"""Results of 5-second test simulation."""
what_is_this: Score
who_is_it_for: Score
core_promise: Score
next_action: Score
overall: int
@dataclass
class AppealAnalysis:
"""Complete appeal analysis output."""
url: Optional[str]
personas: List[str]
triangle: Dict[str, TriangleVertex]
five_second_test: FiveSecondTest
objections: List[Objection]
recommendations: List[Recommendation]
overall_score: int
summary: List[str]
def create_empty_analysis() -> AppealAnalysis:
"""Create template for manual analysis."""
# Template scores
template_score = Score(value=0, reasoning="[Analyze and fill]", evidence="[Quote from page]")
# Identity Fit vertex
identity_fit = TriangleVertex(
name="Identity Fit",
overall=template_score,
sub_scores={
"visual_match": Score(0, "Does design match target user expectations?", "[evidence]"),
"language_resonance": Score(0, "Does copy speak their language?", "[evidence]"),
"implied_user": Score(0, "Are people like them shown/implied?", "[evidence]"),
"values_alignment": Score(0, "Do stated values match user values?", "[evidence]"),
"aspiration_fit": Score(0, "Does this fit who they want to be?", "[evidence]"),
}
)
# Problem Urgency vertex
problem_urgency = TriangleVertex(
name="Problem Urgency",
overall=template_score,
sub_scores={
"pain_acknowledged": Score(0, "Is user's pain point clearly named?", "[evidence]"),
"emotional_resonance": Score(0, "Does it connect to how problem feels?", "[evidence]"),
"solution_clarity": Score(0, "Is it clear how this solves the problem?", "[evidence]"),
"time_to_value": Score(0, "Is it clear how quickly they'll see results?", "[evidence]"),
"why_now": Score(0, "Is there urgency to act now vs later?", "[evidence]"),
}
)
# Trust Signals vertex
trust_signals = TriangleVertex(
name="Trust Signals",
overall=template_score,
sub_scores={
"professional_execution": Score(0, "Does it look legitimate and polished?", "[evidence]"),
"social_proof": Score(0, "Are testimonials/logos/numbers present?", "[evidence]"),
"risk_reduction": Score(0, "Are guarantees/free trials/demos offered?", "[evidence]"),
"credibility_markers": Score(0, "Press, awards, certifications?", "[evidence]"),
"transparency": Score(0, "Are pricing, terms, team visible?", "[evidence]"),
}
)
# 5-Second Test
five_second = FiveSecondTest(
what_is_this=Score(0, "Can visitor identify product category?", "[evidence]"),
who_is_it_for=Score(0, "Is target audience immediately clear?", "[evidence]"),
core_promise=Score(0, "Is value proposition obvious?", "[evidence]"),
next_action=Score(0, "Is primary CTA prominent and clear?", "[evidence]"),
overall=0
)
# Common objections
objections = [
Objection("Is this legit?", "trust", False, None, "Add trust badges, testimonials"),
Objection("I've tried things before", "skepticism", False, None, "Show differentiation, case studies"),
Objection("Too expensive", "value", False, None, "Demonstrate ROI, show pricing early"),
Objection("Too complicated", "effort", False, None, "Show simple onboarding, quick wins"),
Objection("Not for people like me", "identity", False, None, "Show relatable testimonials"),
Objection("What if it doesn't work?", "risk", False, None, "Money-back guarantee, free trial"),
Objection("I'll do it later", "urgency", False, None, "Show cost of delay, limited offer"),
]
return AppealAnalysis(
url=None,
personas=["[Persona 1]", "[Persona 2]"],
triangle={
"identity_fit": identity_fit,
"problem_urgency": problem_urgency,
"trust_signals": trust_signals,
},
five_second_test=five_second,
objections=objections,
recommendations=[],
overall_score=0,
summary=[]
)
def calculate_overall_score(analysis: AppealAnalysis) -> int:
"""Calculate weighted overall appeal score."""
# Triangle vertices (equal weight)
identity = analysis.triangle["identity_fit"].overall.value
urgency = analysis.triangle["problem_urgency"].overall.value
trust = analysis.triangle["trust_signals"].overall.value
triangle_score = (identity + urgency + trust) / 3
# 5-second test
five_sec = analysis.five_second_test.overall
# Weighted: Triangle 70%, 5-second 30%
overall = (triangle_score * 0.7) + (five_sec * 0.3)
return round(overall)
def interpret_score(score: int) -> str:
"""Interpret overall score."""
if score >= 8:
return "Strong appeal - optimize details"
elif score >= 6:
return "Good foundation - address notable gaps"
elif score >= 4:
return "Significant issues - prioritize fixes"
else:
return "Fundamental positioning problems - rethink approach"
def generate_recommendations(analysis: AppealAnalysis) -> List[Recommendation]:
"""Generate prioritized recommendations based on analysis."""
recommendations = []
# Check each triangle vertex
for vertex_name, vertex in analysis.triangle.items():
if vertex.overall.value < 5:
recommendations.append(Recommendation(
title=f"Improve {vertex.name}",
description=f"{vertex.name} scored {vertex.overall.value}/10. {vertex.overall.reasoning}",
impact="high",
effort="medium",
priority=Priority.IMMEDIATE
))
# Check sub-scores
for sub_name, sub_score in vertex.sub_scores.items():
if sub_score.value < 4:
recommendations.append(Recommendation(
title=f"Fix {sub_name.replace('_', ' ').title()}",
description=sub_score.reasoning,
impact="medium",
effort="low",
priority=Priority.IMMEDIATE
))
# Check 5-second test
fst = analysis.five_second_test
if fst.what_is_this.value < 5:
recommendations.append(Recommendation(
title="Clarify product category",
description="Visitors don't immediately understand what this is",
impact="high",
effort="low",
priority=Priority.IMMEDIATE
))
if fst.core_promise.value < 5:
recommendations.append(Recommendation(
title="Strengthen headline value proposition",
description="Core promise isn't immediately clear",
impact="high",
effort="low",
priority=Priority.IMMEDIATE
))
# Check objections
unaddressed = [o for o in analysis.objections if not o.addressed]
for objection in unaddressed[:3]: # Top 3 unaddressed
recommendations.append(Recommendation(
title=f"Address objection: {objection.objection}",
description=objection.recommendation or "Add content addressing this concern",
impact="medium",
effort="medium",
priority=Priority.MEDIUM
))
return recommendations
def serialize_analysis(analysis: AppealAnalysis) -> dict:
"""Convert analysis to JSON-serializable dict."""
def convert(obj):
if isinstance(obj, Enum):
return obj.value
elif hasattr(obj, '__dataclass_fields__'):
return {k: convert(v) for k, v in asdict(obj).items()}
elif isinstance(obj, dict):
return {k: convert(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [convert(i) for i in obj]
return obj
return convert(analysis)
def print_template():
"""Print empty template for manual analysis."""
analysis = create_empty_analysis()
print(json.dumps(serialize_analysis(analysis), indent=2))
def print_summary(analysis: AppealAnalysis):
"""Print human-readable summary."""
print("\n" + "="*60)
print("PRODUCT APPEAL ANALYSIS")
print("="*60 + "\n")
# Overall score
overall = calculate_overall_score(analysis)
print(f"OVERALL APPEAL SCORE: {overall}/10")
print(f"Interpretation: {interpret_score(overall)}\n")
# Triangle scores
print("DESIRABILITY TRIANGLE:")
print("-"*40)
for name, vertex in analysis.triangle.items():
print(f" {vertex.name}: {vertex.overall.value}/10")
print()
# 5-Second Test
print("5-SECOND TEST:")
print("-"*40)
fst = analysis.five_second_test
print(f" What is this: {fst.what_is_this.value}/10")
print(f" Who is it for: {fst.who_is_it_for.value}/10")
print(f" Core promise: {fst.core_promise.value}/10")
print(f" Next action: {fst.next_action.value}/10")
print()
# Top recommendations
recommendations = generate_recommendations(analysis)
if recommendations:
print("TOP RECOMMENDATIONS:")
print("-"*40)
for i, rec in enumerate(recommendations[:5], 1):
print(f" {i}. [{rec.priority.value.upper()}] {rec.title}")
print(f" {rec.description}")
print()
print("="*60 + "\n")
def main():
parser = argparse.ArgumentParser(
description="Product Appeal Scorer - Analyze product desirability"
)
parser.add_argument("url", nargs="?", help="URL to analyze")
parser.add_argument("--template", action="store_true",
help="Print empty template for manual analysis")
parser.add_argument("--input", "-i", type=str,
help="Read analysis from JSON file")
parser.add_argument("--output", "-o", type=str,
help="Write analysis to JSON file")
parser.add_argument("--summary", action="store_true",
help="Print human-readable summary")
args = parser.parse_args()
if args.template:
print_template()
return
if args.input:
with open(args.input, 'r') as f:
data = json.load(f)
# Reconstruct analysis from JSON
print(f"Loaded analysis from {args.input}")
# For now, just print summary
print(json.dumps(data, indent=2))
return
if args.url:
print(f"URL analysis requires Claude to populate scores.")
print(f"Use --template to get empty template, fill it, then use --input")
print(f"\nTarget URL: {args.url}")
analysis = create_empty_analysis()
analysis.url = args.url
if args.output:
with open(args.output, 'w') as f:
json.dump(serialize_analysis(analysis), f, indent=2)
print(f"\nTemplate written to {args.output}")
else:
print_template()
return
# Default: show usage
parser.print_help()
if __name__ == "__main__":
main()