@ericrisco/rsc 3.3.0 → 3.4.0
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/README.md +6 -3
- package/manifest.json +43 -22
- package/package.json +1 -1
- package/scripts/lib/default-skill-floor.js +5 -1
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/retired-skills.js +4 -0
- package/skills/design/SKILL.md +4 -3
- package/skills/design/evals/cases.yaml +2 -2
- package/skills/react/SKILL.md +2 -1
- package/skills/suggest/SKILL.md +12 -8
- package/skills/suggest/evals/cases.yaml +6 -0
- package/skills/ux/SKILL.md +149 -0
- package/skills/ux/THIRD_PARTY.md +32 -0
- package/skills/ux/evals/cases.yaml +40 -0
- package/skills/ux/references/flows.md +124 -0
- package/skills/ux/upstream/UPSTREAM.json +59 -0
- package/skills/ux/upstream/ux-designer/GUIDE.md +180 -0
- package/skills/ux/upstream/ux-designer/LICENSE +21 -0
- package/skills/ux/upstream/ux-designer/references/01-core-principles.md +251 -0
- package/skills/ux/upstream/ux-designer/references/02-laws-of-ux.md +330 -0
- package/skills/ux/upstream/ux-designer/references/03-accessibility.md +411 -0
- package/skills/ux/upstream/ux-designer/references/04-visual-design.md +433 -0
- package/skills/ux/upstream/ux-designer/references/05-information-architecture.md +432 -0
- package/skills/ux/upstream/ux-designer/references/06-interaction-design.md +495 -0
- package/skills/ux/upstream/ux-designer/references/07-forms-and-inputs.md +491 -0
- package/skills/ux/upstream/ux-designer/references/08-mobile-ux.md +539 -0
- package/skills/ux/upstream/ux-designer/references/09-ux-writing.md +493 -0
- package/skills/ux/upstream/ux-designer/references/10-user-research.md +533 -0
- package/skills/ux/upstream/ux-designer/references/11-design-systems.md +618 -0
- package/skills/ux/upstream/ux-designer/references/12a-presence-awareness.md +395 -0
- package/skills/ux/upstream/ux-designer/references/12b-conflict-resolution-sync.md +420 -0
- package/skills/ux/upstream/ux-designer/references/13a-canvas-navigation.md +388 -0
- package/skills/ux/upstream/ux-designer/references/13b-canvas-objects-performance.md +559 -0
- package/skills/ux/upstream/ux-designer/references/14-ai-ux-patterns.md +511 -0
- package/skills/ux/upstream/ux-designer/references/15-ethical-design.md +419 -0
- package/skills/ux/upstream/ux-designer/references/16-onboarding.md +430 -0
- package/skills/ux/upstream/ux-designer/references/17-notifications.md +461 -0
- package/skills/ux/upstream/ux-designer/references/18-data-visualization.md +453 -0
- package/skills/ux/upstream/ux-designer/references/19-search-ux.md +479 -0
- package/skills/ux/upstream/ux-designer/references/20-emotional-design.md +382 -0
- package/skills/ux/upstream/ux-designer/references/21-data-tables.md +629 -0
- package/skills/ux/upstream/ux-designer/references/22-performance-ux.md +626 -0
- package/skills/ux/upstream/ux-designer/references/23-internationalization.md +347 -0
- package/skills/ux/upstream/ux-designer/references/24-voice-and-multimodal.md +308 -0
- package/skills/ux/upstream/ux-designer/references/25a-barcode-camera-scanning.md +342 -0
- package/skills/ux/upstream/ux-designer/references/25b-barcode-scanner-workflows.md +412 -0
- package/skills/ux/upstream/ux-designer/references/25c-barcode-display.md +277 -0
- package/skills/ux/upstream/ux-usability-foundations/GUIDE.md +285 -0
- package/skills/ux/upstream/ux-usability-foundations/LICENSE +21 -0
- package/skills/ux/upstream/ux-usability-foundations/references/anti-patterns.md +267 -0
- package/skills/ux/upstream/ux-usability-foundations/references/checklists.md +130 -0
- package/skills/ux/upstream/ux-usability-foundations/references/decision-prompts.md +340 -0
- package/skills/ux/upstream/ux-usability-foundations/references/principle-cards.md +449 -0
- package/targets/clone-bootstrap.mjs +1 -1
- package/skills/ui-engineering/SKILL.md +0 -113
- package/skills/ui-engineering/evals/cases.yaml +0 -38
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
# Ethical Design & Dark Patterns
|
|
2
|
+
|
|
3
|
+
Deceptive design patterns face increasing regulatory enforcement with real financial penalties. This reference provides a taxonomy of dark patterns, the regulatory landscape, and practical guidance for ethical design.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- Dark Pattern Taxonomy
|
|
10
|
+
- Regulatory Landscape
|
|
11
|
+
- Consent Design
|
|
12
|
+
- Cookie / Privacy UX
|
|
13
|
+
- Subscription & Cancellation
|
|
14
|
+
- Pricing Transparency
|
|
15
|
+
- Children & Vulnerable Users
|
|
16
|
+
- Ethical Design Checklist
|
|
17
|
+
- Key Metrics
|
|
18
|
+
- Sources
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Dark Pattern Taxonomy
|
|
23
|
+
|
|
24
|
+
### 1. Roach Motel
|
|
25
|
+
Easy to get into, hard to get out of.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
❌ Sign up: 1 click → Cancel: call a phone number during business hours
|
|
29
|
+
✅ Sign up: 1 click → Cancel: 1 click in the same place
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- Subscription cancellation buried in settings or requiring phone calls
|
|
33
|
+
- Account deletion requiring email to support team
|
|
34
|
+
- Free trial that auto-converts with no easy cancellation
|
|
35
|
+
|
|
36
|
+
### 2. Confirmshaming
|
|
37
|
+
Using guilt-laden language to manipulate decisions.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
❌ "No thanks, I don't want to save money"
|
|
41
|
+
❌ "I'll pass on protecting my family"
|
|
42
|
+
✅ "No thanks" / "Not now" / "Skip"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- Opt-out buttons using shame language
|
|
46
|
+
- Modal dismissals that imply user is making a bad choice
|
|
47
|
+
- Emotional manipulation in decline copy
|
|
48
|
+
|
|
49
|
+
### 3. Misdirection
|
|
50
|
+
Drawing attention away from important information.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
❌ Large "Accept All" button, tiny "Manage preferences" link
|
|
54
|
+
✅ Equal-sized "Accept" and "Reject" buttons side by side
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- Visual emphasis on the choice that benefits the company
|
|
58
|
+
- Using color, size, and position to guide toward preferred option
|
|
59
|
+
- Burying important notices in walls of text
|
|
60
|
+
|
|
61
|
+
### 4. Forced Continuity
|
|
62
|
+
Silently charging after a free trial without adequate notice.
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
❌ Free trial ends → auto-charge with no warning
|
|
66
|
+
✅ Free trial ends → email 7 days before → email 1 day before → charge
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- No reminder before trial-to-paid conversion
|
|
70
|
+
- Making it hard to find the charge after conversion
|
|
71
|
+
- Requiring payment info for "free" trials without clear disclosure
|
|
72
|
+
|
|
73
|
+
### 5. Hidden Costs
|
|
74
|
+
Revealing unexpected charges late in the checkout process.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
❌ $29.99 product → checkout reveals $8.99 shipping + $4.99 "service fee"
|
|
78
|
+
✅ Show total cost including all fees from the product page
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- Drip pricing (adding fees throughout checkout)
|
|
82
|
+
- Service fees, processing fees, convenience fees added at the end
|
|
83
|
+
- Mandatory add-ons pre-selected in checkout
|
|
84
|
+
|
|
85
|
+
### 6. Trick Questions
|
|
86
|
+
Confusing wording that causes users to make unintended choices.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
❌ "Uncheck this box if you prefer not to not receive emails"
|
|
90
|
+
✅ "Check this box to receive marketing emails" (unchecked by default)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- Double negatives in opt-out language
|
|
94
|
+
- Confusing toggle labels (is "on" opting in or out?)
|
|
95
|
+
- Swapping the expected position of yes/no buttons
|
|
96
|
+
|
|
97
|
+
### 7. Bait & Switch
|
|
98
|
+
Promising one thing and delivering another.
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
❌ "Free download" → requires paid subscription to access
|
|
102
|
+
✅ Clear pricing and feature comparison before any action
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
- Advertising features only available in premium tiers
|
|
106
|
+
- Changing terms after user commitment
|
|
107
|
+
- "Free" products that require payment for core functionality
|
|
108
|
+
|
|
109
|
+
### 8. Disguised Ads
|
|
110
|
+
Ads designed to look like content or navigation elements.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
❌ "Download" buttons that are actually ads
|
|
114
|
+
✅ Clearly labeled "Advertisement" or "Sponsored" with visual distinction
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- Native ads without clear sponsorship labels
|
|
118
|
+
- Fake download buttons or system alerts
|
|
119
|
+
- Content recommendation widgets that mix ads with real content
|
|
120
|
+
|
|
121
|
+
### 9. Friend Spam
|
|
122
|
+
Using access to contacts for unauthorized messaging.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
❌ "Find friends" → sends invites to entire address book without review
|
|
126
|
+
✅ "Find friends" → shows contact list for user to select individually
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- Auto-importing and messaging contacts
|
|
130
|
+
- "Invite friends" defaulting to select-all
|
|
131
|
+
- Social sharing without clear preview of what will be posted
|
|
132
|
+
|
|
133
|
+
### 10. Privacy Zuckering
|
|
134
|
+
Making privacy settings confusing to encourage maximum data sharing.
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
❌ 47 pages of privacy settings across 8 different menus
|
|
138
|
+
✅ Single privacy dashboard with clear toggles and plain-language explanations
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
- Default to maximum data sharing
|
|
142
|
+
- Privacy controls scattered across multiple screens
|
|
143
|
+
- Confusing privacy policy language
|
|
144
|
+
|
|
145
|
+
### 11. Sneak into Basket
|
|
146
|
+
Adding extra items to the shopping cart without user consent.
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
❌ Pre-selected insurance, warranties, or add-ons in checkout
|
|
150
|
+
✅ All add-ons presented as opt-in with clear pricing
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- Pre-checked donation or insurance boxes
|
|
154
|
+
- Default-selected premium shipping
|
|
155
|
+
- Mandatory bundles disguised as individual products
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Regulatory Landscape
|
|
160
|
+
|
|
161
|
+
### FTC (United States)
|
|
162
|
+
- **Click-to-Cancel Rule (2024)**: Must be as easy to cancel as to subscribe
|
|
163
|
+
- **Amazon settlement ($25M, 2023)**: Deceptive Prime enrollment/cancellation
|
|
164
|
+
- **Fortnite/Epic ($245M, 2022)**: Dark patterns in children's purchases
|
|
165
|
+
- Enforcement focus: subscriptions, negative option marketing, COPPA violations
|
|
166
|
+
|
|
167
|
+
### EU Digital Services Act (DSA)
|
|
168
|
+
- Prohibits dark patterns on online platforms
|
|
169
|
+
- Bans: deceptive UI, manipulated choices, repeated nagging, obstruction of cancellation
|
|
170
|
+
- Applies to: all online intermediaries, with stricter rules for very large platforms
|
|
171
|
+
- Effective: February 2024
|
|
172
|
+
|
|
173
|
+
### EU Digital Fairness Act (Upcoming)
|
|
174
|
+
- Extends dark pattern protections to all digital services
|
|
175
|
+
- Covers addictive design, virtual currencies, influencer marketing
|
|
176
|
+
- Expected proposal: 2025-2026
|
|
177
|
+
|
|
178
|
+
### GDPR (EU)
|
|
179
|
+
- Consent must be freely given, specific, informed, and unambiguous
|
|
180
|
+
- Pre-checked consent boxes are invalid
|
|
181
|
+
- Withdrawing consent must be as easy as giving it
|
|
182
|
+
- Maximum penalty: 4% of annual global turnover or €20M
|
|
183
|
+
|
|
184
|
+
### California CPRA
|
|
185
|
+
- Extends CCPA with additional consent requirements
|
|
186
|
+
- "Do Not Sell or Share My Personal Information" link required
|
|
187
|
+
- Equal prominence for opt-out as opt-in
|
|
188
|
+
- Dark pattern consent is not valid consent
|
|
189
|
+
|
|
190
|
+
### COPPA (US Children's Privacy)
|
|
191
|
+
- Verifiable parental consent for under-13 data collection
|
|
192
|
+
- No behavioral advertising to children
|
|
193
|
+
- FTC actively enforcing against manipulative design targeting minors
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Consent Design
|
|
198
|
+
|
|
199
|
+
### Button Parity
|
|
200
|
+
|
|
201
|
+
```css
|
|
202
|
+
/* ❌ Dark pattern: asymmetric buttons */
|
|
203
|
+
.accept-btn {
|
|
204
|
+
background: #0066cc;
|
|
205
|
+
color: white;
|
|
206
|
+
font-size: 16px;
|
|
207
|
+
padding: 12px 24px;
|
|
208
|
+
}
|
|
209
|
+
.reject-link {
|
|
210
|
+
color: #999;
|
|
211
|
+
font-size: 12px;
|
|
212
|
+
text-decoration: underline;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* ✅ Ethical: equal prominence */
|
|
216
|
+
.consent-btn {
|
|
217
|
+
font-size: 16px;
|
|
218
|
+
padding: 12px 24px;
|
|
219
|
+
border-radius: 6px;
|
|
220
|
+
}
|
|
221
|
+
.consent-btn.accept {
|
|
222
|
+
background: #0066cc;
|
|
223
|
+
color: white;
|
|
224
|
+
}
|
|
225
|
+
.consent-btn.reject {
|
|
226
|
+
background: white;
|
|
227
|
+
color: #0066cc;
|
|
228
|
+
border: 2px solid #0066cc;
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Consent Best Practices
|
|
233
|
+
|
|
234
|
+
- Accept and reject buttons must have **equal visual weight**
|
|
235
|
+
- No pre-checked boxes for optional data processing
|
|
236
|
+
- Clear, plain-language explanation of what users are consenting to
|
|
237
|
+
- Granular control: let users accept some and reject others
|
|
238
|
+
- Withdrawing consent must be as easy as giving it (same number of clicks)
|
|
239
|
+
- No "consent walls" that block access unless all is accepted (unless strictly necessary)
|
|
240
|
+
- Record consent with timestamp and version for compliance
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Cookie / Privacy UX
|
|
245
|
+
|
|
246
|
+
### Banner Design
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
┌─────────────────────────────────────────────────────┐
|
|
250
|
+
│ We use cookies to improve your experience. │
|
|
251
|
+
│ [Learn more] │
|
|
252
|
+
│ │
|
|
253
|
+
│ [Accept All] [Reject All] [Manage Preferences] │
|
|
254
|
+
└─────────────────────────────────────────────────────┘
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Requirements:**
|
|
258
|
+
- Show on first visit only (persist choice)
|
|
259
|
+
- No page interaction tracking before consent
|
|
260
|
+
- "Reject All" must be as prominent as "Accept All"
|
|
261
|
+
- Brief, clear description of cookie purposes
|
|
262
|
+
- Link to full privacy policy
|
|
263
|
+
|
|
264
|
+
### Preference Center
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
┌─ Cookie Preferences ────────────────────┐
|
|
268
|
+
│ │
|
|
269
|
+
│ Necessary [Always on] │
|
|
270
|
+
│ Authentication, security, basic │
|
|
271
|
+
│ functionality │
|
|
272
|
+
│ │
|
|
273
|
+
│ Analytics [○ Off] │
|
|
274
|
+
│ Anonymous usage statistics │
|
|
275
|
+
│ │
|
|
276
|
+
│ Marketing [○ Off] │
|
|
277
|
+
│ Personalized ads and content │
|
|
278
|
+
│ │
|
|
279
|
+
│ Social Media [○ Off] │
|
|
280
|
+
│ Social sharing and embeds │
|
|
281
|
+
│ │
|
|
282
|
+
│ [Save Preferences] [Reject All] │
|
|
283
|
+
└──────────────────────────────────────────┘
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
- Default all optional categories to OFF
|
|
287
|
+
- Clear descriptions for each category
|
|
288
|
+
- Easy toggle interface
|
|
289
|
+
- "Reject All" shortcut available
|
|
290
|
+
- Accessible from footer link at all times (not just the banner)
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Subscription & Cancellation
|
|
295
|
+
|
|
296
|
+
### FTC Click-to-Cancel Rule
|
|
297
|
+
|
|
298
|
+
The cancellation process must be as simple as the sign-up process.
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
Sign-up: Product page → Click "Subscribe" → Enter payment → Done (3 steps)
|
|
302
|
+
Cancellation: Settings → Click "Cancel" → Confirm → Done (3 steps max)
|
|
303
|
+
|
|
304
|
+
❌ Cancel: Settings → Account → Billing → "Contact support" → Phone wait →
|
|
305
|
+
Agent pitch → Second pitch → "Are you sure?" → "Last chance offer" → Cancel
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Ethical Subscription Patterns
|
|
309
|
+
|
|
310
|
+
- Cancel button in the same location as the subscribe button
|
|
311
|
+
- No retention dark patterns (forced phone calls, multi-step cancellation)
|
|
312
|
+
- Show clear summary of what will happen on cancellation (access end date, data retention)
|
|
313
|
+
- Offer pause/downgrade as alternatives, not barriers
|
|
314
|
+
- Send cancellation confirmation immediately
|
|
315
|
+
- Allow easy resubscription if the user changes their mind
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Pricing Transparency
|
|
320
|
+
|
|
321
|
+
### Drip Pricing Avoidance
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
❌ Drip pricing:
|
|
325
|
+
Product: $99 → Cart: $99 + $15 shipping → Checkout: $99 + $15 + $5.99 service fee
|
|
326
|
+
|
|
327
|
+
✅ Transparent pricing:
|
|
328
|
+
Product: $119.99 (includes shipping & all fees)
|
|
329
|
+
— or —
|
|
330
|
+
Product: $99 + Shipping: $15 + Fees: $5.99 = Total: $119.99 (shown from start)
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
- Show total price including all mandatory fees as early as possible
|
|
334
|
+
- Break down fees clearly if itemized
|
|
335
|
+
- No surprise charges at checkout
|
|
336
|
+
- Currency and tax handling clear for international users
|
|
337
|
+
- Comparison pricing (strikethrough) must reference genuine previous prices
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Children & Vulnerable Users
|
|
342
|
+
|
|
343
|
+
### Age-Appropriate Design (AADC / ICO Code)
|
|
344
|
+
|
|
345
|
+
- Age verification at entry points (not just a "I am over 13" checkbox)
|
|
346
|
+
- Default to maximum privacy for minors
|
|
347
|
+
- No nudge techniques to encourage more data sharing
|
|
348
|
+
- No reward loops or variable reward schedules (addictive patterns)
|
|
349
|
+
- Parental controls accessible but not bypassable by children
|
|
350
|
+
- No profiling of children for personalization or advertising
|
|
351
|
+
|
|
352
|
+
### Addictive Pattern Avoidance
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
❌ Addictive patterns:
|
|
356
|
+
- Infinite scroll with no natural stopping point
|
|
357
|
+
- Pull-to-refresh with variable rewards
|
|
358
|
+
- Streak counters that penalize breaks
|
|
359
|
+
- Autoplay with no natural stopping point
|
|
360
|
+
- Social approval metrics (like counts) as primary feedback
|
|
361
|
+
|
|
362
|
+
✅ Ethical alternatives:
|
|
363
|
+
- "You're all caught up" markers
|
|
364
|
+
- Daily digest summaries
|
|
365
|
+
- "Time spent" dashboards
|
|
366
|
+
- Intentional session boundaries
|
|
367
|
+
- Content-focused rather than metric-focused design
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Ethical Design Checklist
|
|
373
|
+
|
|
374
|
+
### Pre-Launch Review
|
|
375
|
+
|
|
376
|
+
- [ ] **Symmetry**: Is it equally easy to opt out as to opt in?
|
|
377
|
+
- [ ] **Clarity**: Would a non-technical person understand what they're agreeing to?
|
|
378
|
+
- [ ] **Button parity**: Are accept/reject options equally prominent?
|
|
379
|
+
- [ ] **No pre-selection**: Are optional choices defaulted to off/unchecked?
|
|
380
|
+
- [ ] **No confirmshaming**: Is decline language neutral and respectful?
|
|
381
|
+
- [ ] **Pricing transparency**: Are all fees visible before the final step?
|
|
382
|
+
- [ ] **Cancellation ease**: Can users cancel in the same number of steps as subscribing?
|
|
383
|
+
- [ ] **Privacy defaults**: Are privacy settings defaulted to the most protective option?
|
|
384
|
+
- [ ] **Consent validity**: Is consent freely given, specific, informed, and unambiguous?
|
|
385
|
+
- [ ] **Children's safety**: Are there protections for underage users?
|
|
386
|
+
- [ ] **No misdirection**: Is the visual hierarchy honest about what options do?
|
|
387
|
+
- [ ] **Audit trail**: Are consent records stored with timestamps and versions?
|
|
388
|
+
|
|
389
|
+
### Ongoing Monitoring
|
|
390
|
+
|
|
391
|
+
- Track unsubscribe/cancellation completion rates (should be near 100%)
|
|
392
|
+
- Monitor complaint rates related to billing or consent
|
|
393
|
+
- Review A/B tests for dark pattern creep (optimization that exploits users)
|
|
394
|
+
- Regular accessibility audit of consent interfaces
|
|
395
|
+
- Legal review of consent flows against current regulations
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Key Metrics
|
|
400
|
+
|
|
401
|
+
| Metric | Target | Context |
|
|
402
|
+
|--------|--------|---------|
|
|
403
|
+
| Consent rejection rate | Monitor (not minimize) | High rejection is honest UX |
|
|
404
|
+
| Cancel completion rate | > 95% | Easy cancellation |
|
|
405
|
+
| Complaint rate | < 0.1% | Billing/consent complaints |
|
|
406
|
+
| Cookie preference usage | Track | Users exercising choice |
|
|
407
|
+
| Time to cancel | ≤ sign-up time | Click-to-cancel compliance |
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Sources
|
|
412
|
+
|
|
413
|
+
- [FTC Dark Patterns Report (2022)](https://www.ftc.gov/reports/bringing-dark-patterns-light) — Regulatory guidance
|
|
414
|
+
- [Deceptive Design](https://www.deceptive.design/) — Harry Brignull's dark pattern catalog
|
|
415
|
+
- [EU Digital Services Act](https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package) — Platform regulation
|
|
416
|
+
- [GDPR consent guidelines](https://edpb.europa.eu/our-work-tools/documents/public-consultations/2020/guidelines-052020-consent-under-regulation_en) — EDPB guidance
|
|
417
|
+
- [ICO Age Appropriate Design Code](https://ico.org.uk/for-organisations/childrens-code-hub/) — Children's privacy
|
|
418
|
+
- [Nielsen Norman Group: Dark Patterns](https://www.nngroup.com/articles/dark-patterns/) — UX research
|
|
419
|
+
- [CPRA regulations](https://cppa.ca.gov/) — California privacy enforcement
|