agy-superpowers 5.0.7 → 5.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/agent/skills/api-design/SKILL.md +193 -0
- package/template/agent/skills/app-store-optimizer/SKILL.md +127 -0
- package/template/agent/skills/auth-and-identity/SKILL.md +167 -0
- package/template/agent/skills/backend-developer/SKILL.md +148 -0
- package/template/agent/skills/community-manager/SKILL.md +115 -0
- package/template/agent/skills/content-marketer/SKILL.md +111 -0
- package/template/agent/skills/conversion-optimizer/SKILL.md +142 -0
- package/template/agent/skills/copywriter/SKILL.md +114 -0
- package/template/agent/skills/cto-architect/SKILL.md +133 -0
- package/template/agent/skills/customer-success-manager/SKILL.md +126 -0
- package/template/agent/skills/data-analyst/SKILL.md +147 -0
- package/template/agent/skills/devops-engineer/SKILL.md +117 -0
- package/template/agent/skills/email-infrastructure/SKILL.md +164 -0
- package/template/agent/skills/frontend-developer/SKILL.md +133 -0
- package/template/agent/skills/game-design/SKILL.md +194 -0
- package/template/agent/skills/game-developer/SKILL.md +175 -0
- package/template/agent/skills/growth-hacker/SKILL.md +122 -0
- package/template/agent/skills/i18n-localization/SKILL.md +126 -0
- package/template/agent/skills/influencer-marketer/SKILL.md +141 -0
- package/template/agent/skills/mobile-developer/SKILL.md +142 -0
- package/template/agent/skills/monetization-strategist/SKILL.md +119 -0
- package/template/agent/skills/paid-acquisition-specialist/SKILL.md +119 -0
- package/template/agent/skills/product-manager/SKILL.md +105 -0
- package/template/agent/skills/real-time-features/SKILL.md +194 -0
- package/template/agent/skills/retention-specialist/SKILL.md +123 -0
- package/template/agent/skills/saas-architect/SKILL.md +139 -0
- package/template/agent/skills/security-engineer/SKILL.md +133 -0
- package/template/agent/skills/seo-specialist/SKILL.md +130 -0
- package/template/agent/skills/subscription-billing/SKILL.md +179 -0
- package/template/agent/skills/ux-designer/SKILL.md +128 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-specialist
|
|
3
|
+
description: Use when working on technical SEO, keyword research, on-page optimization, backlink strategy, or improving organic search rankings
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SEO Specialist Lens
|
|
7
|
+
|
|
8
|
+
> **Philosophy:** SEO is long-term compounding equity. Get indexed → get ranked → get traffic → repeat.
|
|
9
|
+
> Google ranks pages, not websites. Every page is its own opportunity.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Core Instincts
|
|
14
|
+
|
|
15
|
+
- **Search intent first** — understand WHY someone searches before writing
|
|
16
|
+
- **Crawl → Index → Rank** — a page can't rank if it's not indexed; can't be indexed if not crawled
|
|
17
|
+
- **E-E-A-T matters for every niche** — Experience, Expertise, Authoritativeness, Trustworthiness
|
|
18
|
+
- **Backlinks = votes** — quality beats quantity; one DR70 link > 100 DR10 links
|
|
19
|
+
- **Core Web Vitals are a ranking signal** — performance and UX directly affect SEO
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## On-Page SEO Exact Rules
|
|
24
|
+
|
|
25
|
+
| Element | Rule | Why |
|
|
26
|
+
|---------|------|-----|
|
|
27
|
+
| `<title>` tag | ≤ 60 characters | Truncated in SERPs beyond this |
|
|
28
|
+
| Meta description | ≤ 160 characters | Truncated; influences CTR not ranking |
|
|
29
|
+
| `<h1>` | 1 per page; include primary keyword | Strongest on-page keyword signal |
|
|
30
|
+
| URL slug | Short, hyphenated, keyword-rich | Clarity + keyword signal |
|
|
31
|
+
| Alt text (images) | Descriptive, include keyword naturally | Accessibility + image search |
|
|
32
|
+
| Primary keyword | In first 100 words, title, H1, 1 H2 | Keyword density ≈ 1–2%, no stuffing |
|
|
33
|
+
| Internal links | ≥ 3 to related pages | Passes link equity, improves crawl |
|
|
34
|
+
| Page load speed | LCP < 2.5s, CLS < 0.1, INP < 200ms | Core Web Vitals ranking signal |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Keyword Research Process
|
|
39
|
+
|
|
40
|
+
1. **Seed terms** — brainstorm 20–30 core topics
|
|
41
|
+
2. **Expand** — use Ahrefs / Semrush "keyword ideas" to 5× the list
|
|
42
|
+
3. **Cluster by intent** — Informational / Navigational / Commercial / Transactional
|
|
43
|
+
4. **Score by KD + Volume** — prioritize: Volume > 100/month + KD < 30 (for new sites)
|
|
44
|
+
5. **Long-tail first** — easier to rank; signals authority for head terms
|
|
45
|
+
6. **Map to pages** — 1 primary keyword per page, 2–5 secondary
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Keyword Difficulty by Domain Rating
|
|
50
|
+
|
|
51
|
+
| Your Site DR | Target KD (Keyword Difficulty) |
|
|
52
|
+
|-------------|-------------------------------|
|
|
53
|
+
| 0–20 | < 15 |
|
|
54
|
+
| 20–40 | < 25 |
|
|
55
|
+
| 40–60 | < 40 |
|
|
56
|
+
| 60+ | < 60 |
|
|
57
|
+
|
|
58
|
+
*(DR = Domain Rating, KD = Keyword Difficulty, both 0–100 scale in Ahrefs)*
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Technical SEO Checklist
|
|
63
|
+
|
|
64
|
+
- [ ] `sitemap.xml` submitted to Google Search Console + Bing Webmaster
|
|
65
|
+
- [ ] `robots.txt` not accidentally blocking important pages
|
|
66
|
+
- [ ] Canonical tags on duplicate/near-duplicate pages
|
|
67
|
+
- [ ] HTTPS on all pages (non-HTTPS = ranking penalty)
|
|
68
|
+
- [ ] Mobile-friendly (Google uses mobile-first indexing)
|
|
69
|
+
- [ ] Core Web Vitals passing (LCP, CLS, INP) — verify in GSC
|
|
70
|
+
- [ ] Structured data (JSON-LD) on applicable pages (FAQ, Product, Review, Breadcrumb)
|
|
71
|
+
- [ ] No orphan pages (every important page linked to from at least 1 other page)
|
|
72
|
+
- [ ] Hreflang tags for multilingual sites
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Backlink Strategy
|
|
77
|
+
|
|
78
|
+
| Tactic | Effort | ROI |
|
|
79
|
+
|--------|--------|-----|
|
|
80
|
+
| Content linkbait (tools, data studies, guides) | High | ✅ Very high |
|
|
81
|
+
| Guest posting on relevant sites | Medium | ✅ High |
|
|
82
|
+
| HARO / journalist requests | Low | ✅ High |
|
|
83
|
+
| Broken link building | Medium | Medium |
|
|
84
|
+
| Directory and startup listings | Low | Low-medium |
|
|
85
|
+
| Buying links | — | ❌ Google penalty risk |
|
|
86
|
+
|
|
87
|
+
**Anchor text diversity:** Branded (40%) > Natural ("click here", 25%) > Keyword-rich (25%) > Naked URL (10%). Keyword-heavy anchor = manipulation signal.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Questions You Always Ask
|
|
92
|
+
|
|
93
|
+
**When auditing a site:**
|
|
94
|
+
- Is the site indexed? (Check `site:domain.com` in Google, or GSC Index report)
|
|
95
|
+
- What's the current DR/DA? What's the plan to grow it?
|
|
96
|
+
- Are there pages cannibalizing each other for the same keyword?
|
|
97
|
+
- What does GSC show for impressions with 0 clicks? (Position 8–20 = low-hanging optimization)
|
|
98
|
+
|
|
99
|
+
**When planning new content:**
|
|
100
|
+
- What's the search intent — informational, commercial, or transactional?
|
|
101
|
+
- Is there current ranking content to optimize, or do we need a new page?
|
|
102
|
+
- What would earn a featured snippet for this query?
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Red Flags
|
|
107
|
+
|
|
108
|
+
**Must fix:**
|
|
109
|
+
- [ ] Important pages not indexed (check GSC)
|
|
110
|
+
- [ ] Multiple pages targeting the same keyword (cannibalization)
|
|
111
|
+
- [ ] No `<h1>` or multiple `<h1>` on a page
|
|
112
|
+
- [ ] Core Web Vitals failing in GSC
|
|
113
|
+
|
|
114
|
+
**Should fix:**
|
|
115
|
+
- [ ] No internal linking between related posts
|
|
116
|
+
- [ ] meta description missing or > 160 chars
|
|
117
|
+
- [ ] Title tags > 60 chars
|
|
118
|
+
- [ ] No structured data on applicable pages
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Who to Pair With
|
|
123
|
+
- `content-marketer` — for content strategy and topic selection
|
|
124
|
+
- `frontend-developer` — for Core Web Vitals and technical implementation
|
|
125
|
+
- `data-analyst` — for GSC data analysis and ranking tracking
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Tools
|
|
130
|
+
Google Search Console (free, essential) · Ahrefs · Semrush · Screaming Frog (site audits) · PageSpeed Insights · Moz · Answer the Public
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subscription-billing
|
|
3
|
+
description: Use when integrating subscription billing, handling Stripe webhooks, implementing trial logic, managing upgrades/downgrades, or building dunning flows
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Subscription Billing Lens
|
|
7
|
+
|
|
8
|
+
> **Philosophy:** Billing is load-bearing infrastructure. A bug in billing = lost revenue or incorrect charges.
|
|
9
|
+
> Build it like critical path code: idempotent, webhook-driven, logged exhaustively.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Core Instincts
|
|
14
|
+
|
|
15
|
+
- **Webhook-first** — Stripe's webhook is the source of truth, not your API response
|
|
16
|
+
- **Idempotency everywhere** — billing operations must be safe to retry
|
|
17
|
+
- **Never trust client state for billing** — always fetch subscription status from Stripe server-side
|
|
18
|
+
- **All clock-sensitive operations use `event.created`** — not `Date.now()`
|
|
19
|
+
- **Soft failures, never hard block** — grace period on payment failures protects revenue
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Stripe Integration Architecture
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
User upgrades plan →
|
|
27
|
+
1. Client: Stripe.js → Payment Method → PaymentIntent / SetupIntent
|
|
28
|
+
2. Server: Create/Update Subscription on Stripe
|
|
29
|
+
3. Stripe: Processes payment → emits webhook event
|
|
30
|
+
4. Server: Webhook handler updates DB subscription status
|
|
31
|
+
5. Server: Return state from DB (never from Stripe API response)
|
|
32
|
+
|
|
33
|
+
⚠️ Anti-pattern: updating DB from API response
|
|
34
|
+
✅ Pattern: update DB only from webhook confirmation
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Critical Webhook Events to Handle
|
|
40
|
+
|
|
41
|
+
| Event | What to do |
|
|
42
|
+
|-------|-----------|
|
|
43
|
+
| `checkout.session.completed` | Provision access, send welcome email |
|
|
44
|
+
| `customer.subscription.created` | Set status = `active`, log |
|
|
45
|
+
| `customer.subscription.updated` | Update plan, seats, feature flags |
|
|
46
|
+
| `customer.subscription.deleted` | Set status = `canceled`, begin grace period |
|
|
47
|
+
| `invoice.payment_succeeded` | Extend access, reset dunning state |
|
|
48
|
+
| `invoice.payment_failed` | Start dunning, notify user, DON'T revoke access immediately |
|
|
49
|
+
| `invoice.upcoming` | Warn user of upcoming charge |
|
|
50
|
+
| `customer.subscription.trial_will_end` | 3-day warning email before trial ends |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Trial Logic Rules
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Trial best practices:
|
|
58
|
+
- Default trial: 14 days (Stripe default is 30; reduce for faster conversion signal)
|
|
59
|
+
- Require payment method at trial start (reduces churn at trial end)
|
|
60
|
+
- Free trial without CC = high trial-end churn; use for virality, not conversion
|
|
61
|
+
- trial_will_end webhook fires 3 days before → trigger upgrade prompt
|
|
62
|
+
|
|
63
|
+
Trial states:
|
|
64
|
+
trialing → (payment method on file) → auto-converts to active
|
|
65
|
+
trialing → (no payment method) → needs_payment_method → upgrade prompt
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Dunning Flow (Failed Payment Recovery)
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Day 0: Payment fails → invoice.payment_failed webhook
|
|
74
|
+
→ Set subscription status = past_due
|
|
75
|
+
→ Email: "Your payment failed — please update your card"
|
|
76
|
+
→ DO NOT revoke access
|
|
77
|
+
|
|
78
|
+
Day 3: Stripe auto-retries
|
|
79
|
+
→ On success: subscription back to active
|
|
80
|
+
→ On fail: email #2 "We'll try again in 4 days"
|
|
81
|
+
|
|
82
|
+
Day 7: Stripe auto-retries
|
|
83
|
+
→ On fail: email #3 with prominent card update CTA
|
|
84
|
+
|
|
85
|
+
Day 14: Final retry → if fails → subscription.deleted webhook
|
|
86
|
+
→ Begin grace period (7–14 days before revoking access)
|
|
87
|
+
→ Final email: "Your account will be suspended on [date]"
|
|
88
|
+
|
|
89
|
+
Configure in: Stripe Dashboard → Billing → Subscriptions → Retry schedule
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Proration & Plan Changes
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
// Upgrading mid-cycle: charge difference immediately
|
|
98
|
+
await stripe.subscriptions.update(subscriptionId, {
|
|
99
|
+
items: [{ id: itemId, price: newPriceId }],
|
|
100
|
+
proration_behavior: 'create_prorations', // Default — charge difference now
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Downgrading: apply at end of period (no refund)
|
|
104
|
+
await stripe.subscriptions.update(subscriptionId, {
|
|
105
|
+
items: [{ id: itemId, price: lowerPriceId }],
|
|
106
|
+
proration_behavior: 'none',
|
|
107
|
+
billing_cycle_anchor: 'unchanged',
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Idempotency Pattern
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
// All Stripe API calls should use idempotency keys
|
|
117
|
+
await stripe.subscriptions.create(params, {
|
|
118
|
+
idempotencyKey: `sub_create_${userId}_${planId}`,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Webhook handlers must be idempotent
|
|
122
|
+
async function handleWebhook(event) {
|
|
123
|
+
// Check if already processed
|
|
124
|
+
if (await db.webhookEvents.find(event.id)) return;
|
|
125
|
+
|
|
126
|
+
await db.webhookEvents.create({ id: event.id, processedAt: new Date() });
|
|
127
|
+
// ... handle event
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## ❌ Anti-Patterns to Avoid
|
|
134
|
+
|
|
135
|
+
| ❌ NEVER DO | Why | ✅ DO INSTEAD |
|
|
136
|
+
|------------|-----|--------------|
|
|
137
|
+
| Update subscription status from API response | Stripe may succeed but your server errors | Only from webhook |
|
|
138
|
+
| Revoke access immediately on payment failure | Kills goodwill; many recover | Grace period + dunning |
|
|
139
|
+
| No idempotency on webhook handler | Duplicate events → double-provision | Store processed event IDs |
|
|
140
|
+
| Store card details in your DB | PCI violation | Use Stripe tokens only |
|
|
141
|
+
| Use `Date.now()` for billing timestamps | Clock drift causes subtle bugs | Use `event.created` from Stripe |
|
|
142
|
+
| Hardcode price IDs in code | Can't change pricing without deploy | Store in env vars or DB |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Questions You Always Ask
|
|
147
|
+
|
|
148
|
+
**When building billing:**
|
|
149
|
+
- Is the webhook handler idempotent? What happens if it fires twice?
|
|
150
|
+
- Are we testing with Stripe test mode webhooks via `stripe listen`?
|
|
151
|
+
- What's the grace period on failed payments before access revocation?
|
|
152
|
+
- Is there a webhook signature verification (`stripe.webhooks.constructEvent`)?
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Red Flags
|
|
157
|
+
|
|
158
|
+
**Must fix:**
|
|
159
|
+
- [ ] Subscription status updated from API response (not webhook)
|
|
160
|
+
- [ ] No webhook signature verification
|
|
161
|
+
- [ ] Access revoked immediately on `invoice.payment_failed`
|
|
162
|
+
- [ ] No idempotency on webhook handler
|
|
163
|
+
|
|
164
|
+
**Should fix:**
|
|
165
|
+
- [ ] No dunning email sequence
|
|
166
|
+
- [ ] No handling of `customer.subscription.trial_will_end`
|
|
167
|
+
- [ ] Price IDs hardcoded in application code
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Who to Pair With
|
|
172
|
+
- `saas-architect` — for subscription status in the tenant data model
|
|
173
|
+
- `backend-developer` — for API design around billing operations
|
|
174
|
+
- `monetization-strategist` — for pricing model decisions
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Tools
|
|
179
|
+
Stripe (billing) · `stripe-node` · Stripe CLI (`stripe listen` for local webhooks) · Stripe Test Cards (4242 4242 4242 4242) · Paddle (alternative with VAT/tax handling)
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-designer
|
|
3
|
+
description: Use when designing UI, creating wireframes, running user research, defining information architecture, or reviewing design decisions — regardless of tool (Figma, Sketch, etc.)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UX Designer Lens
|
|
7
|
+
|
|
8
|
+
> **Philosophy:** Design is problem solving, not decoration. Good UX is invisible — users accomplish their goal without noticing the interface.
|
|
9
|
+
> The best design eliminates decisions the user shouldn't have to make.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## ⚠️ ASK BEFORE ASSUMING
|
|
14
|
+
|
|
15
|
+
| What | Why it matters |
|
|
16
|
+
|------|----------------|
|
|
17
|
+
| **Platform?** iOS / Android / Web / Desktop | Each has distinct patterns and constraints |
|
|
18
|
+
| **Stage?** Early exploration / Detailed design / Polish | Changes fidelity needed |
|
|
19
|
+
| **User research available?** | Can't design for a user you haven't talked to |
|
|
20
|
+
| **Design system exists?** | Whether to extend or create from scratch |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Core Instincts
|
|
25
|
+
|
|
26
|
+
- **Design for the job-to-be-done** — what is the user trying to accomplish? Remove everything that doesn't serve that
|
|
27
|
+
- **Hierarchy guides the eye** — size, color, and position communicate importance; every screen needs one clear primary action
|
|
28
|
+
- **Friction has a cost** — every tap, field, and decision users must make is a drop in task completion
|
|
29
|
+
- **Don't make me think (Steve Krug)** — if users have to figure it out, the design failed
|
|
30
|
+
- **Test with 5 users** — 5 usability test sessions reveal ~85% of usability problems
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Hick's Law & Fitts' Law Applied
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Hick's Law: Decision time = log2(N choices)
|
|
38
|
+
→ More options = slower decisions = more friction
|
|
39
|
+
→ Max 5–7 items in navigation; fewer primary actions per screen
|
|
40
|
+
|
|
41
|
+
Fitts' Law: Time to tap = a + b × log2(distance/size + 1)
|
|
42
|
+
→ Bigger targets = faster taps
|
|
43
|
+
→ Primary CTA: minimum 44×44pt (iOS) / 48×48dp (Android) / 44×44px (web)
|
|
44
|
+
→ Place common actions closer to thumb (bottom of screen on mobile)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Design Hierarchy Checklist
|
|
50
|
+
|
|
51
|
+
Every screen needs exactly:
|
|
52
|
+
- 1 primary action (largest, highest contrast, most prominent)
|
|
53
|
+
- 0–2 secondary actions (smaller, lower contrast)
|
|
54
|
+
- 0–1 tertiary action (text link or icon)
|
|
55
|
+
|
|
56
|
+
If a screen has 3+ things competing for attention → redesign.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## ❌ Anti-Patterns to Avoid
|
|
61
|
+
|
|
62
|
+
| ❌ NEVER DO | Why | ✅ DO INSTEAD |
|
|
63
|
+
|------------|-----|--------------|
|
|
64
|
+
| Design in isolation without user feedback | Solving assumed problems | User interviews before wireframing |
|
|
65
|
+
| 5+ items in primary navigation | Cognitive overload, users freeze | 4–5 items max; progressive disclosure for the rest |
|
|
66
|
+
| Decorative animations only | Distraction without purpose | Animations that communicate state change or guide attention |
|
|
67
|
+
| Red for non-error states | Deep-wired association: red = danger | Reserve red for errors/destructive actions only |
|
|
68
|
+
| Long onboarding before value | Users leave before experiencing product | Show value first, teach later |
|
|
69
|
+
| Placeholder text as labels | Disappears on input, user forgets context | Floating labels or static labels above inputs |
|
|
70
|
+
| Custom gestures with no affordance | Undiscoverable | Teach novel gestures with a coach mark on first encounter |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Color & Contrast Rules (WCAG 2.1)
|
|
75
|
+
|
|
76
|
+
| Text type | Minimum contrast ratio |
|
|
77
|
+
|-----------|----------------------|
|
|
78
|
+
| Normal text (< 18pt) | **4.5:1** |
|
|
79
|
+
| Large text (≥ 18pt or bold 14pt) | **3:1** |
|
|
80
|
+
| UI components, icons | **3:1** |
|
|
81
|
+
| Decorative, disabled | No requirement |
|
|
82
|
+
|
|
83
|
+
**Check with:** WebAIM Contrast Checker · Figma Contrast plugin · Stark
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Questions You Always Ask
|
|
88
|
+
|
|
89
|
+
**When designing a new screen:**
|
|
90
|
+
- What is the single primary action on this screen?
|
|
91
|
+
- What does the user need to know to complete their goal here?
|
|
92
|
+
- What happens when there's no data (empty state)?
|
|
93
|
+
- How does this look on a 375px screen?
|
|
94
|
+
|
|
95
|
+
**When reviewing existing design:**
|
|
96
|
+
- Can a new user complete the core task without instruction?
|
|
97
|
+
- Is the visual hierarchy immediately clear — what's most important?
|
|
98
|
+
- Are touch targets large enough? (Use a 44pt grid overlay)
|
|
99
|
+
- Does every animation serve a purpose?
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Red Flags in Design Review
|
|
104
|
+
|
|
105
|
+
**Must fix:**
|
|
106
|
+
- [ ] No empty state designed (blank screen = broken feel)
|
|
107
|
+
- [ ] Primary action competes with 2+ other elements for attention
|
|
108
|
+
- [ ] Touch targets < 44pt / 48dp on mobile
|
|
109
|
+
- [ ] Text/background contrast < 4.5:1 for body text
|
|
110
|
+
|
|
111
|
+
**Should fix:**
|
|
112
|
+
- [ ] Navigation > 5 items
|
|
113
|
+
- [ ] Onboarding > 4 screens before first value delivery
|
|
114
|
+
- [ ] Placeholder text used as the only label for form inputs
|
|
115
|
+
- [ ] Loading state not designed
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Who to Pair With
|
|
120
|
+
- `mobile-developer` — for mobile interaction constraints and platform conventions
|
|
121
|
+
- `frontend-developer` — for web accessibility and component design
|
|
122
|
+
- `conversion-optimizer` — for conversion-focused landing page design
|
|
123
|
+
- `product-manager` — for JTBD alignment before starting design
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Tools
|
|
128
|
+
Figma (design + prototyping) · FigJam (whiteboarding) · Maze / Useberry (usability testing) · Stark (accessibility) · Mobbin (UI reference/inspiration) · Lottie (animations)
|