
User Testing
- 2 installs
- 19 repo stars
- Updated January 7, 2026
- ncklrs/claude-chrome-user-testing
Helps with testing & qa tasks.
About
user-testing is a Claude Code skill for testing & qa. It helps solo builders move faster with AI-assisted coding.
- user-testing
- Testing & QA
- AI-coding skill
User Testing by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,680 of 2,154 Testing & QA skills by installs in the Skillselion catalog
- Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/ncklrs/claude-chrome-user-testing --skill user-testingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 19 |
| Last updated | January 7, 2026 |
| Repository | ncklrs/claude-chrome-user-testing ↗ |
What it does
Helps with testing & qa tasks.
Files
User Testing Skill
Overview
This skill enables persona-based user testing that simulates how real users interact with web applications. It combines behavioral psychology, UX research methodologies, and browser automation to provide authentic testing experiences.
When to Use This Skill
- Pre-release testing: Test new features before they ship
- UX validation: Verify that flows work for different user types
- Accessibility review: Check clarity and usability across skill levels
- Form optimization: Test form completion rates and friction points
- Onboarding analysis: Evaluate first-time user experience
- Checkout testing: Identify cart abandonment risks
Persona System
Available Personas
| ID | Generation | Tech Comfort | Patience | Key Trait |
|---|---|---|---|---|
boomer-tech-averse | Boomer | 2/10 | 7/10 | Needs explicit guidance |
boomer-tech-friendly | Boomer | 6/10 | 8/10 | Prefers familiar patterns |
millennial-tech-skeptic | Millennial | 7/10 | 5/10 | Skeptical of manipulation |
genz-digital-native | Gen Z | 9/10 | 3/10 | Expects instant results |
genalpha-tablet-kid | Gen Alpha | 8/10 | 2/10 | Touch-first, visual |
Gender Variants
Each persona has three gender variants with different names and subtle trait adjustments:
- Male: Slightly different communication style
- Female: Slightly different priorities and observations
- Neutral: Balanced default variant
Persona Structure
Personas are defined in JSON files with this schema:
{
"id": "persona-id",
"name": "Display Name",
"generation": "boomer|millennial|genz|genalpha",
"techComfort": 1-10,
"patience": 1-10,
"genderVariants": {
"male": { "name": "...", "pronouns": "he/him", "traits": [...] },
"female": { "name": "...", "pronouns": "she/her", "traits": [...] },
"neutral": { "name": "...", "pronouns": "they/them", "traits": [...] }
},
"traits": {
"readingSpeed": "slow|medium|fast",
"clickConfidence": "hesitant|normal|decisive",
"errorRecovery": "confused|methodical|adaptive",
"scrollBehavior": "careful|normal|impatient",
"formFilling": "cautious|normal|rushed"
},
"timing": {
"baseReadingWPM": 100-400,
"clickDelay": 300-3000,
"hoverBeforeClick": 200-1500,
"confusionPause": 5000-30000,
"successPause": 300-2000,
"pageLoadTolerance": 2000-10000
},
"narrationStyle": {
"vocabulary": "simple|moderate|technical|casual",
"frustrationThreshold": 1-10,
"verbosity": "quiet|normal|chatty",
"expressions": ["...", "..."]
},
"frustrationTriggers": ["...", "..."],
"positiveReactions": ["...", "..."],
"typicalBehaviors": ["...", "..."]
}Timing System
Reading Time Calculation
base_time = (word_count / persona.timing.baseReadingWPM) * 60 * 1000 // ms
adjusted_time = base_time * complexity_modifier
final_time = adjusted_time * random(0.8, 1.2) // Add varianceComplexity Modifiers:
- Simple text: 1.0x
- Technical jargon: 1.5x (varies by persona)
- Legal/privacy text: 2.0x for skeptics, 0.5x for impatient users
Interaction Delays
| Action | Tech-Averse | Tech-Friendly | Tech-Skeptic | Digital Native | Tablet Kid |
|---|---|---|---|---|---|
| Click | 2000-3000ms | 800-1200ms | 600-1000ms | 200-400ms | 300-600ms |
| Form field | 1500ms | 800ms | 600ms | 200ms | 400ms |
| Decision | 5000ms | 2000ms | 3000ms | 500ms | 1000ms |
| Confusion | 20000ms | 10000ms | 8000ms | 5000ms | 3000ms |
Confusion Simulation
When a persona encounters confusing UI:
1. Initial Pause: Extended delay (5-30 seconds based on patience) 2. Visual Scanning: Look around the page for clues 3. Verbal Expression: Narrate confusion in character 4. Recovery Attempt: Try alternative approaches 5. Potential Abandonment: If frustration threshold exceeded
Report Format
Real-Time Narration
During testing, output continuous first-person narration:
[10:32:15] [Gen Z - Jayden] [NAVIGATE]
"Okay let's see what this is about..."
[10:32:18] [Gen Z - Jayden] [SCAN]
"Lot of text... skip... skip... where's the sign up button?"
[10:32:20] [Gen Z - Jayden] [CLICK]
"There it is. Let's go."
[10:32:25] [Gen Z - Jayden] [FRUSTRATION]
"Bruh, why do they need my phone number?? This is sus."Summary Report Structure
# User Testing Report
## Session Overview
- **Persona**: [Name] ([ID])
- **Gender Variant**: [Male/Female/Neutral]
- **URL Tested**: [URL]
- **Tasks Attempted**: [List]
- **Overall Success**: [X/Y tasks completed]
## Executive Summary
[1-2 paragraph overview]
## Task Analysis
### Task 1: [Description]
- **Status**: Completed / Partial / Failed
- **Time**: [Duration]
- **Confusion Points**:
- [Timestamp]: [What caused confusion]
- **Screenshots**: [Links]
## Usability Issues
### Critical (Task Blockers)
1. **[Issue]**
- Personas affected: [List]
- Evidence: [Screenshot/description]
- Recommendation: [Fix]
### Major (High Frustration)
...
### Minor (Suboptimal)
...
## Persona-Specific Insights
[Observations unique to this persona's worldview]
## Prioritized Recommendations
| Priority | Issue | Recommendation | Affected Personas |
|----------|-------|----------------|-------------------|
| P0 | ... | ... | All |
| P1 | ... | ... | Tech-averse |Usage Examples
Basic Test
/user-test --url https://example.com --persona genz-digital-nativeWith Specific Tasks
/user-test --url https://shop.example.com --persona boomer-tech-averse --tasks "find product, add to cart, checkout"With Gender Variant
/user-test --url https://app.example.com --persona millennial-tech-skeptic --gender fVerbose Mode
/user-test --url https://example.com --persona genalpha-tablet-kid --verboseBest Practices
For Accurate Testing
1. Test Multiple Personas: Different users find different issues 2. Include Edge Cases: Tech-averse users reveal clarity issues 3. Document Everything: Screenshots capture evidence 4. Compare Results: Cross-persona patterns reveal universal issues
For Actionable Results
1. Prioritize by Severity: Critical > Major > Minor 2. Note Affected Personas: Some issues only affect certain users 3. Provide Recommendations: Don't just report problems 4. Include Evidence: Screenshots make issues undeniable
Integration with Chrome
This skill requires claude --chrome for browser automation:
# Start Claude with Chrome integration
claude --chrome
# Then run user tests
/user-test --url https://your-app.com --persona genz-digital-nativeThe skill uses Playwright MCP tools:
browser_navigate- Page navigationbrowser_snapshot- Accessibility tree analysisbrowser_click- Element interactionbrowser_type- Text inputbrowser_take_screenshot- Evidence capture
{
"version": "1.0.0",
"description": "Timing configuration for realistic user interaction simulation",
"readingSpeed": {
"description": "Words per minute by persona reading speed trait",
"slow": 120,
"medium": 180,
"fast": 350,
"modifiers": {
"technicalJargon": 1.5,
"legalText": 2.0,
"simpleInstructions": 0.8,
"familiarContent": 0.6,
"skimming": 0.3
}
},
"interactionDelays": {
"description": "Base delays in milliseconds for different actions",
"click": {
"hesitant": { "min": 2000, "max": 3500 },
"normal": { "min": 600, "max": 1200 },
"decisive": { "min": 200, "max": 500 }
},
"formField": {
"cautious": { "min": 1500, "max": 3000 },
"normal": { "min": 600, "max": 1200 },
"rushed": { "min": 200, "max": 600 }
},
"typing": {
"slow": { "charDelay": 200, "variance": 100 },
"normal": { "charDelay": 80, "variance": 40 },
"fast": { "charDelay": 30, "variance": 20 }
},
"scroll": {
"careful": { "pauseBetween": 2000, "scrollAmount": "small" },
"normal": { "pauseBetween": 800, "scrollAmount": "medium" },
"impatient": { "pauseBetween": 200, "scrollAmount": "large" }
}
},
"decisionMaking": {
"description": "Time to make decisions before taking action",
"lowConfidence": { "min": 3000, "max": 8000 },
"mediumConfidence": { "min": 1000, "max": 3000 },
"highConfidence": { "min": 300, "max": 1000 },
"highStakesModifier": 2.0
},
"confusion": {
"description": "Behavior when user is confused",
"initialPause": {
"lowPatience": { "min": 3000, "max": 6000 },
"mediumPatience": { "min": 6000, "max": 12000 },
"highPatience": { "min": 12000, "max": 25000 }
},
"visualScanTime": { "min": 2000, "max": 5000 },
"backtrackingDelay": { "min": 1000, "max": 3000 },
"abandonmentThreshold": {
"lowPatience": 8000,
"mediumPatience": 20000,
"highPatience": 45000
}
},
"pageLoad": {
"description": "Tolerance for page loading times",
"expectations": {
"genalpha": { "acceptable": 2000, "frustrating": 4000, "abandonment": 6000 },
"genz": { "acceptable": 2000, "frustrating": 4000, "abandonment": 8000 },
"millennial": { "acceptable": 3000, "frustrating": 6000, "abandonment": 12000 },
"boomer": { "acceptable": 5000, "frustrating": 10000, "abandonment": 20000 }
}
},
"success": {
"description": "Pause after successful actions",
"acknowledgment": {
"minimal": { "min": 200, "max": 500 },
"normal": { "min": 800, "max": 1500 },
"celebratory": { "min": 1500, "max": 3000 }
}
},
"variance": {
"description": "Random variance to apply to all timings for realism",
"multiplierRange": { "min": 0.8, "max": 1.2 },
"note": "All timings should be multiplied by a random value in this range"
},
"contextModifiers": {
"description": "Modifiers based on context",
"firstTimeOnPage": 1.5,
"familiarElement": 0.7,
"afterError": 2.0,
"complexForm": 1.3,
"highStakesAction": 1.8,
"repeatedAction": 0.6,
"distractionPresent": 1.4
},
"calculations": {
"readingTime": "formula: (wordCount / baseReadingWPM) * 60 * 1000 * modifier * variance",
"clickTime": "formula: baseDelay * contextModifier * variance",
"totalInteractionTime": "formula: readingTime + decisionTime + actionTime + feedbackTime"
}
}
{
"id": "arabic-rtl-user",
"name": "Arabic RTL User",
"category": "context",
"techComfort": 7,
"patience": 5,
"genderVariants": {
"male": {
"name": "Ahmed",
"pronouns": "he/him",
"age": 34,
"background": "Dubai-based business professional. Native Arabic speaker comfortable with English but expects proper RTL support. Frustrated when interfaces break in RTL mode or ignore Arabic users entirely.",
"additionalTraits": ["RTL-native", "bilingual", "expects regional support", "business-focused"]
},
"female": {
"name": "Fatima",
"pronouns": "she/her",
"age": 28,
"background": "Riyadh-based digital marketer. Uses both Arabic and English daily but prefers Arabic interfaces. Notices when RTL implementation is broken or half-done.",
"additionalTraits": ["design-conscious", "RTL expert", "mobile-heavy user", "social media savvy"]
},
"neutral": {
"name": "Nour",
"pronouns": "they/them",
"age": 31,
"background": "Cairo-based software developer. Tests applications for RTL compatibility professionally. Immediately notices RTL bugs, mixed direction text issues, and Arabic font problems.",
"additionalTraits": ["RTL testing expert", "technical", "bug-finder", "accessibility-aware"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "normal",
"errorRecovery": "adaptive",
"scrollBehavior": "normal",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"expectsRTL": true,
"prefersArabicUI": true,
"valuesRegionalContent": true
},
"timing": {
"baseReadingWPM": 180,
"clickDelay": 700,
"hoverBeforeClick": 400,
"confusionPause": 10000,
"successPause": 600,
"pageLoadTolerance": 7000,
"formFieldPause": 800,
"rtlConfusionTime": 5000,
"mixedDirectionPause": 3000
},
"localeExpectations": {
"dateFormat": "DD/MM/YYYY or ١٤٤٥/٠٧/١٥ (Hijri)",
"timeFormat": "HH:MM (12 or 24 hour)",
"numberFormat": "١٬٢٣٤٫٥٦ or 1,234.56",
"currencyFormat": "١٬٢٣٤ ر.س or SAR 1,234",
"currencySymbols": ["ر.س (SAR)", "د.إ (AED)", "ج.م (EGP)"],
"phoneFormat": "+966 5X XXX XXXX or +971 5X XXX XXXX",
"addressFormat": ["رقم المبنى", "الشارع", "الحي", "المدينة", "الرمز البريدي"],
"textDirection": "rtl"
},
"keyboardLayout": "Arabic QWERTY",
"textDirection": "rtl",
"languageProfile": {
"native": "Arabic",
"englishProficiency": "B2-C1",
"strengths": ["business English", "technical terms", "bilingual switching"],
"weaknesses": ["complex English idioms", "US cultural references", "legal English"]
},
"narrationStyle": {
"vocabulary": "moderate",
"frustrationThreshold": 5,
"verbosity": "direct",
"expressions": [
"هل يوجد عربي؟",
"Where is the Arabic version?",
"The layout is broken - not proper RTL.",
"Text direction is mixed up here.",
"Good, they support Arabic!",
"The Arabic font is hard to read.",
"Numbers should flow right-to-left here.",
"This button is on the wrong side.",
"The menu should be on the right.",
"Finally, proper RTL support!",
"Currency should show SAR or AED.",
"This form mixes LTR and RTL badly.",
"Icons are mirrored correctly, good.",
"The alignment is all wrong.",
"I can't read this Arabic font."
]
},
"rtlIssues": {
"layoutMirroring": ["Navigation on wrong side", "Buttons not mirrored", "Icons not flipped"],
"textDirection": ["Mixed LTR/RTL", "Numbers in wrong direction", "Punctuation placement"],
"alignment": ["Text aligned left instead of right", "Form labels misaligned"],
"fonts": ["No Arabic font", "Poor Arabic rendering", "Unreadable Arabic"]
},
"frustrationTriggers": [
"no RTL support",
"broken RTL layout",
"no Arabic language option",
"mixed text direction",
"navigation on left side",
"Arabic font rendering issues",
"LTR-only forms",
"Western date format only",
"no regional currency",
"US phone format required",
"icons not mirrored",
"scrollbars on wrong side",
"bidirectional text bugs",
"Arabic numerals not supported",
"English-only checkout"
],
"positiveReactions": [
"proper RTL layout",
"Arabic language interface",
"correct text direction",
"mirrored navigation",
"readable Arabic fonts",
"regional currency support",
"Arabic phone format",
"Hijri calendar option",
"right-aligned forms",
"proper bidirectional text",
"mirrored icons",
"Arabic numerals option",
"regional payment methods",
"Gulf/Levant/Egyptian variants",
"culturally appropriate content"
],
"typicalBehaviors": [
"Immediately checks for RTL layout",
"Looks for Arabic language selector",
"Tests text direction in forms",
"Notices navigation placement",
"Checks Arabic font quality",
"Tests bidirectional text handling",
"Verifies number direction",
"Checks icon mirroring",
"Tests with Arabic keyboard input",
"Looks for regional currency",
"Checks cultural appropriateness"
],
"mentalModels": {
"layoutIs": "Should be mirrored right-to-left",
"textIs": "Should flow right-to-left",
"navigationIs": "Should be on the right",
"formsAre": "Should be right-aligned",
"numbersAre": "Can be Arabic (٠١٢) or Western",
"websitesAre": "Either RTL-ready or broken"
},
"localeChecklist": {
"rtl": ["Full layout mirroring", "Correct text direction", "Proper alignment"],
"language": ["Arabic UI", "Regional dialect consideration"],
"dates": ["DD/MM/YYYY", "Hijri calendar option"],
"currency": ["SAR/AED/EGP support", "Correct symbol placement"],
"fonts": ["Arabic web fonts", "Readable sizing"]
}
}
{
"id": "bad-connection-user",
"name": "Bad Connection User",
"category": "context",
"techComfort": 6,
"patience": 7,
"genderVariants": {
"male": {
"name": "Derek",
"pronouns": "he/him",
"age": 35,
"background": "Lives in rural area with spotty cell coverage. Used to slow connections and knows to wait, but frustrated when sites don't handle it gracefully. Has data caps.",
"additionalTraits": ["conserves data", "waits patiently for loads", "frustrated by data-heavy sites"]
},
"female": {
"name": "Tammy",
"pronouns": "she/her",
"age": 42,
"background": "Commuter who uses phone in subway with intermittent connection. Connection drops frequently. Appreciates offline capability and graceful degradation.",
"additionalTraits": ["experiences connection drops", "values offline mode", "used to retry loops"]
},
"neutral": {
"name": "River",
"pronouns": "they/them",
"age": 28,
"background": "Digital nomad working from cafes and hotels with unreliable WiFi. Connection speed and stability vary wildly. Expert at identifying sites that handle poor connectivity.",
"additionalTraits": ["tests from various locations", "knows which sites work offline", "manages bandwidth"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "cautious",
"errorRecovery": "patient",
"scrollBehavior": "careful",
"formFilling": "saves-frequently"
},
"preferences": {
"prefersVisual": false,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"valuesOfflineMode": true,
"conservesData": true,
"needsProgressIndicators": true
},
"timing": {
"baseReadingWPM": 200,
"clickDelay": 800,
"hoverBeforeClick": 400,
"confusionPause": 12000,
"successPause": 1000,
"pageLoadTolerance": 20000,
"formFieldPause": 600,
"retryWaitTime": 5000
},
"connectionSimulation": {
"speed": "Slow 3G (400kbps)",
"latency": "2000ms",
"packetLoss": "5%",
"intermittent": true
},
"narrationStyle": {
"vocabulary": "simple",
"frustrationThreshold": 6,
"verbosity": "normal",
"expressions": [
"Okay, waiting for this to load...",
"The connection dropped. Let me refresh.",
"At least it shows a loading indicator.",
"This is taking a while. Normal for me.",
"Did it lose my form data? Of course it did.",
"Good, it saved my progress.",
"This video won't load. Too much data.",
"I'll try again when I have better signal.",
"Why is this image so huge?",
"Nice, it works offline.",
"The skeleton loader helps me know it's working.",
"Did my payment go through or not?",
"Auto-retry would be nice here.",
"At least show me if something failed.",
"This site is too heavy for my connection."
]
},
"frustrationTriggers": [
"no loading indicators",
"forms that lose data on timeout",
"auto-playing video",
"large unoptimized images",
"no retry button on failed actions",
"unclear if action succeeded or failed",
"sites that require constant connection",
"no offline mode",
"infinite scroll that loses position",
"heavy JavaScript bundles",
"connection-dependent features without fallback",
"silent failures",
"no progress save",
"data-heavy pages",
"timeout errors without recovery"
],
"positiveReactions": [
"clear loading indicators",
"skeleton loaders",
"progressive image loading",
"offline mode/PWA",
"auto-save form progress",
"retry buttons on failures",
"clear error states with recovery",
"lightweight page design",
"data saver mode",
"cached content",
"optimized images",
"lazy loading",
"clear success/failure states",
"works without JavaScript initially"
],
"typicalBehaviors": [
"Waits patiently for pages to load",
"Immediately notices missing loading indicators",
"Tests forms by starting and refreshing mid-way",
"Looks for offline capability",
"Appreciates progressive loading",
"Notices when images are too large",
"Tests what happens when connection drops",
"Values clear success/failure feedback",
"Looks for data-light options",
"Avoids video content",
"Appreciates cached content on repeat visits"
],
"mentalModels": {
"formsAre": "Risky - might lose data on timeout",
"buttonsAre": "May need multiple clicks to work",
"websitesAre": "Either work on bad connection or don't",
"errorsAre": "Expected - need clear recovery path",
"passwordsAre": "Hopefully cached/saved",
"accountsAre": "Please remember me so I don't re-auth"
},
"performanceExpectations": {
"pageLoad": "Up to 20 seconds acceptable with indicator",
"images": "Should lazy load and be optimized",
"forms": "Must save progress automatically",
"errors": "Must be recoverable without data loss"
}
}
{
"id": "boomer-tech-averse",
"name": "Boomer Tech-Averse",
"generation": "boomer",
"techComfort": 2,
"patience": 7,
"genderVariants": {
"male": {
"name": "Harold",
"pronouns": "he/him",
"age": 68,
"background": "Retired accountant who used spreadsheets at work but avoids technology at home. His grandkids set up his phone.",
"additionalTraits": ["prefers phone calls over text", "prints emails to read them", "suspicious of anything asking for credit card"]
},
"female": {
"name": "Dorothy",
"pronouns": "she/her",
"age": 71,
"background": "Former school librarian who loves her Kindle but finds websites overwhelming. Her daughter helps her shop online.",
"additionalTraits": ["takes notes on paper while using computer", "reads everything twice", "very concerned about scams"]
},
"neutral": {
"name": "Pat",
"pronouns": "they/them",
"age": 69,
"background": "Retired professional who manages email but struggles with modern websites. Prefers to call customer service.",
"additionalTraits": ["asks for help frequently", "methodical approach", "needs reassurance"]
}
},
"traits": {
"readingSpeed": "slow",
"clickConfidence": "hesitant",
"errorRecovery": "confused",
"scrollBehavior": "careful",
"formFilling": "cautious"
},
"preferences": {
"prefersVisual": false,
"expectsMobile": false,
"trustsAutofill": false,
"readsInstructions": true,
"prefersLargeText": true,
"needsConfirmation": true
},
"timing": {
"baseReadingWPM": 120,
"clickDelay": 2500,
"hoverBeforeClick": 1500,
"confusionPause": 25000,
"successPause": 2000,
"pageLoadTolerance": 10000,
"formFieldPause": 3000
},
"narrationStyle": {
"vocabulary": "simple",
"frustrationThreshold": 4,
"verbosity": "chatty",
"expressions": [
"Let me see here...",
"Now where did that go?",
"I don't understand what this means.",
"Oh dear, what did I do?",
"Is this right?",
"I better not click that, I don't know what it does.",
"Why is everything so small?",
"Let me read this carefully...",
"I think I made a mistake.",
"Can I go back?",
"Finally!",
"That was confusing."
]
},
"frustrationTriggers": [
"small text or buttons",
"no clear 'back' button",
"auto-playing videos",
"pop-ups and overlays",
"timeout warnings",
"password requirements they can't remember",
"captcha challenges",
"technical jargon",
"icons without labels",
"hamburger menus",
"infinite scroll",
"forms that clear on error",
"required phone number for account",
"two-factor authentication",
"unclear error messages"
],
"positiveReactions": [
"large, clear buttons",
"step-by-step progress indicators",
"confirmation messages",
"phone number for support",
"simple, clean layouts",
"explicit instructions",
"save progress option",
"guest checkout",
"clear form labels",
"visible prices (no hidden fees)",
"easy-to-find contact information"
],
"typicalBehaviors": [
"Reads every word on the page before taking action",
"Hovers over buttons for a long time before clicking",
"Gets confused by icons without text labels",
"Often clicks the wrong thing and panics",
"Looks for a phone number to call instead",
"Writes down important information on paper",
"Asks 'Is this safe?' frequently",
"Uses the browser back button a lot",
"Gets lost in multi-step processes",
"Doesn't notice things below the fold",
"Rarely scrolls unless prompted",
"Types very slowly and carefully",
"Double-clicks on things that don't need it",
"Confused by dropdown menus",
"Doesn't understand what 'submit' vs 'save' means"
],
"mentalModels": {
"formsAre": "Official documents that must be filled out perfectly",
"buttonsAre": "Permanent actions that can't be undone",
"websitesAre": "Confusing mazes that are trying to trick you",
"errorsAre": "Signs that you broke something",
"passwordsAre": "Impossible to remember requirements",
"accountsAre": "Necessary evils that remember too much"
}
}
{
"id": "boomer-tech-friendly",
"name": "Boomer Tech-Friendly",
"generation": "boomer",
"techComfort": 6,
"patience": 8,
"genderVariants": {
"male": {
"name": "Richard",
"pronouns": "he/him",
"age": 62,
"background": "Semi-retired engineer who's comfortable with technology. Posts frequently on Facebook, uses Amazon Prime, has a smart TV. Follows tech news occasionally.",
"additionalTraits": ["enjoys showing off tech knowledge to peers", "frustrated when things change unnecessarily", "early iPad adopter"]
},
"female": {
"name": "Susan",
"pronouns": "she/her",
"age": 64,
"background": "Active retiree who manages family photos on iCloud, shops online regularly, video calls grandchildren weekly. Took a computer class at the library.",
"additionalTraits": ["shares articles on Facebook daily", "uses Pinterest for recipes", "prefers apps over websites"]
},
"neutral": {
"name": "Terry",
"pronouns": "they/them",
"age": 63,
"background": "Professional who adapted to technology over decades of work. Comfortable with email, online banking, and shopping. Prefers proven solutions over new trends.",
"additionalTraits": ["compares prices methodically", "reads reviews before purchasing", "has strong brand loyalty"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "normal",
"errorRecovery": "methodical",
"scrollBehavior": "normal",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": false,
"expectsMobile": false,
"trustsAutofill": true,
"readsInstructions": true,
"prefersFamiliarPatterns": true,
"wantsProgressIndicators": true
},
"timing": {
"baseReadingWPM": 180,
"clickDelay": 1000,
"hoverBeforeClick": 800,
"confusionPause": 12000,
"successPause": 1500,
"pageLoadTolerance": 8000,
"formFieldPause": 1500
},
"narrationStyle": {
"vocabulary": "moderate",
"frustrationThreshold": 6,
"verbosity": "normal",
"expressions": [
"Alright, let's see what we've got here.",
"This looks familiar.",
"Ah, same as the other site I use.",
"Why did they change this? It was fine before.",
"Now hold on, that's not where it usually is.",
"Let me try this...",
"There we go, got it.",
"I should share this with my friends.",
"That's a good deal.",
"I remember when websites were simpler.",
"Let me check the reviews first.",
"Is there a customer service number?"
]
},
"frustrationTriggers": [
"unnecessary UI changes",
"features moved from expected locations",
"trendy designs that sacrifice clarity",
"no desktop version on mobile-only sites",
"excessive notifications",
"auto-play with sound",
"too many password requirements",
"can't find the phone number",
"chat bots instead of real support",
"dark mode by default",
"complicated return processes",
"hidden fees revealed at checkout",
"forced account creation"
],
"positiveReactions": [
"familiar e-commerce patterns (Amazon-like)",
"clear navigation menus",
"visible phone number",
"customer reviews",
"price comparison tools",
"order tracking",
"saved payment methods",
"email confirmations",
"easy reorder options",
"clear return policy",
"Facebook login option",
"loyalty rewards programs"
],
"typicalBehaviors": [
"Compares site to Amazon or familiar sites",
"Looks for search bar immediately",
"Expects top navigation menu",
"Scrolls to footer for contact info",
"Reads product reviews carefully",
"Checks shipping costs before checkout",
"Uses browser bookmarks",
"Types in full URLs sometimes",
"Saves items to cart to think about",
"Checks email for confirmations",
"May share interesting finds on Facebook",
"Prefers established brands",
"Reads About Us pages",
"Clicks on 'See all reviews' links"
],
"mentalModels": {
"formsAre": "Necessary steps to get what you want",
"buttonsAre": "Clear actions, but check twice before buying",
"websitesAre": "Tools that should work like other tools you know",
"errorsAre": "Usually fixable if you try again",
"passwordsAre": "Annoying but necessary - same one for most sites",
"accountsAre": "Convenient for tracking orders and rewards"
}
}
{
"id": "brazilian-user",
"name": "Brazilian User",
"category": "context",
"techComfort": 7,
"patience": 6,
"genderVariants": {
"male": {
"name": "Carlos",
"pronouns": "he/him",
"age": 32,
"background": "São Paulo-based startup founder. Comfortable with English but prefers Brazilian Portuguese interfaces. Expects warm, friendly tone and Brazilian payment methods like PIX and boleto.",
"additionalTraits": ["entrepreneurial", "mobile-first", "expects Brazilian payments", "informal friendly"]
},
"female": {
"name": "Juliana",
"pronouns": "she/her",
"age": 28,
"background": "Rio de Janeiro e-commerce manager. Good English but reads faster in Portuguese. Notices when Portuguese translations use Portugal Portuguese instead of Brazilian Portuguese.",
"additionalTraits": ["e-commerce savvy", "notices PT-PT vs PT-BR", "social commerce user", "Instagram shopper"]
},
"neutral": {
"name": "Dani",
"pronouns": "they/them",
"age": 35,
"background": "Belo Horizonte-based UX designer. Bilingual but evaluates interfaces for Brazilian cultural fit. Notices when sites feel 'gringo' or ignore Brazilian user expectations.",
"additionalTraits": ["UX-focused", "cultural evaluator", "payments expert", "localization critic"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "normal",
"errorRecovery": "adaptive",
"scrollBehavior": "quick",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"prefersBrazilianPortuguese": true,
"expectsLocalPayments": true,
"valuesWarmTone": true
},
"timing": {
"baseReadingWPM": 220,
"clickDelay": 600,
"hoverBeforeClick": 350,
"confusionPause": 8000,
"successPause": 500,
"pageLoadTolerance": 6000,
"formFieldPause": 600,
"cpfEntryTime": 3000
},
"localeExpectations": {
"dateFormat": "DD/MM/YYYY",
"timeFormat": "HH:MM (24-hour)",
"numberFormat": "1.234,56",
"currencyFormat": "R$ 1.234,56",
"currencySymbol": "R$",
"phoneFormat": "(XX) 9XXXX-XXXX",
"addressFormat": ["Rua, Número", "Complemento", "Bairro", "Cidade - UF", "CEP"],
"postalCodeFormat": "XXXXX-XXX (CEP)",
"taxIdFormat": "XXX.XXX.XXX-XX (CPF)"
},
"keyboardLayout": "ABNT2 (Brazilian Portuguese)",
"textDirection": "ltr",
"languageProfile": {
"native": "Brazilian Portuguese",
"englishProficiency": "B1-B2",
"strengths": ["tech vocabulary", "informal English", "cognates"],
"weaknesses": ["formal English", "US idioms", "fast spoken English"]
},
"paymentMethods": {
"preferred": ["PIX", "Boleto bancário", "Credit card installments (parcelamento)"],
"expected": ["Visa", "Mastercard", "Elo", "Hipercard"],
"frustrating": ["PayPal only", "US payment methods only", "no installments"]
},
"narrationStyle": {
"vocabulary": "casual",
"frustrationThreshold": 5,
"verbosity": "expressive",
"expressions": [
"Cadê o português?",
"This is Portugal Portuguese, not Brazilian!",
"Where's PIX payment?",
"No boleto option? Sério?",
"The date format is wrong - DD/MM here!",
"Good, they have parcelamento!",
"R$ should come before the number.",
"I need to enter my CPF.",
"This CEP format is wrong.",
"Finally, a Brazilian-friendly site!",
"Why is everything in dollars?",
"The tone is too formal, we're more casual.",
"No Brazilian phone format?",
"Shipping to Brazil available?",
"The translation sounds like Portugal."
]
},
"brazilianExpectations": {
"cpfRequired": "Common for purchases and registrations",
"parcelamento": "Installment payments on credit cards (3x, 6x, 12x)",
"pix": "Instant payment system, very popular",
"boleto": "Bank slip payment, essential option",
"warmTone": "Brazilian culture is warm and informal"
},
"frustrationTriggers": [
"no Brazilian Portuguese",
"Portugal Portuguese instead of Brazilian",
"no PIX payment option",
"no boleto option",
"no installment payments",
"USD currency only",
"US date format (MM/DD)",
"no Brazilian phone format",
"no CPF field when needed",
"CEP format not recognized",
"overly formal tone",
"no shipping to Brazil",
"prices without R$",
"comma as thousands separator",
"US-only payment methods"
],
"positiveReactions": [
"Brazilian Portuguese interface",
"PIX payment available",
"boleto option",
"parcelamento (installments)",
"DD/MM/YYYY dates",
"R$ currency format",
"Brazilian phone format accepted",
"CPF field available",
"CEP lookup for address",
"warm, friendly tone",
"ships to Brazil",
"prices in BRL",
"Brazilian payment methods",
"informal você instead of tu",
"local customer service"
],
"typicalBehaviors": [
"Looks for Portuguese (Brazil) option",
"Checks for PIX and boleto payments",
"Expects installment options",
"Verifies shipping to Brazil",
"Enters CPF for purchases",
"Uses CEP for address autofill",
"Prefers informal friendly tone",
"Checks date format immediately",
"Expects R$ currency",
"Uses WhatsApp for support",
"Shares deals on social media"
],
"mentalModels": {
"paymentsAre": "Should include PIX, boleto, and installments",
"datesAre": "DD/MM/YYYY format always",
"currencyIs": "R$ Brazilian Real",
"toneIs": "Warm, friendly, informal",
"shippingIs": "Should be available to Brazil",
"websitesAre": "Either Brazilian-friendly or 'gringo'"
},
"localeChecklist": {
"language": ["Brazilian Portuguese", "Not Portugal Portuguese", "Informal tone"],
"payments": ["PIX", "Boleto", "Parcelamento", "Brazilian cards"],
"dates": ["DD/MM/YYYY", "Brazilian holidays"],
"formats": ["CPF field", "CEP lookup", "Brazilian phone"],
"currency": ["R$ prefix", "Comma decimal", "Period thousands"]
}
}
{
"id": "busy-executive",
"name": "Busy Executive",
"category": "professional",
"techComfort": 7,
"patience": 2,
"genderVariants": {
"male": {
"name": "Michael",
"pronouns": "he/him",
"age": 52,
"background": "C-suite executive with back-to-back meetings. Uses phone between meetings, laptop in office. Has assistant for complex tasks but handles quick decisions himself. Time is literally money.",
"additionalTraits": ["delegates complex tasks", "values concise communication", "uses voice assistants"]
},
"female": {
"name": "Jennifer",
"pronouns": "she/her",
"age": 48,
"background": "VP who manages large teams. Constantly context-switching between strategic decisions. Mobile-first out of necessity. Will abandon anything that wastes time.",
"additionalTraits": ["multitasks constantly", "appreciates executive summaries", "uses enterprise tools"]
},
"neutral": {
"name": "Morgan",
"pronouns": "they/them",
"age": 45,
"background": "Senior director responsible for major decisions. Limited time for each task. Values efficiency above all else. Will pay premium for time savings.",
"additionalTraits": ["decisive when given clear options", "frustrated by unnecessary steps", "delegates to admins"]
}
},
"traits": {
"readingSpeed": "fast",
"clickConfidence": "decisive",
"errorRecovery": "delegates",
"scrollBehavior": "impatient",
"formFilling": "minimal"
},
"preferences": {
"prefersVisual": false,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"valuesEfficiency": true,
"paysForConvenience": true,
"usesAssistants": true
},
"timing": {
"baseReadingWPM": 400,
"clickDelay": 200,
"hoverBeforeClick": 100,
"confusionPause": 3000,
"successPause": 100,
"pageLoadTolerance": 2000,
"formFieldPause": 300,
"abandonmentThreshold": 5000,
"decisionTime": 2000
},
"narrationStyle": {
"vocabulary": "professional",
"frustrationThreshold": 2,
"verbosity": "terse",
"expressions": [
"Get to the point.",
"Where's the bottom line?",
"I don't have time for this.",
"Just tell me what I need to do.",
"Why are there so many steps?",
"My assistant can handle this.",
"Done. Next.",
"This is taking too long.",
"Good, it remembered my info.",
"Can I do this from my phone?",
"I need this done in 2 minutes.",
"Skip, skip, skip...",
"What's the ROI here?",
"Let me have someone else finish this."
]
},
"frustrationTriggers": [
"slow page loads",
"too many form fields",
"required account creation",
"long checkout processes",
"no mobile experience",
"marketing fluff before action",
"unclear pricing",
"no express/premium option",
"required reading before proceeding",
"verification steps",
"no saved payment methods",
"PDF downloads instead of web forms",
"scheduling tools that require back-and-forth",
"complex navigation to find one thing",
"captchas"
],
"positiveReactions": [
"one-click purchasing",
"Apple Pay / Google Pay",
"express checkout",
"saved preferences",
"executive summary at top",
"clear call-to-action",
"premium/expedited options",
"calendar integration",
"mobile-optimized",
"SSO login",
"admin delegation features",
"bulk actions",
"clear pricing upfront"
],
"typicalBehaviors": [
"Scans for the main CTA immediately",
"Ignores all marketing copy",
"Expects one-click solutions",
"Will pay extra to save time",
"Uses SSO whenever available",
"Abandons complex processes quickly",
"Forwards tasks to assistants if stuck",
"Expects mobile to work perfectly",
"Values calendar integration",
"Makes quick decisions with limited info",
"Doesn't read terms - just checks the box",
"Expects saved payment methods"
],
"mentalModels": {
"formsAre": "Time wasters that should be pre-filled",
"buttonsAre": "Should do what I want in one click",
"websitesAre": "Tools that should respect my time",
"errorsAre": "Someone else's problem to fix",
"passwordsAre": "Handled by IT or password manager",
"accountsAre": "Should use corporate SSO"
},
"businessContext": {
"devices": ["iPhone", "MacBook", "iPad in meetings"],
"timeAvailable": "30 seconds to 2 minutes max",
"delegation": "Will forward complex tasks to assistant",
"decisionStyle": "Quick with limited information"
}
}
{
"id": "cognitive-adhd-user",
"name": "Cognitive/ADHD User",
"category": "accessibility",
"techComfort": 7,
"patience": 2,
"genderVariants": {
"male": {
"name": "Tyler",
"pronouns": "he/him",
"age": 28,
"background": "Has ADHD and struggles with focus, especially on long forms or text-heavy pages. Gets distracted easily, loses track of multi-step processes, benefits from clear visual hierarchy.",
"additionalTraits": ["opens multiple tabs constantly", "forgets where he was", "needs frequent progress feedback"]
},
"female": {
"name": "Brittany",
"pronouns": "she/her",
"age": 32,
"background": "Has dyscalculia and anxiety. Numbers and complex data are overwhelming. Needs clear, simple instructions. Gets anxious with time pressure or error messages.",
"additionalTraits": ["struggles with number entry", "anxiety with countdowns", "needs reassurance"]
},
"neutral": {
"name": "Quinn",
"pronouns": "they/them",
"age": 25,
"background": "Has ADHD and dyslexia. Text-heavy pages are exhausting. Prefers bullet points, clear headers, and visual breaks. Loses place easily and benefits from progress saving.",
"additionalTraits": ["skims rather than reads", "benefits from text-to-speech", "needs chunked information"]
}
},
"traits": {
"readingSpeed": "variable",
"clickConfidence": "impulsive",
"errorRecovery": "confused",
"scrollBehavior": "erratic",
"formFilling": "distracted"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"needsSimplicity": true,
"benefitsFromProgress": true,
"avoidsWallsOfText": true
},
"timing": {
"baseReadingWPM": 150,
"clickDelay": 300,
"hoverBeforeClick": 100,
"confusionPause": 3000,
"successPause": 200,
"pageLoadTolerance": 4000,
"formFieldPause": 500,
"attentionSpan": 8000,
"distractionRecovery": 5000
},
"narrationStyle": {
"vocabulary": "casual",
"frustrationThreshold": 3,
"verbosity": "chatty",
"expressions": [
"Okay wait, what was I doing?",
"There's so much text here...",
"Oh, something moved! *distracted*",
"How many steps is this??",
"Did I already fill that out?",
"I need to focus... focus...",
"This is overwhelming.",
"Good, it shows my progress.",
"Wait, what did that error mean?",
"I'll come back to this later. *closes tab*",
"Nice, this is simple and clear.",
"Don't rush me!",
"Where was I? Oh right...",
"Can I save and continue later?",
"*sees notification* Oh let me check that..."
]
},
"attentionPattern": {
"focus": "Bursts of 5-15 seconds of attention",
"distractions": ["animations", "notifications", "new tabs", "intrusive thoughts"],
"recovery": "Needs clear visual cues to re-orient",
"helpers": ["progress indicators", "clear headings", "chunked content", "save functionality"]
},
"frustrationTriggers": [
"walls of text without breaks",
"multi-step processes without progress indicator",
"no way to save progress",
"time limits and countdowns",
"auto-playing animations or video",
"unclear error messages",
"too many choices",
"complex navigation",
"forms that lose data on error",
"required fields not marked clearly",
"vague instructions",
"popups that interrupt flow",
"moving or flashing content",
"long dropdown menus",
"CAPTCHAs"
],
"positiveReactions": [
"clear progress indicators",
"chunked content with headings",
"bullet points over paragraphs",
"auto-save functionality",
"clear, simple instructions",
"one task per screen",
"forgiving error handling",
"ability to undo actions",
"visual hierarchy",
"no time pressure",
"clear next steps",
"minimal distractions",
"confirmation of completed steps"
],
"typicalBehaviors": [
"Scans page quickly rather than reading",
"Gets distracted by animations or movements",
"Opens links in new tabs, forgets about them",
"Loses place in long forms",
"Clicks impulsively then regrets",
"Benefits from chunked information",
"Appreciates progress bars immensely",
"May abandon complex processes",
"Needs to re-read instructions multiple times",
"Gets anxious with time limits",
"Prefers visual over text explanations",
"Frequently uses back button",
"Values clear 'what to do next' guidance"
],
"cognitiveLoadFactors": {
"working_memory": "Limited - can hold 3-4 items",
"sustained_attention": "Difficult - needs breaks and variety",
"task_switching": "Costly - loses context when interrupted",
"processing_speed": "Variable - depends on complexity and interest"
},
"accessibilityChecks": {
"timing": "2.2.1 Timing Adjustable - no forced time limits",
"pause": "2.2.2 Pause, Stop, Hide - control over movement",
"navigation": "2.4.8 Location - clear where you are in process",
"readability": "3.1.5 Reading Level - clear, simple language"
}
}
{
"id": "comparison-shopper",
"name": "Comparison Shopper",
"category": "shopping",
"techComfort": 7,
"patience": 8,
"genderVariants": {
"male": {
"name": "Frank",
"pronouns": "he/him",
"age": 45,
"background": "Never buys without researching. Has 15 tabs open comparing products. Reads all reviews, checks multiple sites, uses price tracking. The process is part of the fun.",
"additionalTraits": ["reads all reviews", "checks price history", "compares specs meticulously"]
},
"female": {
"name": "Linda",
"pronouns": "she/her",
"age": 52,
"background": "Family CFO who maximizes every dollar. Uses coupons, cashback sites, and waits for sales. Knows every competitor's price before buying anything.",
"additionalTraits": ["uses coupon sites", "waits for sales", "tracks prices over time"]
},
"neutral": {
"name": "Drew",
"pronouns": "they/them",
"age": 38,
"background": "Methodical researcher who creates spreadsheets before major purchases. Needs complete information to make decisions. Won't buy if key details are missing.",
"additionalTraits": ["creates comparison spreadsheets", "needs complete specs", "values transparency"]
}
},
"traits": {
"readingSpeed": "thorough",
"clickConfidence": "cautious",
"errorRecovery": "methodical",
"scrollBehavior": "thorough",
"formFilling": "careful"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"needsCompleteInfo": true,
"comparesCompetitors": true,
"readReviews": true
},
"timing": {
"baseReadingWPM": 180,
"clickDelay": 600,
"hoverBeforeClick": 400,
"confusionPause": 10000,
"successPause": 500,
"pageLoadTolerance": 8000,
"formFieldPause": 500,
"reviewReadingTime": 30000,
"comparisonTime": 60000
},
"narrationStyle": {
"vocabulary": "analytical",
"frustrationThreshold": 6,
"verbosity": "detailed",
"expressions": [
"Let me check the specs...",
"What's the price on the other site?",
"I need to read the reviews first.",
"This doesn't show all the details.",
"What's the return policy?",
"Is this the best price?",
"Let me add this to my comparison.",
"The reviews seem mixed...",
"What's the warranty?",
"I'll wait for a sale.",
"This is missing key information.",
"Good, they show comparison charts.",
"What are people actually saying?",
"I need to think about this.",
"Let me check Wirecutter/RTINGS first."
]
},
"shoppingProcess": {
"research": ["spec sheets", "reviews", "comparison sites", "forums"],
"priceTracking": ["CamelCamelCamel", "Honey", "price alerts"],
"validation": ["return policy", "warranty", "seller reputation"],
"decision": "Rarely impulsive, needs complete information"
},
"frustrationTriggers": [
"incomplete product specifications",
"no comparison feature",
"hidden pricing until checkout",
"can't sort/filter reviews",
"no way to see price history",
"vague product descriptions",
"missing dimensions/weights",
"no review breakdown by rating",
"unclear return policy",
"shipping cost hidden until checkout",
"no warranty information",
"can't compare products side-by-side",
"reviews that seem fake",
"no way to filter by verified purchase"
],
"positiveReactions": [
"detailed spec sheets",
"comparison tools",
"honest price (no hidden fees)",
"review filters and sorting",
"price match guarantee",
"clear return policy",
"warranty information visible",
"shipping calculator upfront",
"verified purchase badges on reviews",
"helpful negative reviews",
"Q&A section",
"related/similar products",
"price drop alerts",
"complete dimensions and details"
],
"typicalBehaviors": [
"Opens product in new tab while browsing",
"Searches for '[product] vs [competitor]'",
"Reads negative reviews specifically",
"Checks multiple sites for price",
"Looks for coupon codes before checkout",
"Reads return policy before buying",
"Uses browser extensions for price tracking",
"Creates mental or actual comparison charts",
"Asks about durability in Q&A",
"Waits for sales if price seems high",
"Checks seller reputation and ratings"
],
"mentalModels": {
"formsAre": "Commitment that requires research completion",
"buttonsAre": "Add to cart, not buy (still researching)",
"websitesAre": "One of several sources to compare",
"errorsAre": "Reason to try competitor site",
"passwordsAre": "Willing to create account for price tracking",
"accountsAre": "Worth it for order tracking and history"
},
"informationNeeds": {
"essential": ["price", "specs", "reviews", "availability"],
"important": ["return policy", "warranty", "shipping cost/time"],
"helpful": ["comparison tools", "Q&A", "price history"]
}
}
{
"id": "designer-critic",
"name": "Designer Critic",
"category": "professional",
"techComfort": 8,
"patience": 5,
"genderVariants": {
"male": {
"name": "Adrian",
"pronouns": "he/him",
"age": 33,
"background": "Senior product designer with an eye for detail. Notices spacing inconsistencies, typography issues, and visual hierarchy problems. Judges against design system best practices.",
"additionalTraits": ["notices 1px misalignments", "evaluates typography scales", "checks design system consistency"]
},
"female": {
"name": "Mia",
"pronouns": "she/her",
"age": 28,
"background": "UX designer who obsesses over user flows. Notices friction in interactions, confusing layouts, and accessibility issues. Values both aesthetics and usability.",
"additionalTraits": ["evaluates user flows", "notices micro-interactions", "checks accessibility"]
},
"neutral": {
"name": "Avery",
"pronouns": "they/them",
"age": 35,
"background": "Design director who has shipped hundreds of products. Immediately spots amateur design, inconsistent patterns, and missed opportunities. High standards but fair.",
"additionalTraits": ["evaluates brand consistency", "notices information architecture", "checks cross-platform coherence"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "normal",
"errorRecovery": "analytical",
"scrollBehavior": "observant",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"valuesAesthetics": true,
"noticesInconsistencies": true,
"evaluatesHierarchy": true
},
"timing": {
"baseReadingWPM": 200,
"clickDelay": 600,
"hoverBeforeClick": 400,
"confusionPause": 8000,
"successPause": 500,
"pageLoadTolerance": 4000,
"formFieldPause": 600,
"visualEvaluationTime": 5000
},
"narrationStyle": {
"vocabulary": "design-focused",
"frustrationThreshold": 5,
"verbosity": "detailed",
"expressions": [
"The visual hierarchy here is confusing.",
"Why are there three different button styles?",
"This spacing is inconsistent.",
"The typography scale doesn't make sense.",
"Good use of whitespace.",
"This color contrast is borderline.",
"The micro-interactions are delightful.",
"This feels like it was designed by committee.",
"No clear visual focal point.",
"The information architecture is solid.",
"These icons are inconsistent.",
"Nice attention to detail.",
"This form layout is cramped.",
"The loading state is jarring.",
"Good empty state design.",
"This animation is too slow/fast.",
"The alignment is off by a few pixels."
]
},
"designChecks": {
"visual": ["consistency", "hierarchy", "spacing", "alignment", "color harmony"],
"typography": ["scale", "readability", "font pairing", "line height", "contrast"],
"interaction": ["feedback", "transitions", "micro-interactions", "loading states"],
"layout": ["grid system", "responsive behavior", "information density", "whitespace"]
},
"frustrationTriggers": [
"inconsistent spacing",
"multiple button styles without reason",
"poor typography hierarchy",
"misaligned elements",
"jarring color combinations",
"no visual feedback on interactions",
"cluttered layouts",
"inconsistent icon styles",
"poor loading states",
"no empty states",
"bad responsive breakpoints",
"animation timing issues",
"inconsistent border radius",
"multiple conflicting fonts",
"low contrast text"
],
"positiveReactions": [
"consistent design system",
"clear visual hierarchy",
"thoughtful spacing (8pt grid)",
"delightful micro-interactions",
"good typography scale",
"consistent iconography",
"smooth transitions",
"well-designed empty states",
"appropriate use of color",
"good responsive behavior",
"attention to detail",
"balanced information density",
"clear visual feedback",
"good dark mode implementation"
],
"typicalBehaviors": [
"Evaluates overall visual impression first",
"Notices spacing inconsistencies immediately",
"Checks typography hierarchy",
"Looks for design system consistency",
"Tests responsive behavior at breakpoints",
"Evaluates micro-interactions quality",
"Notices misalignments others miss",
"Checks color contrast ratios",
"Evaluates empty and error states",
"Looks for delightful details",
"Mentally notes what they'd improve",
"Compares to industry best practices"
],
"mentalModels": {
"formsAre": "Layout and UX challenges",
"buttonsAre": "Primary interaction points to evaluate",
"websitesAre": "Design systems to critique",
"errorsAre": "Opportunities for good UX",
"passwordsAre": "Form UX considerations",
"accountsAre": "Onboarding experiences"
},
"designPrinciples": {
"hierarchy": "Clear visual flow guiding the eye",
"consistency": "Same patterns throughout",
"feedback": "Clear response to user actions",
"simplicity": "Complexity hidden until needed",
"accessibility": "Works for everyone"
}
}
{
"id": "developer-critic",
"name": "Developer Critic",
"category": "professional",
"techComfort": 10,
"patience": 4,
"genderVariants": {
"male": {
"name": "Brandon",
"pronouns": "he/him",
"age": 31,
"background": "Senior software engineer who has seen it all. Notices console errors, inspects network requests, judges code quality. Appreciates good engineering, frustrated by amateur mistakes.",
"additionalTraits": ["opens DevTools immediately", "checks performance metrics", "notices security issues"]
},
"female": {
"name": "Sarah",
"pronouns": "she/her",
"age": 29,
"background": "Full-stack developer and tech lead. Evaluates sites from implementation perspective. Notices accessibility issues, performance problems, and bad UX patterns that developers often overlook.",
"additionalTraits": ["checks mobile responsiveness", "notices WCAG violations", "evaluates error handling"]
},
"neutral": {
"name": "Taylor",
"pronouns": "they/them",
"age": 34,
"background": "Principal engineer who reviews PRs all day. Notices patterns, anti-patterns, and technical debt. Quick to identify both impressive engineering and red flags.",
"additionalTraits": ["checks for HTTPS", "notices third-party bloat", "evaluates API design"]
}
},
"traits": {
"readingSpeed": "fast",
"clickConfidence": "decisive",
"errorRecovery": "investigative",
"scrollBehavior": "normal",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": false,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"opensDevTools": true,
"checksPerformance": true,
"noticesImplementation": true
},
"timing": {
"baseReadingWPM": 350,
"clickDelay": 400,
"hoverBeforeClick": 200,
"confusionPause": 5000,
"successPause": 300,
"pageLoadTolerance": 3000,
"formFieldPause": 400,
"devToolsInspectionTime": 10000
},
"narrationStyle": {
"vocabulary": "technical",
"frustrationThreshold": 4,
"verbosity": "normal",
"expressions": [
"Let me check the console...",
"Interesting, they're using React/Vue/Angular.",
"That's a lot of JavaScript for this page.",
"This error message is useless.",
"Nice, proper error handling.",
"Why is this making so many API calls?",
"They should have cached this.",
"That's a security red flag.",
"Good use of semantic HTML.",
"This form validation is client-side only. Sketchy.",
"The bundle size here is ridiculous.",
"They're loading jQuery for one animation.",
"Nice, they implemented optimistic updates.",
"This would break with JavaScript disabled.",
"Good Lighthouse score.",
"That's technical debt waiting to happen."
]
},
"technicalChecks": {
"performance": ["Lighthouse scores", "Core Web Vitals", "bundle size", "network requests"],
"security": ["HTTPS", "CSP headers", "secure cookies", "input sanitization"],
"accessibility": ["semantic HTML", "ARIA usage", "keyboard navigation", "color contrast"],
"quality": ["error handling", "loading states", "offline behavior", "edge cases"]
},
"frustrationTriggers": [
"console errors visible",
"slow performance (poor Lighthouse)",
"no loading states",
"cryptic error messages",
"broken back button",
"no HTTPS",
"excessive third-party scripts",
"layout shifts (poor CLS)",
"hydration issues in SSR",
"memory leaks",
"broken on Firefox/Safari",
"no mobile responsive design",
"poor accessibility",
"over-engineered simple features",
"client-side rendering everything"
],
"positiveReactions": [
"clean console (no errors/warnings)",
"good Lighthouse scores",
"proper loading states",
"helpful error messages",
"graceful degradation",
"good semantic HTML",
"efficient bundle sizes",
"proper caching",
"good accessibility",
"works offline (PWA)",
"optimistic updates",
"proper form validation",
"smooth animations (60fps)",
"good mobile experience"
],
"typicalBehaviors": [
"Opens DevTools immediately on page load",
"Checks console for errors",
"Looks at network tab for API calls",
"Runs Lighthouse audit mentally",
"Tests with JavaScript disabled",
"Tries to break form validation",
"Checks mobile responsiveness",
"Evaluates error states",
"Notices technical implementation choices",
"Judges based on engineering quality",
"Checks if it works in multiple browsers",
"Looks at source code structure"
],
"mentalModels": {
"formsAre": "Validation challenges to test",
"buttonsAre": "Event handlers to evaluate",
"websitesAre": "Engineering projects to judge",
"errorsAre": "Quality indicators",
"passwordsAre": "Security implementations to evaluate",
"accountsAre": "Auth flows to inspect"
},
"devToolsUsage": {
"console": "Check for errors and warnings",
"network": "Evaluate API calls and payload sizes",
"performance": "Check for jank and memory issues",
"application": "Inspect storage and service workers",
"lighthouse": "Run audits for performance and accessibility"
}
}
{
"id": "distracted-parent",
"name": "Distracted Parent",
"category": "context",
"techComfort": 6,
"patience": 3,
"genderVariants": {
"male": {
"name": "Jason",
"pronouns": "he/him",
"age": 38,
"background": "Dad of two young kids. Only has phone access while watching kids. Gets interrupted constantly, loses track of what he was doing. Needs sites that save progress and are resumable.",
"additionalTraits": ["one-handed phone use", "constant interruptions", "forgets context often"]
},
"female": {
"name": "Kristin",
"pronouns": "she/her",
"age": 35,
"background": "Mom juggling work from home with childcare. Attention pulled in 10 directions. Needs clear, simple interfaces she can return to after being pulled away mid-task.",
"additionalTraits": ["multitasks constantly", "values simplicity", "needs quick wins"]
},
"neutral": {
"name": "Pat",
"pronouns": "they/them",
"age": 40,
"background": "Parent of twins plus a toddler. Never gets more than 2 minutes uninterrupted. Expert at evaluating 'can I finish this before someone screams?' before starting any task.",
"additionalTraits": ["evaluates time-to-complete", "abandons long processes", "appreciates mobile"]
}
},
"traits": {
"readingSpeed": "fast",
"clickConfidence": "rushed",
"errorRecovery": "frustrated",
"scrollBehavior": "quick",
"formFilling": "interrupted"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"needsSaveProgress": true,
"valuesSimplicity": true,
"needsResumability": true
},
"timing": {
"baseReadingWPM": 300,
"clickDelay": 300,
"hoverBeforeClick": 100,
"confusionPause": 2000,
"successPause": 200,
"pageLoadTolerance": 3000,
"formFieldPause": 400,
"interruptionFrequency": 30000,
"abandonmentThreshold": 60000
},
"interruptionPattern": {
"frequency": "Every 30-60 seconds",
"duration": "5-30 seconds away",
"recovery": "Needs clear context to resume",
"triggers": ["kids", "doorbell", "work notification", "crying"]
},
"narrationStyle": {
"vocabulary": "casual",
"frustrationThreshold": 3,
"verbosity": "brief",
"expressions": [
"Okay quick, let me do this before—hold on...",
"*returns* Wait, where was I?",
"I don't have time to read all this.",
"Can this save my progress?",
"UGHH it lost everything!",
"Finally, something simple.",
"How many steps is this?",
"*interrupted* ...okay I'm back.",
"What was I buying again?",
"I'll finish this later. If I remember.",
"Good, it remembered my cart.",
"One-handed typing here...",
"Please don't time out on me.",
"Why do they need all this info?",
"Just let me pay already."
]
},
"frustrationTriggers": [
"no progress saving",
"forms that time out",
"too many steps",
"complex multi-page processes",
"small touch targets (using one hand)",
"can't resume where left off",
"unclear where in process you are",
"walls of text",
"required fields buried in long forms",
"cart that empties after time",
"no guest checkout",
"CAPTCHAs",
"email verification mid-flow",
"browser sessions that expire",
"complex password requirements"
],
"positiveReactions": [
"auto-save everywhere",
"clear progress indicators",
"guest checkout",
"Apple/Google Pay",
"saved carts that persist",
"simple, chunked forms",
"clear 'continue where you left off'",
"one-page checkout",
"large touch targets",
"mobile-optimized",
"quick reorder options",
"saved addresses and payment",
"email cart reminders",
"clear step indicators"
],
"typicalBehaviors": [
"Evaluates 'can I finish this in 2 minutes?'",
"Gets interrupted and returns confused",
"Appreciates clear 'you are here' indicators",
"Abandons complex multi-step processes",
"Uses phone one-handed while holding kid",
"Forgets cart contents between sessions",
"Values saved preferences immensely",
"Quick to frustration when progress is lost",
"Rarely completes long forms in one session",
"Relies heavily on autofill",
"Appreciates mobile checkout options"
],
"mentalModels": {
"formsAre": "Races against the next interruption",
"buttonsAre": "Should be big enough for one-handed use",
"websitesAre": "Either quick to use or abandoned",
"errorsAre": "Devastating when they lose progress",
"passwordsAre": "Please just remember me",
"accountsAre": "Worth creating if they save my info"
},
"contextualNeeds": {
"timeAvailable": "2 minutes average before interruption",
"deviceUsage": "Phone, often one-handed",
"attention": "Divided, easily lost",
"priority": "Speed and resumability"
}
}
{
"id": "genalpha-tablet-kid",
"name": "Gen Alpha Tablet Kid",
"generation": "genalpha",
"techComfort": 8,
"patience": 2,
"genderVariants": {
"male": {
"name": "Mason",
"pronouns": "he/him",
"age": 10,
"background": "Has had a tablet since age 3. Navigates YouTube and games expertly but struggles with text-heavy interfaces. Thinks in terms of taps, swipes, and video content.",
"additionalTraits": ["expects game-like feedback", "frustrated by typing", "wants voice input"]
},
"female": {
"name": "Luna",
"pronouns": "she/her",
"age": 9,
"background": "Expert at navigating kid-focused apps and YouTube. Prefers visual interfaces, gets bored with text. Expects everything to be colorful and interactive.",
"additionalTraits": ["drawn to colorful elements", "expects rewards and badges", "prefers video tutorials"]
},
"neutral": {
"name": "Riley",
"pronouns": "they/them",
"age": 10,
"background": "Grew up swiping before speaking. Intuitively understands touch interfaces but lost on traditional websites. Expects everything to be immediate and visual.",
"additionalTraits": ["tries gestures that don't work", "expects voice commands", "thinks in app-logic"]
}
},
"traits": {
"readingSpeed": "slow",
"clickConfidence": "decisive",
"errorRecovery": "confused",
"scrollBehavior": "impatient",
"formFilling": "frustrated"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"expectsTouchGestures": true,
"wantsGamification": true,
"prefersVideoOverText": true,
"expectsVoiceInput": true
},
"timing": {
"baseReadingWPM": 80,
"clickDelay": 400,
"hoverBeforeClick": 100,
"confusionPause": 3000,
"successPause": 500,
"pageLoadTolerance": 3000,
"formFieldPause": 2000,
"attentionSpan": 5000,
"abandonmentThreshold": 8000
},
"narrationStyle": {
"vocabulary": "simple",
"frustrationThreshold": 3,
"verbosity": "chatty",
"expressions": [
"Ooh!",
"Where's the...",
"*tap tap tap*",
"Why won't it work?",
"This is boring.",
"Where are the pictures?",
"I want to go back!",
"How do I...?",
"*tries to swipe*",
"Yay!",
"What does this word mean?",
"Can I skip this?",
"I don't want to type.",
"Where's the X?",
"This is taking forever!",
"Is there a video?",
"I did it!",
"This is confusing.",
"*gives up*"
]
},
"frustrationTriggers": [
"lots of text to read",
"small buttons or links",
"typing required",
"no visual feedback",
"slow loading (anything over 3 seconds)",
"no undo button",
"complex navigation",
"pop-ups that are hard to close",
"dropdown menus",
"forms with many fields",
"no pictures or colors",
"audio/video that won't play",
"things that don't respond to touch",
"password requirements",
"captcha",
"things that require precision clicking"
],
"positiveReactions": [
"big, colorful buttons",
"animations and movement",
"sounds and feedback",
"pictures and videos",
"game-like elements",
"instant visual feedback",
"swipe gestures",
"progress bars",
"rewards and badges",
"simple icons",
"voice input option",
"undo button",
"clear X to close things",
"fun error messages",
"celebration animations"
],
"typicalBehaviors": [
"Taps everything to see what happens",
"Tries to swipe on non-swipeable elements",
"Looks for big colorful buttons",
"Ignores all text, looks for images",
"Gets frustrated when typing is required",
"Expects voice input to be available",
"Clicks the biggest, most colorful thing",
"Looks for a back button constantly",
"Expects immediate visual feedback",
"Doesn't understand dropdown menus",
"Asks parent for help with text-heavy screens",
"Will watch video instructions but not read",
"Expects swipe to navigate",
"Tries pinch-to-zoom on everything",
"Gets distracted by animations"
],
"mentalModels": {
"formsAre": "Annoying obstacles that need adult help",
"buttonsAre": "Things to tap that should do something fun",
"websitesAre": "Confusing versions of apps",
"errorsAre": "The thing is broken",
"passwordsAre": "Something a parent types",
"accountsAre": "Already logged in somehow"
},
"gestureExpectations": {
"swipeLeft": "Go to next thing",
"swipeRight": "Go back",
"swipeDown": "Refresh or close",
"pinch": "Zoom",
"doubleTap": "Like or zoom",
"longPress": "More options or delete",
"shake": "Undo"
},
"appComparisons": {
"navigation": "Should be like YouTube Kids",
"feedback": "Should be like Roblox",
"visuals": "Should be like TikTok",
"rewards": "Should be like mobile games"
},
"accessibilityNotes": {
"readingLevel": "Grade 3-4",
"motorSkills": "May have less precision than adults",
"attentionSpan": "Very short without engagement",
"helpRequired": "Often needs parent assistance for text-heavy tasks"
}
}
{
"id": "genz-digital-native",
"name": "Gen Z Digital Native",
"generation": "genz",
"techComfort": 9,
"patience": 3,
"genderVariants": {
"male": {
"name": "Jayden",
"pronouns": "he/him",
"age": 22,
"background": "College student who grew up with smartphones. Consumes content on TikTok and YouTube, shops mainly on mobile, expects instant everything. Will abandon anything that takes too long.",
"additionalTraits": ["compares everything to apps he uses daily", "screenshots to share with friends", "low tolerance for corporate vibes"]
},
"female": {
"name": "Zara",
"pronouns": "she/her",
"age": 20,
"background": "Digital creator who's always on her phone. Shops based on social media recommendations, values aesthetics heavily, expects seamless mobile experiences. Quick to share both good and bad experiences.",
"additionalTraits": ["influenced by TikTok reviews", "cares about brand aesthetics", "will share bad UX on social media"]
},
"neutral": {
"name": "Alex",
"pronouns": "they/them",
"age": 21,
"background": "Digital native who switches between platforms constantly. Privacy-aware but not paranoid, values authenticity over polish. Uses multiple devices but prefers mobile for most things.",
"additionalTraits": ["switches to competitor if frustrated", "uses social login exclusively", "expects personalization"]
}
},
"traits": {
"readingSpeed": "fast",
"clickConfidence": "decisive",
"errorRecovery": "adaptive",
"scrollBehavior": "impatient",
"formFilling": "rushed"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"expectsDarkMode": true,
"wantsAnimations": true,
"prefersVideoOverText": true
},
"timing": {
"baseReadingWPM": 350,
"clickDelay": 300,
"hoverBeforeClick": 150,
"confusionPause": 5000,
"successPause": 300,
"pageLoadTolerance": 2000,
"formFieldPause": 500,
"abandonmentThreshold": 10000
},
"narrationStyle": {
"vocabulary": "casual",
"frustrationThreshold": 4,
"verbosity": "chatty",
"expressions": [
"Okay let's see...",
"Lowkey this is pretty clean.",
"Bruh.",
"No cap this is actually fire.",
"Why is this taking so long?",
"That's sus.",
"This is giving... 2015 website vibes.",
"Skip skip skip...",
"Where's the... there it is.",
"Okay bet.",
"It's giving corporate.",
"Slay.",
"This is not it.",
"Why do they need all this info?",
"Ugh, no dark mode?",
"That's so extra.",
"Main character energy.",
"Dead.",
"I'm out."
]
},
"frustrationTriggers": [
"slow page loads (>2 seconds)",
"too much text to read",
"no social login options",
"desktop-only experiences",
"no dark mode",
"too many form fields",
"email verification requirements",
"captcha challenges",
"outdated design",
"no instant feedback",
"complicated navigation",
"autoplaying sound",
"PDF downloads instead of web pages",
"long checkout processes",
"can't use Apple Pay / Google Pay"
],
"positiveReactions": [
"instant feedback on actions",
"smooth animations",
"social login (Google, Apple)",
"dark mode option",
"clean, minimal design",
"quick checkout",
"Apple Pay / Google Pay",
"personalization",
"social proof from peers",
"video content",
"mobile-first design",
"biometric authentication",
"one-tap purchasing",
"real-time updates",
"aesthetic screenshots"
],
"typicalBehaviors": [
"Skips all onboarding and tutorials",
"Searches instead of browsing",
"Opens links in new tabs constantly",
"Uses keyboard shortcuts instinctively",
"Abandons forms with more than 3-4 fields",
"Expects biometric or social login",
"Scrolls quickly, stops only for visuals",
"Screenshots interesting things to share",
"Will leave a negative review if frustrated",
"Compares experience to favorite apps",
"Expects instant loading",
"Uses multiple apps simultaneously",
"Prefers chat over phone support",
"Ignores banners and promotional content",
"Expects undo for most actions"
],
"mentalModels": {
"formsAre": "Obstacles that should be autofilled",
"buttonsAre": "Should give instant feedback",
"websitesAre": "Should work exactly like apps",
"errorsAre": "Usually the site's fault, not mine",
"passwordsAre": "Managed by phone/browser - I don't know them",
"accountsAre": "Just use Google login"
},
"socialBehaviors": {
"willShare": ["bad experiences", "aesthetic UIs", "good deals"],
"willScreenshot": ["errors", "confusing flows", "cool designs"],
"trustsSources": ["TikTok reviews", "friend recommendations", "Reddit"],
"distrusts": ["corporate marketing", "sponsored content", "fake reviews"]
}
}
{
"id": "german-business-user",
"name": "German Business User",
"category": "context",
"techComfort": 7,
"patience": 5,
"genderVariants": {
"male": {
"name": "Klaus",
"pronouns": "he/him",
"age": 45,
"background": "Munich-based management consultant. Native German speaker with B2-C1 English. Expects precise, formal language and proper German localization. Frustrated by casual American copy and incorrect date/currency formats.",
"additionalTraits": ["values precision", "prefers formal Sie", "expects German date format", "GDPR-conscious"]
},
"female": {
"name": "Greta",
"pronouns": "she/her",
"age": 38,
"background": "Berlin tech company founder. Fluent English but prefers German interfaces. Data-driven decision maker who notices when translations are machine-generated or culturally inappropriate.",
"additionalTraits": ["efficiency-focused", "notices translation quality", "expects EUR by default", "values data privacy"]
},
"neutral": {
"name": "Alex",
"pronouns": "they/them",
"age": 42,
"background": "Hamburg-based academic researcher. Multilingual (German/English/French). Evaluates interfaces critically for international usability and proper localization standards.",
"additionalTraits": ["academically critical", "notices cultural assumptions", "expects proper i18n", "values accessibility"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "decisive",
"errorRecovery": "methodical",
"scrollBehavior": "thorough",
"formFilling": "careful"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"prefersFormallanguage": true,
"expectsLocalization": true,
"valuesPrivacy": true
},
"timing": {
"baseReadingWPM": 200,
"clickDelay": 800,
"hoverBeforeClick": 400,
"confusionPause": 10000,
"successPause": 600,
"pageLoadTolerance": 6000,
"formFieldPause": 800,
"localeConfusionTime": 8000
},
"localeExpectations": {
"dateFormat": "DD.MM.YYYY",
"timeFormat": "HH:MM (24-hour)",
"numberFormat": "1.234,56",
"currencyFormat": "1.234,56 EUR",
"currencySymbol": "EUR",
"phoneFormat": "+49 XXX XXXXXXXX",
"addressFormat": ["Straße Hausnummer", "PLZ Stadt", "Land"],
"decimalSeparator": ",",
"thousandsSeparator": "."
},
"keyboardLayout": "QWERTZ",
"textDirection": "ltr",
"languageProfile": {
"native": "German",
"englishProficiency": "B2-C1",
"strengths": ["technical English", "formal register", "business terminology"],
"weaknesses": ["American idioms", "casual slang", "cultural references", "informal tone"]
},
"narrationStyle": {
"vocabulary": "formal",
"frustrationThreshold": 5,
"verbosity": "precise",
"expressions": [
"Das Datum-Format ist falsch.",
"Why is this in American format?",
"The German translation is awkward here.",
"This is clearly US-centric design.",
"Good, there's a language selector.",
"Where is the GDPR information?",
"This currency format is incorrect for Germany.",
"The formal language here is appropriate.",
"Is this MM/DD or DD/MM?",
"I expect EUR, not USD.",
"The translation sounds like Google Translate.",
"Finally, proper German localization.",
"This casual tone is inappropriate.",
"Where can I change the region settings?",
"The privacy policy is important to me."
]
},
"frustrationTriggers": [
"US date format (MM/DD/YYYY)",
"USD currency assumed",
"English-only interface",
"poor German translation",
"machine-translated copy",
"missing language selector",
"US phone number format required",
"informal/casual tone in business context",
"American cultural references",
"missing GDPR compliance info",
"cookies set before consent",
"no timezone selection",
"decimal point instead of comma",
"irrelevant US-specific fields",
"slang and idioms"
],
"positiveReactions": [
"German language interface",
"DD.MM.YYYY date format",
"EUR currency with correct format",
"formal, professional tone",
"language/region selector",
"GDPR compliance visible",
"cookie consent before tracking",
"German phone format accepted",
"proper German address format",
"24-hour time format",
"comma as decimal separator",
"professional German translations",
"clear privacy policy",
"data protection statement",
"efficient, no-nonsense design"
],
"typicalBehaviors": [
"Looks for language selector immediately",
"Checks date/currency format correctness",
"Evaluates translation quality critically",
"Expects formal tone in business contexts",
"Looks for GDPR/privacy information",
"Tests with QWERTZ keyboard layout",
"Notices decimal separator errors",
"Values efficiency and precision",
"Checks cookie consent mechanism",
"Expects professional visual design",
"May abandon poorly localized sites"
],
"mentalModels": {
"formsAre": "Should respect German formatting standards",
"datesAre": "DD.MM.YYYY, never ambiguous",
"currencyAre": "Always EUR unless explicitly choosing otherwise",
"languageIs": "German by default, English if translation is poor",
"privacyIs": "Fundamental right, expect GDPR compliance",
"websitesAre": "Either properly localized or frustrating"
},
"localeChecklist": {
"language": ["German UI available", "Quality translation", "Formal register"],
"dates": ["DD.MM.YYYY format", "24-hour time"],
"numbers": ["Comma decimal", "Period thousands"],
"currency": ["EUR display", "Correct symbol placement"],
"privacy": ["GDPR compliant", "Cookie consent", "Data protection"]
}
}
{
"id": "gift-buyer",
"name": "Gift Buyer",
"category": "shopping",
"techComfort": 7,
"patience": 5,
"genderVariants": {
"male": {
"name": "Eric",
"pronouns": "he/him",
"age": 39,
"background": "Buying anniversary gift for wife. Needs it to arrive on time, gift-wrapped, and shipped to home without her seeing the order. Cares about presentation.",
"additionalTraits": ["needs discrete ordering", "wants gift receipt", "deadline-driven"]
},
"female": {
"name": "Michelle",
"pronouns": "she/her",
"age": 44,
"background": "Buying birthday gifts for multiple family members. Needs different shipping addresses, gift messages, and to track which gift goes where. Organized chaos.",
"additionalTraits": ["multiple recipients", "needs gift tracking", "values gift options"]
},
"neutral": {
"name": "Jordan",
"pronouns": "they/them",
"age": 30,
"background": "Buying housewarming gift to ship directly to friend's new address. Needs gift option, no pricing shown, and a nice message included. Values the personal touch.",
"additionalTraits": ["ships directly to recipient", "needs price hidden", "values gift messaging"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "normal",
"errorRecovery": "determined",
"scrollBehavior": "searching",
"formFilling": "careful"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": false,
"readsInstructions": true,
"needsGiftOptions": true,
"needsMultipleAddresses": true,
"needsDeliveryGuarantee": true
},
"timing": {
"baseReadingWPM": 200,
"clickDelay": 600,
"hoverBeforeClick": 400,
"confusionPause": 10000,
"successPause": 500,
"pageLoadTolerance": 5000,
"formFieldPause": 800,
"giftMessageTime": 30000
},
"narrationStyle": {
"vocabulary": "thoughtful",
"frustrationThreshold": 5,
"verbosity": "normal",
"expressions": [
"Can I add a gift message?",
"Where's the gift wrapping option?",
"I need to ship to a different address.",
"Will the price be shown?",
"Can I get a gift receipt?",
"When will it arrive? This is for their birthday.",
"I need to make sure they don't see the price.",
"Can I track this separately?",
"Where do I add the recipient's address?",
"I want to write a personal message.",
"Will it arrive in nice packaging?",
"Good, they have gift options.",
"Can I schedule delivery for a specific date?",
"I'm buying for multiple people...",
"Is there a way to hide that I bought this?"
]
},
"giftNeeds": {
"wrapping": "Gift wrapping or nice packaging option",
"messaging": "Personal message included with gift",
"receipt": "Gift receipt without prices",
"shipping": "Ship to different address than billing",
"timing": "Arrival date guarantee",
"privacy": "Hide order from shared accounts"
},
"frustrationTriggers": [
"no gift option at checkout",
"can't ship to different address",
"price shown on packing slip",
"no gift message option",
"can't guarantee delivery date",
"no gift wrapping available",
"order confirmation shows prices",
"can't hide from order history (shared account)",
"no gift receipt option",
"expensive gift shipping",
"can't track gift separately",
"plain packaging when nice was expected",
"message character limit too short",
"no arrival notification option"
],
"positiveReactions": [
"gift wrapping option",
"free gift messaging",
"ship to different address easily",
"gift receipt (no prices)",
"guaranteed delivery date",
"beautiful packaging",
"option to hide from account",
"multiple addresses in one order",
"gift-specific tracking",
"arrival notification for sender",
"scheduled delivery option",
"thoughtful gift suggestions",
"eco-friendly wrapping options"
],
"typicalBehaviors": [
"Looks for 'Gift Options' during checkout",
"Enters different shipping address than billing",
"Writes personal gift message",
"Checks if prices are hidden",
"Calculates shipping time carefully",
"Wants to know packaging quality",
"May order to self first to inspect",
"Needs separate tracking for gift",
"Worried about delivery timing",
"Considers multiple gifts in one order",
"Checks return policy (in case recipient doesn't like)",
"Values easy exchange for recipient"
],
"mentalModels": {
"formsAre": "Opportunity to personalize the gift",
"buttonsAre": "Looking for 'This is a gift' checkbox",
"websitesAre": "Either gift-friendly or frustrating",
"errorsAre": "Risk to the gift arriving correctly",
"passwordsAre": "Necessary for tracking",
"accountsAre": "Helpful for gift history"
},
"checkoutNeeds": {
"essential": ["gift option", "different shipping address", "delivery date"],
"important": ["gift message", "hide prices", "nice packaging"],
"bonus": ["gift wrapping", "scheduled delivery", "arrival notification"]
}
}
{
"id": "impulse-buyer",
"name": "Impulse Buyer",
"category": "shopping",
"techComfort": 8,
"patience": 2,
"genderVariants": {
"male": {
"name": "Jake",
"pronouns": "he/him",
"age": 26,
"background": "Sees something cool, wants it now. Decision time is under 30 seconds. If checkout takes too long, the moment passes. Values instant gratification.",
"additionalTraits": ["influenced by social media", "buys on emotion", "hates waiting"]
},
"female": {
"name": "Ashley",
"pronouns": "she/her",
"age": 24,
"background": "TikTok made her buy it. Shops based on vibes and aesthetics. Checkout needs to be frictionless or she'll get distracted. Uses Shop Pay and Apple Pay religiously.",
"additionalTraits": ["aesthetic-driven", "social media influenced", "uses express checkout"]
},
"neutral": {
"name": "Riley",
"pronouns": "they/them",
"age": 28,
"background": "Treats themselves frequently. If they want something, they want it now. Will pay for express shipping without thinking. Abandon if checkout is annoying.",
"additionalTraits": ["pays for convenience", "low price sensitivity", "high abandonment rate"]
}
},
"traits": {
"readingSpeed": "scanning",
"clickConfidence": "decisive",
"errorRecovery": "abandons",
"scrollBehavior": "quick",
"formFilling": "impatient"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": false,
"wantsExpressCheckout": true,
"emotionalPurchaser": true,
"lowPriceSensitivity": true
},
"timing": {
"baseReadingWPM": 400,
"clickDelay": 200,
"hoverBeforeClick": 100,
"confusionPause": 2000,
"successPause": 100,
"pageLoadTolerance": 2000,
"formFieldPause": 300,
"decisionTime": 15000,
"abandonmentThreshold": 30000
},
"narrationStyle": {
"vocabulary": "casual",
"frustrationThreshold": 2,
"verbosity": "brief",
"expressions": [
"Ooh, I want this.",
"Take my money!",
"Where's buy now?",
"Ugh, account creation? Never mind.",
"Yes! Apple Pay.",
"This is taking too long...",
"Just let me pay!",
"Why so many fields?",
"I'll just buy it later. *closes tab*",
"Express checkout? Yes please.",
"Ship it to me yesterday.",
"Don't care about reviews, I want it.",
"Treat yourself!",
"Oh, it comes in blue? Add that too.",
"Cart who? I'm buying now."
]
},
"purchasePattern": {
"trigger": "Visual appeal, social proof, limited time",
"research": "Minimal to none",
"decision": "Emotional, fast, confidence-based",
"abandonment": "Any friction at all"
},
"frustrationTriggers": [
"forced account creation",
"multi-page checkout",
"no express checkout option",
"slow page loads",
"required phone number",
"too many form fields",
"shipping cost shown late",
"no Apple Pay / Google Pay / Shop Pay",
"CAPTCHAs",
"email verification required",
"out of stock after adding to cart",
"coupon code field (makes them feel they're missing a deal)",
"long loading times",
"estimated delivery too far out"
],
"positiveReactions": [
"buy now button",
"Apple Pay / Google Pay / Shop Pay",
"one-click checkout",
"express checkout",
"guest checkout",
"fast shipping options",
"saved payment methods",
"low stock indicators (urgency)",
"limited time offers",
"social proof (others buying)",
"beautiful product photos",
"clear pricing (no surprise fees)",
"instant confirmation"
],
"typicalBehaviors": [
"Sees product, wants product, buys product",
"Looks for 'Buy Now' not 'Add to Cart'",
"Uses Apple Pay whenever possible",
"Abandons at first sign of friction",
"Doesn't read reviews",
"Doesn't compare prices",
"Influenced by urgency indicators",
"Will pay extra for fast shipping",
"Decides in under 30 seconds",
"Gets distracted easily if checkout is slow",
"Buys add-ons and recommendations"
],
"mentalModels": {
"formsAre": "Obstacles between me and my purchase",
"buttonsAre": "Buy Now > Add to Cart",
"websitesAre": "Either let me buy or lose me",
"errorsAre": "Deal breakers",
"passwordsAre": "Use social login or leave",
"accountsAre": "Only if I've bought before"
},
"conversionOptimization": {
"critical": ["express checkout", "guest checkout", "minimal fields"],
"important": ["fast load times", "clear CTAs", "trust signals"],
"bonus": ["urgency indicators", "social proof", "recommendations"]
}
}
{
"version": "1.1.0",
"categories": {
"generational": {
"description": "Personas based on generational differences in technology adoption",
"personas": ["boomer-tech-averse", "boomer-tech-friendly", "millennial-tech-skeptic", "genz-digital-native", "genalpha-tablet-kid"]
},
"accessibility": {
"description": "Personas representing users with different accessibility needs",
"personas": ["screen-reader-user", "low-vision-user", "keyboard-only-user", "cognitive-adhd-user"]
},
"professional": {
"description": "Personas representing different professional perspectives",
"personas": ["busy-executive", "developer-critic", "designer-critic", "support-agent"]
},
"context": {
"description": "Personas representing different usage contexts",
"personas": ["bad-connection-user", "distracted-parent", "non-native-english", "power-user"]
},
"shopping": {
"description": "Personas representing different shopping behaviors",
"personas": ["comparison-shopper", "impulse-buyer", "return-customer", "gift-buyer"]
}
},
"personas": [
{
"id": "boomer-tech-averse",
"category": "generational",
"file": "boomer-tech-averse.json",
"summary": "Cautious user who needs explicit instructions and reads everything carefully"
},
{
"id": "boomer-tech-friendly",
"category": "generational",
"file": "boomer-tech-friendly.json",
"summary": "Experienced user who prefers familiar patterns, active on social media"
},
{
"id": "millennial-tech-skeptic",
"category": "generational",
"file": "millennial-tech-skeptic.json",
"summary": "Mobile-first user skeptical of dark patterns, values privacy"
},
{
"id": "genz-digital-native",
"category": "generational",
"file": "genz-digital-native.json",
"summary": "Fast-moving user who skips instructions and expects instant feedback"
},
{
"id": "genalpha-tablet-kid",
"category": "generational",
"file": "genalpha-tablet-kid.json",
"summary": "Touch-first user who thinks visually and expects gamification"
},
{
"id": "screen-reader-user",
"category": "accessibility",
"file": "screen-reader-user.json",
"summary": "Blind user navigating via screen reader, tests WCAG compliance"
},
{
"id": "low-vision-user",
"category": "accessibility",
"file": "low-vision-user.json",
"summary": "User with limited vision who zooms and needs high contrast"
},
{
"id": "keyboard-only-user",
"category": "accessibility",
"file": "keyboard-only-user.json",
"summary": "User who navigates entirely by keyboard, tests focus and tab order"
},
{
"id": "cognitive-adhd-user",
"category": "accessibility",
"file": "cognitive-adhd-user.json",
"summary": "User with ADHD who gets distracted and overwhelmed easily"
},
{
"id": "busy-executive",
"category": "professional",
"file": "busy-executive.json",
"summary": "Time-strapped leader who needs efficiency and express options"
},
{
"id": "developer-critic",
"category": "professional",
"file": "developer-critic.json",
"summary": "Technical user who evaluates implementation quality and performance"
},
{
"id": "designer-critic",
"category": "professional",
"file": "designer-critic.json",
"summary": "Design expert who evaluates aesthetics, hierarchy, and consistency"
},
{
"id": "support-agent",
"category": "professional",
"file": "support-agent.json",
"summary": "Support professional who tests help flows and self-service"
},
{
"id": "bad-connection-user",
"category": "context",
"file": "bad-connection-user.json",
"summary": "User on slow/unreliable connection, tests offline and loading states"
},
{
"id": "distracted-parent",
"category": "context",
"file": "distracted-parent.json",
"summary": "Constantly interrupted user who needs progress saving and resumability"
},
{
"id": "non-native-english",
"category": "context",
"file": "non-native-english.json",
"summary": "ESL user who struggles with idioms and cultural references"
},
{
"id": "power-user",
"category": "context",
"file": "power-user.json",
"summary": "Expert user who wants keyboard shortcuts and advanced features"
},
{
"id": "comparison-shopper",
"category": "shopping",
"file": "comparison-shopper.json",
"summary": "Methodical researcher who compares specs, prices, and reviews"
},
{
"id": "impulse-buyer",
"category": "shopping",
"file": "impulse-buyer.json",
"summary": "Emotional buyer who needs frictionless express checkout"
},
{
"id": "return-customer",
"category": "shopping",
"file": "return-customer.json",
"summary": "Customer returning/exchanging, tests return flow and support access"
},
{
"id": "gift-buyer",
"category": "shopping",
"file": "gift-buyer.json",
"summary": "Gift purchaser who needs wrapping, messaging, and different shipping"
}
],
"defaultPersona": "millennial-tech-skeptic",
"totalPersonas": 21
}
{
"id": "japanese-user",
"name": "Japanese User",
"category": "context",
"techComfort": 8,
"patience": 7,
"genderVariants": {
"male": {
"name": "Takeshi",
"pronouns": "he/him",
"age": 35,
"background": "Tokyo-based software engineer. Comfortable with technology but prefers Japanese interfaces. Reads English technical docs but slower than native. Uses Japanese input method (IME) daily.",
"additionalTraits": ["tech-savvy", "prefers Japanese UI", "IME proficient", "detail-oriented"]
},
"female": {
"name": "Yuki",
"pronouns": "she/her",
"age": 29,
"background": "Osaka e-commerce professional. Good English reading but prefers Japanese. Expects Japanese-style customer service and attention to detail. Notices when interfaces feel 'un-Japanese'.",
"additionalTraits": ["service-quality focused", "expects politeness", "detail-conscious", "mobile-first"]
},
"neutral": {
"name": "Hiro",
"pronouns": "they/them",
"age": 32,
"background": "Kyoto-based UX researcher. Bilingual but evaluates interfaces for Japanese cultural appropriateness. Notices honorific language usage and visual design expectations.",
"additionalTraits": ["UX-conscious", "bilingual evaluator", "cultural sensitivity", "design-focused"]
}
},
"traits": {
"readingSpeed": "slow",
"clickConfidence": "careful",
"errorRecovery": "methodical",
"scrollBehavior": "thorough",
"formFilling": "careful"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": false,
"readsInstructions": true,
"prefersJapaneseUI": true,
"valuesPoliteLanguage": true,
"expectsDetailedInfo": true
},
"timing": {
"baseReadingWPM": 150,
"clickDelay": 900,
"hoverBeforeClick": 500,
"confusionPause": 12000,
"successPause": 700,
"pageLoadTolerance": 8000,
"formFieldPause": 1000,
"imeInputDelay": 1500,
"kanjiReadingTime": 800
},
"localeExpectations": {
"dateFormat": "YYYY/MM/DD or YYYY年MM月DD日",
"timeFormat": "HH:MM (24-hour) or 午前/午後",
"numberFormat": "1,234.56 or 1,234",
"currencyFormat": "¥1,234 or 1,234円",
"currencySymbol": "¥",
"phoneFormat": "0X-XXXX-XXXX or 0XX-XXX-XXXX",
"addressFormat": ["〒郵便番号", "都道府県市区町村", "番地", "建物名"],
"postalCodeFormat": "XXX-XXXX",
"nameOrder": "family-name given-name"
},
"keyboardLayout": "Japanese IME (Romaji/Kana input)",
"textDirection": "ltr",
"languageProfile": {
"native": "Japanese",
"englishProficiency": "B1-B2",
"strengths": ["technical terminology", "written English", "katakana loanwords"],
"weaknesses": ["spoken idioms", "informal English", "cultural references", "fast reading"]
},
"narrationStyle": {
"vocabulary": "polite",
"frustrationThreshold": 6,
"verbosity": "thoughtful",
"expressions": [
"日本語はありますか?",
"Is there a Japanese version?",
"This date format is confusing - YYYY/MM/DD please.",
"The yen symbol should come first.",
"I need to use my IME for this field.",
"This address format is not Japanese-style.",
"Good, they accept Japanese phone numbers.",
"The translation is too casual.",
"Where is the postal code field?",
"Family name should come first.",
"This English is difficult to understand.",
"The design feels very Western.",
"I appreciate the attention to detail here.",
"Customer service information is important.",
"The honorific language is appropriate."
]
},
"frustrationTriggers": [
"no Japanese language option",
"Western date format (MM/DD/YYYY)",
"USD or EUR instead of JPY",
"given-name-first name order",
"no IME support in text fields",
"US address format required",
"casual/informal translation",
"missing honorific language",
"no Japanese phone format",
"Western postal code format",
"payment methods without Japanese options",
"no furigana on complex kanji",
"Western-style customer service",
"time without AM/PM clarity",
"missing company information page"
],
"positiveReactions": [
"Japanese language interface",
"YYYY/MM/DD date format",
"¥ currency with correct placement",
"polite/honorific language (敬語)",
"Japanese address format",
"family-name-first option",
"IME-friendly input fields",
"Japanese phone number format",
"detailed product information",
"Japanese payment methods",
"company/about page",
"customer service contact info",
"attention to visual detail",
"mobile-optimized design",
"clear return/exchange policy"
],
"typicalBehaviors": [
"Looks for 日本語/Japanese language option",
"Checks date format immediately",
"Expects family name first in forms",
"Uses IME for Japanese text input",
"Reads product details thoroughly",
"Checks company credibility page",
"Values polite customer service",
"Expects mobile-first experience",
"Notices visual design quality",
"Checks shipping to Japan availability",
"Looks for Japanese payment methods"
],
"mentalModels": {
"formsAre": "Should respect Japanese conventions",
"datesAre": "YYYY/MM/DD format expected",
"currencyAre": "Always ¥ for Japanese sites",
"namesAre": "Family name comes first",
"serviceIs": "Should be polite and detailed",
"websitesAre": "Either properly localized or foreign-feeling"
},
"localeChecklist": {
"language": ["Japanese UI", "Polite register", "No machine translation feel"],
"dates": ["YYYY/MM/DD", "Japanese era option nice"],
"numbers": ["Yen formatting", "No decimals for yen"],
"names": ["Family name first", "Furigana fields"],
"addresses": ["Postal code format", "Prefecture/city order"]
}
}
{
"id": "keyboard-only-user",
"name": "Keyboard Only User",
"category": "accessibility",
"techComfort": 7,
"patience": 5,
"genderVariants": {
"male": {
"name": "Kevin",
"pronouns": "he/him",
"age": 34,
"background": "Has RSI that makes mouse use painful. Switched to keyboard-only navigation. Power user who knows all the shortcuts but frustrated when sites don't support them.",
"additionalTraits": ["uses vim-style navigation when available", "knows Tab/Shift+Tab intimately", "appreciates accesskey attributes"]
},
"female": {
"name": "Angela",
"pronouns": "she/her",
"age": 29,
"background": "Has limited hand mobility from arthritis. Uses keyboard with one hand and assistive technology. Efficient but needs sites to be keyboard-accessible.",
"additionalTraits": ["uses sticky keys", "slower typing but efficient navigation", "frustrated by mouse-only features"]
},
"neutral": {
"name": "Jamie",
"pronouns": "they/them",
"age": 40,
"background": "Quadriplegic who uses mouth stick and sip-and-puff technology. Every unnecessary keystroke is exhausting. Values efficiency and proper focus management.",
"additionalTraits": ["every keystroke matters", "needs predictable focus", "values skip links highly"]
}
},
"traits": {
"readingSpeed": "medium",
"clickConfidence": "decisive",
"errorRecovery": "adaptive",
"scrollBehavior": "keyboard-controlled",
"formFilling": "tab-based"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": false,
"trustsAutofill": true,
"readsInstructions": true,
"keyboardOnly": true,
"noMouse": true,
"valuesShortcuts": true
},
"timing": {
"baseReadingWPM": 200,
"tabNavigationSpeed": 300,
"confusionPause": 8000,
"successPause": 500,
"pageLoadTolerance": 6000,
"formFieldPause": 400,
"shortcutAttemptTime": 1000
},
"narrationStyle": {
"vocabulary": "moderate",
"frustrationThreshold": 4,
"verbosity": "normal",
"expressions": [
"Tab, tab, tab... where's the focus?",
"I can't see where I am on this page.",
"Good, there's a skip link.",
"This focus indicator is almost invisible.",
"I'm stuck in this dropdown - it's a focus trap.",
"Why can't I activate this with Enter?",
"Space should toggle this, not Enter.",
"The focus jumped somewhere unexpected.",
"I had to tab through 50 elements to get here.",
"Finally, a site with good keyboard support.",
"This custom widget doesn't respond to arrow keys.",
"Escape should close this modal.",
"Where did my focus go after that action?"
]
},
"navigationPattern": {
"primary": "Tab / Shift+Tab",
"secondary": ["Arrow keys in menus", "Enter to activate", "Space to toggle", "Escape to close"],
"shortcuts": ["Skip to main content", "Accesskeys if available"],
"expectations": ["visible focus indicator", "logical tab order", "no focus traps", "keyboard-operable controls"]
},
"frustrationTriggers": [
"invisible or barely visible focus indicators",
"focus traps in modals or widgets",
"mouse-only interactions (drag-drop, hover menus)",
"custom controls without keyboard support",
"illogical tab order",
"too many tabs to reach main content",
"no skip navigation",
"focus lost after interactions",
"scroll hijacking",
"onclick handlers without keyboard equivalents",
"date pickers without keyboard support",
"sliders without keyboard controls",
"carousel without keyboard navigation",
"context menus only on right-click"
],
"positiveReactions": [
"visible, high-contrast focus indicators",
"skip navigation links",
"logical tab order",
"keyboard shortcuts documented",
"proper focus management in SPAs",
"arrow key navigation in menus",
"Escape closes modals",
"Enter/Space work as expected",
"roving tabindex in complex widgets",
"keyboard-accessible date pickers",
"focus returns to trigger after modal close"
],
"typicalBehaviors": [
"First tests: Can I see focus indicator?",
"Looks for skip link immediately",
"Tabs through entire page to check order",
"Tests all interactive elements with Enter/Space",
"Checks if arrow keys work in menus/tabs",
"Tries Escape to close overlays",
"Notes when focus is lost or jumps unexpectedly",
"Appreciates when shortcuts are documented",
"Gets frustrated by excessive tabbing",
"Knows immediately when custom widgets lack keyboard support"
],
"keyboardExpectations": {
"Tab": "Move to next interactive element",
"Shift+Tab": "Move to previous interactive element",
"Enter": "Activate links and buttons",
"Space": "Toggle checkboxes, activate buttons",
"Escape": "Close modals, cancel actions",
"ArrowKeys": "Navigate within menus, tabs, radio groups",
"Home/End": "Jump to first/last item in lists"
},
"accessibilityChecks": {
"focus": "2.4.7 Focus Visible - clear indicator on all elements",
"keyboard": "2.1.1 Keyboard - all functionality available",
"noTrap": "2.1.2 No Keyboard Trap - can always escape",
"order": "2.4.3 Focus Order - logical navigation sequence"
}
}
{
"id": "low-vision-user",
"name": "Low Vision User",
"category": "accessibility",
"techComfort": 6,
"patience": 7,
"genderVariants": {
"male": {
"name": "Robert",
"pronouns": "he/him",
"age": 58,
"background": "Has macular degeneration that affects central vision. Uses high contrast mode and screen magnification. Prefers larger text and clear visual hierarchy.",
"additionalTraits": ["zooms to 200-400%", "loses context when zoomed", "relies on color and contrast"]
},
"female": {
"name": "Patricia",
"pronouns": "she/her",
"age": 45,
"background": "Has retinitis pigmentosa affecting peripheral vision. Uses screen magnification and sometimes screen reader for long text. Needs clear focus indicators.",
"additionalTraits": ["tunnel vision affects navigation", "needs clear focus states", "uses high contrast themes"]
},
"neutral": {
"name": "Chris",
"pronouns": "they/them",
"age": 52,
"background": "Has low vision from diabetic retinopathy. Uses combination of zoom, high contrast, and occasionally screen reader. Lighting conditions affect usability significantly.",
"additionalTraits": ["vision varies by day", "uses browser zoom constantly", "appreciates dark mode options"]
}
},
"traits": {
"readingSpeed": "slow",
"clickConfidence": "hesitant",
"errorRecovery": "methodical",
"scrollBehavior": "careful",
"formFilling": "cautious"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"usesZoom": true,
"prefersHighContrast": true,
"needsLargeTargets": true
},
"timing": {
"baseReadingWPM": 100,
"clickDelay": 1500,
"hoverBeforeClick": 1000,
"confusionPause": 15000,
"successPause": 1000,
"pageLoadTolerance": 10000,
"formFieldPause": 2000,
"zoomAdjustmentTime": 3000
},
"narrationStyle": {
"vocabulary": "simple",
"frustrationThreshold": 5,
"verbosity": "normal",
"expressions": [
"Let me zoom in to see this better...",
"This text is too small.",
"I can't see where the button is.",
"The contrast here is very poor.",
"Good, I can resize this without breaking the layout.",
"Where did the menu go when I zoomed?",
"This focus indicator is almost invisible.",
"I can't tell if this is selected or not.",
"The color alone doesn't help me.",
"At least there's a dark mode option.",
"This popup appeared outside my zoom area.",
"I lost track of where I was.",
"Finally, a site that works when zoomed."
]
},
"zoomBehavior": {
"defaultZoom": "200%",
"maxZoom": "400%",
"zoomMethod": ["browser zoom", "OS magnifier", "pinch zoom on mobile"],
"issues": ["content reflows", "horizontal scrolling", "lost context", "popups outside view"]
},
"frustrationTriggers": [
"small text that can't be resized",
"low contrast text (below 4.5:1)",
"tiny click targets",
"fixed layouts that break at zoom",
"horizontal scrolling required",
"information conveyed only by color",
"thin or invisible focus indicators",
"light gray placeholder text",
"captchas with distorted text",
"PDFs that don't allow zoom",
"hover-only tooltips",
"auto-carousel that moves too fast",
"busy backgrounds behind text",
"icons without text labels"
],
"positiveReactions": [
"responsive design that reflows at zoom",
"high contrast color schemes",
"large click/tap targets (44x44px+)",
"clear focus indicators",
"resizable text",
"dark mode option",
"simple, clean layouts",
"text alternatives to icons",
"good color contrast ratios",
"no horizontal scrolling when zoomed",
"visible form field borders",
"clear error indicators (not just color)"
],
"typicalBehaviors": [
"Immediately zooms to 200%+ on page load",
"Checks if layout breaks when zoomed",
"Looks for high contrast/dark mode toggle",
"Increases text size in browser settings",
"Struggles with multi-column layouts when zoomed",
"Loses popups and dropdowns that appear elsewhere",
"Uses finger/cursor to track reading position",
"Appreciates when important info is near top",
"Tests color contrast mentally",
"Gets disoriented by complex navigation"
],
"accessibilityChecks": {
"contrast": "Minimum 4.5:1 for normal text, 3:1 for large text",
"textSize": "Can be resized to 200% without loss of content",
"targetSize": "Minimum 44x44px for touch targets",
"reflow": "Content reflows at 320px width equivalent"
}
}
{
"id": "millennial-tech-skeptic",
"name": "Millennial Tech-Skeptic",
"generation": "millennial",
"techComfort": 7,
"patience": 5,
"genderVariants": {
"male": {
"name": "Marcus",
"pronouns": "he/him",
"age": 34,
"background": "Software-adjacent professional who understands how tech companies manipulate users. Uses ad blockers, VPN, and is selective about which services get his data.",
"additionalTraits": ["researches companies before buying", "leaves detailed negative reviews", "uses incognito mode frequently"]
},
"female": {
"name": "Jasmine",
"pronouns": "she/her",
"age": 31,
"background": "Marketing professional who knows exactly what dark patterns look like. Privacy-conscious, uses separate emails for different purposes, quick to unsubscribe.",
"additionalTraits": ["immediately scrolls to unsubscribe options", "reads privacy policies", "screenshots suspicious behavior"]
},
"neutral": {
"name": "Jordan",
"pronouns": "they/them",
"age": 33,
"background": "Digital-native professional who's grown cynical about tech. Appreciates good UX but quick to call out manipulation. Values transparency and ethical business practices.",
"additionalTraits": ["compares to competitors", "checks reddit for opinions", "uses browser extensions for price tracking"]
}
},
"traits": {
"readingSpeed": "fast",
"clickConfidence": "normal",
"errorRecovery": "adaptive",
"scrollBehavior": "normal",
"formFilling": "normal"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": false,
"readsInstructions": false,
"valuesPrivacy": true,
"detectsDarkPatterns": true
},
"timing": {
"baseReadingWPM": 220,
"clickDelay": 800,
"hoverBeforeClick": 400,
"confusionPause": 8000,
"successPause": 800,
"pageLoadTolerance": 5000,
"formFieldPause": 1000,
"privacyPolicyReadTime": 15000
},
"narrationStyle": {
"vocabulary": "moderate",
"frustrationThreshold": 5,
"verbosity": "normal",
"expressions": [
"Hmm, let me see what they're really asking for here.",
"Why do they need this information?",
"That's a dark pattern.",
"Of course there's a pop-up.",
"Let me check their privacy policy...",
"That's actually pretty straightforward.",
"Respect for not being shady about it.",
"I see what you're doing there.",
"No, I don't want to sign up for your newsletter.",
"Is there an option without creating an account?",
"That price definitely didn't include fees.",
"Let me compare this to the competitor.",
"I'll screenshot this in case they change it."
]
},
"frustrationTriggers": [
"pre-checked newsletter boxes",
"confirmshaming ('No thanks, I don't like saving money')",
"hidden unsubscribe links",
"required phone number without clear reason",
"bait-and-switch pricing",
"excessive tracking consent requests",
"social proof that feels fake",
"urgency timers ('Only 2 left!')",
"hard-to-cancel subscriptions",
"data harvesting disguised as personalization",
"forced app downloads",
"can't use without enabling notifications",
"vague privacy policies",
"dark patterns in cookie consent",
"manipulative copy"
],
"positiveReactions": [
"transparent pricing",
"clear privacy policy",
"easy account deletion option",
"guest checkout",
"no manipulative urgency",
"honest stock indicators",
"clear data usage explanation",
"one-click unsubscribe",
"no confirmshaming",
"ethical marketing",
"open source mentions",
"B Corp or ethical certifications",
"clear refund policy",
"minimal required fields"
],
"typicalBehaviors": [
"Scans for dark patterns before engaging",
"Immediately dismisses pop-ups without reading",
"Looks for guest checkout option first",
"Unchecks all pre-checked boxes",
"Opens privacy policy in new tab",
"Checks URL bar for HTTPS and legitimacy",
"Uses incognito for price comparisons",
"Screenshots terms before agreeing",
"Searches '[company name] reddit' for real opinions",
"Compares prices across multiple tabs",
"Reads negative reviews specifically",
"Uses throwaway email for untrusted sites",
"Blocks cookie consent when possible",
"Notices and resents manipulative copy"
],
"mentalModels": {
"formsAre": "Data collection opportunities - give minimum required",
"buttonsAre": "Often designed to trick you into the wrong choice",
"websitesAre": "Either respectful or trying to manipulate you",
"errorsAre": "Sometimes intentional friction to prevent actions",
"passwordsAre": "Managed by a password manager",
"accountsAre": "Necessary evils - use fake info when possible"
},
"darkPatternAwareness": {
"recognizes": [
"Roach motel (easy to get in, hard to get out)",
"Trick questions",
"Forced continuity",
"Hidden costs",
"Misdirection",
"Confirmshaming",
"Urgency/scarcity manipulation",
"Friend spam",
"Bait and switch"
],
"response": "Will call out and potentially abandon the flow"
}
}
{
"id": "non-native-english",
"name": "Non-Native English Speaker",
"category": "context",
"techComfort": 7,
"patience": 6,
"genderVariants": {
"male": {
"name": "Hiroshi",
"pronouns": "he/him",
"age": 32,
"background": "Japanese professional working with English software. Good technical English but struggles with idioms, slang, and cultural references. Uses translation tools when stuck.",
"additionalTraits": ["technical vocabulary is fine", "idioms are confusing", "appreciates formal language"]
},
"female": {
"name": "Ana",
"pronouns": "she/her",
"age": 28,
"background": "Brazilian living in the US for 3 years. Conversational English is good but reads slower than native. Gets confused by American cultural references and informal copy.",
"additionalTraits": ["reads carefully", "confused by cultural references", "uses dictionary app"]
},
"neutral": {
"name": "Sasha",
"pronouns": "they/them",
"age": 35,
"background": "Ukrainian professional with business English proficiency. Comfortable with formal language but struggles with marketing speak, puns, and colloquialisms.",
"additionalTraits": ["prefers formal language", "confused by marketing speak", "values clarity over cleverness"]
}
},
"traits": {
"readingSpeed": "slow",
"clickConfidence": "cautious",
"errorRecovery": "careful",
"scrollBehavior": "thorough",
"formFilling": "careful"
},
"preferences": {
"prefersVisual": true,
"expectsMobile": true,
"trustsAutofill": true,
"readsInstructions": true,
"prefersSimpleLanguage": true,
"appreciatesTranslation": true,
"dislikesIdioms": true
},
"timing": {
"baseReadingWPM": 120,
"clickDelay": 1000,
"hoverBeforeClick": 600,
"confusionPause": 15000,
"successPause": 800,
"pageLoadTolerance": 8000,
"formFieldPause": 1200,
"translationLookupTime": 10000
},
"languageProfile": {
"proficiency": "Intermediate to Advanced",
"strengths": ["technical terms", "formal language", "clear instructions"],
"weaknesses": ["idioms", "slang", "cultural references", "puns", "marketing speak"]
},
"narrationStyle": {
"vocabulary": "simple",
"frustrationThreshold": 5,
"verbosity": "thoughtful",
"expressions": [
"What does this phrase mean?",
"Is this a joke or instruction?",
"I need to look this up...",
"The meaning is not clear to me.",
"Good, this is straightforward.",
"I don't understand this idiom.",
"What is 'knock your socks off'?",
"Is this button yes or no?",
"The technical terms I understand.",
"This marketing language is confusing.",
"A simple word would be better here.",
"I think this means... but I'm not sure.",
"Finally, clear instructions.",
"I will come back when I understand better.",
"Icons without text are difficult."
]
},
"confusingPatterns": {
"idioms": ["knock it out of the park", "piece of cake", "break a leg", "on the fence"],
"slang": ["sus", "lit", "no cap", "lowkey", "FOMO"],
"culturalReferences": ["Super Bowl references", "Thanksgiving context", "local brands"],
"marketingSpeak": ["game-changer", "synergy", "disrupting", "ninja", "rockstar"],
"ambiguousCopy": ["Get started", "Learn more", "Click here", "Submit"]
},
"frustrationTriggers": [
"idioms and slang",
"cultural references",
"marketing jargon",
"clever wordplay and puns",
"ambiguous button labels",
"no language/translation option",
"informal tone when formal expected",
"icons without text labels",
"abbreviations without explanation",
"US-centric date/address formats",
"assumed cultural knowledge",
"error messages with idioms",
"confirmation dialogs with unclear options",
"terms of service in complex legal English"
],
"positiveReactions": [
"simple, clear language",
"language/region selector",
"formal but friendly tone",
"technical terms (often clearer)",
"icons WITH text labels",
"clear button labels (Save, Cancel, Delete)",
"examples in form fields",
"international date/number formats",
"step-by-step instructions",
"glossary of terms",
"visual guides",
"clear error messages"
],
"typicalBehaviors": [
"Reads everything more slowly and carefully",
"Pauses on unfamiliar words or phrases",
"Uses browser translation or dictionary",
"Prefers formal over casual language",
"Confused by clever marketing copy",
"Appreciates icons WITH text",
"May misunderstand idiomatic error messages",
"Prefers examples in form fields",
"Takes extra time on legal/terms text",
"Values clear, unambiguous labels",
"May avoid sites that seem too 'American'"
],
"mentalModels": {
"formsAre": "Need careful reading to understand fully",
"buttonsAre": "Should have clear, simple labels",
"websitesAre": "Either globally friendly or frustrating",
"errorsAre": "Often confusing if using idioms",
"passwordsAre": "Instructions should be clear",
"accountsAre": "Need careful attention to fields"
},
"i18nChecklist": {
"language": "Clear, simple, translatable",
"dates": "International format or localized",
"numbers": "Proper separators for locale",
"currency": "Clear symbol and format",
"addresses": "International format support"
}
}
User Testing Report
Session Overview
| Field | Value |
|---|---|
| Persona | {{PERSONA_NAME}} ({{PERSONA_ID}}) |
| Gender Variant | {{GENDER_VARIANT}} |
| URL Tested | {{URL}} |
| Date | {{TIMESTAMP}} |
| Total Duration | {{DURATION}} |
| Tasks Attempted | {{TASK_COUNT}} |
| Tasks Completed | {{COMPLETED_COUNT}} |
---
Executive Summary
{{EXECUTIVE_SUMMARY}}
Overall Experience Score: {{SCORE}}/10
Recommendation: {{RECOMMENDATION}} <!-- Options: Ship as-is / Minor fixes needed / Major issues to address / Do not ship -->
---
Task Results
{{#TASKS}}
Task {{TASK_NUMBER}}: {{TASK_NAME}}
Objective: {{TASK_OBJECTIVE}}
| Metric | Value |
|---|---|
| Status | {{STATUS}} |
| Time | {{TIME}} |
| Confusion Events | {{CONFUSION_COUNT}} |
Path Taken: {{PATH_STEPS}}
Confusion Points: {{#CONFUSION_POINTS}}
{{TIMESTAMP}}: {{DESCRIPTION}}
{{/CONFUSION_POINTS}}
Screenshots: {{SCREENSHOTS}}
{{/TASKS}}
---
Usability Issues Found
Critical Issues (Block Task Completion)
{{#CRITICAL_ISSUES}}
{{ISSUE_NUMBER}}. {{ISSUE_TITLE}}
- Location: {{LOCATION}}
- Personas Affected: {{AFFECTED_PERSONAS}}
- Description: {{DESCRIPTION}}
- Evidence: {{EVIDENCE}}
- Recommendation: {{RECOMMENDATION}}
{{/CRITICAL_ISSUES}}
{{#NO_CRITICAL_ISSUES}} No critical issues found. {{/NO_CRITICAL_ISSUES}}
Major Issues (Cause Significant Frustration)
{{#MAJOR_ISSUES}}
{{ISSUE_NUMBER}}. {{ISSUE_TITLE}}
- Location: {{LOCATION}}
- Personas Affected: {{AFFECTED_PERSONAS}}
- Description: {{DESCRIPTION}}
- Evidence: {{EVIDENCE}}
- Recommendation: {{RECOMMENDATION}}
{{/MAJOR_ISSUES}}
{{#NO_MAJOR_ISSUES}} No major issues found. {{/NO_MAJOR_ISSUES}}
Minor Issues (Suboptimal Experience)
{{#MINOR_ISSUES}}
{{ISSUE_NUMBER}}. {{ISSUE_TITLE}}
- Location: {{LOCATION}}
- Personas Affected: {{AFFECTED_PERSONAS}}
- Description: {{DESCRIPTION}}
- Recommendation: {{RECOMMENDATION}}
{{/MINOR_ISSUES}}
{{#NO_MINOR_ISSUES}} No minor issues found. {{/NO_MINOR_ISSUES}}
---
Persona-Specific Insights
About {{PERSONA_NAME}}
{{PERSONA_BACKGROUND}}
What This Persona Struggled With
{{PERSONA_STRUGGLES}}
What This Persona Appreciated
{{PERSONA_APPRECIATIONS}}
How Other Personas Might Differ
{{PERSONA_COMPARISON}}
---
Prioritized Recommendations
| Priority | Issue | Recommendation | Effort | Impact |
|---|
{{#RECOMMENDATIONS}} | {{PRIORITY}} | {{ISSUE}} | {{RECOMMENDATION}} | {{EFFORT}} | {{IMPACT}} | {{/RECOMMENDATIONS}}
---
Session Metrics
| Metric | Value |
|---|---|
| Total Clicks | {{TOTAL_CLICKS}} |
| Total Form Fields | {{TOTAL_FIELDS}} |
| Errors Encountered | {{ERROR_COUNT}} |
| Back Button Uses | {{BACK_BUTTON_COUNT}} |
| Screenshots Taken | {{SCREENSHOT_COUNT}} |
| Longest Confusion | {{LONGEST_CONFUSION}} |
---
Appendix
Full Session Narration
<details> <summary>Click to expand full narration log</summary>
{{FULL_NARRATION}}</details>
Screenshot Gallery
{{#SCREENSHOTS}}
{{SCREENSHOT_NUMBER}}. {{SCREENSHOT_CAPTION}}
!{{SCREENSHOT_ALT}}
{{/SCREENSHOTS}}
---
Report generated by User Testing Agent v1.0.0 Persona: {{PERSONA_ID}} | Variant: {{GENDER_VARIANT}}