# PDA-Friendly Design Principles Mosaic Stack is designed to be calm, supportive, and stress-free. These principles are **non-negotiable**. ## Core Philosophy > "A personal assistant should reduce stress, not create it." We design for **pathological demand avoidance (PDA)** patterns, creating interfaces that: - Never pressure or demand - Provide gentle suggestions instead of commands - Use calm, neutral language - Avoid aggressive visual design ## Language Guidelines ### Never Use Demanding Language | ❌ NEVER | ✅ ALWAYS | |----------|-----------| | OVERDUE | Target passed | | URGENT | Approaching target | | MUST DO | Scheduled for | | CRITICAL | High priority | | YOU NEED TO | Consider / Option to | | REQUIRED | Recommended | | DUE | Target date | | DEADLINE | Scheduled completion | ### Examples **❌ Bad:** ``` URGENT: You have 3 overdue tasks! You MUST complete these today! ``` **✅ Good:** ``` 3 tasks have passed their target dates Would you like to reschedule or review them? ``` **❌ Bad:** ``` CRITICAL ERROR: Database connection failed IMMEDIATE ACTION REQUIRED ``` **✅ Good:** ``` Unable to connect to database Check configuration or contact support ``` ## Visual Design Principles ### 1. 10-Second Scannability Users should understand key information in 10 seconds or less. **Implementation:** - Most important info at top - Clear visual hierarchy - Minimal text per screen - Progressive disclosure (details on click) **Example Dashboard:** ``` ┌─────────────────────────────────┐ │ Today │ │ ───── │ │ 🟢 Morning review — 9:00 AM │ │ 🔵 Team sync — 2:00 PM │ │ │ │ This Week │ │ ───────── │ │ 🔵 Project planning (3 days) │ │ ⏸️ Research phase (on hold) │ └─────────────────────────────────┘ ``` ### 2. Visual Chunking Group related information with clear boundaries. **Use:** - Whitespace between sections - Subtle borders or backgrounds - Clear section headers - Consistent spacing **Don't:** - Jam everything together - Use wall-of-text layouts - Mix unrelated information - Create visual noise ### 3. Single-Line Items Each list item should fit on one line for scanning. **❌ Bad:** ``` Task: Complete the quarterly report including all financial data, team metrics, and project summaries. This is due next Friday and requires review from management before submission. ``` **✅ Good:** ``` Complete quarterly report — Target: Friday ``` *(Details available on click)* ### 4. Calm Colors No aggressive colors for status indicators. **Status Colors:** - 🟢 **On track / Active** — Soft green (#10b981) - 🔵 **Upcoming / Scheduled** — Soft blue (#3b82f6) - ⏸️ **Paused / On hold** — Soft yellow (#f59e0b) - 💤 **Dormant / Inactive** — Soft gray (#6b7280) - ⚪ **Not started** — Light gray (#d1d5db) **Never use:** - ❌ Aggressive red for "overdue" - ❌ Flashing or blinking elements - ❌ All-caps text for emphasis ### 5. Progressive Disclosure Show summary first, details on demand. **Example:** ``` [Card View - Default] ───────────────────────── Project Alpha 12 tasks · 3 approaching targets 🟢 Active ───────────────────────── [Click to expand] [Expanded View - On Click] ───────────────────────── Project Alpha Description: ... Created: Jan 15, 2026 Owner: Jane Doe Tasks (12): - Setup environment ✓ - Design mockups ✓ - Implement API (target passed 2 days) [Show all tasks] ───────────────────────── ``` ## Implementation Guidelines ### Date Display **Relative dates for recent items:** ``` Just now 5 minutes ago 2 hours ago Yesterday at 3:00 PM Monday at 10:00 AM Jan 15 at 9:00 AM ``` **Never:** ``` 2026-01-28T14:30:00.000Z ❌ (ISO format in UI) ``` ### Task Status Indicators ```typescript // Don't say "overdue" const getTaskStatus = (task: Task) => { if (isPastTarget(task)) { return { label: 'Target passed', icon: '⏸️', color: 'yellow', }; } // ... }; ``` ### Notifications **❌ Aggressive:** ``` ⚠️ ATTENTION: 5 OVERDUE TASKS You must complete these immediately! ``` **✅ Calm:** ``` 💭 5 tasks have passed their targets Would you like to review or reschedule? ``` ### Empty States **❌ Negative:** ``` No tasks found! You haven't created any tasks yet. ``` **✅ Positive:** ``` All caught up! 🎉 Ready to add your first task? ``` ## UI Component Examples ### Task Card ```jsx Review project proposal Active Target: Tomorrow at 2 PM ``` ### Notification Toast ```jsx 💭 Approaching target "Team sync" is scheduled in 30 minutes ``` ## Testing for PDA-Friendliness ### Checklist - [ ] No words like "overdue", "urgent", "must", "required" - [ ] Status indicators use calm colors (no aggressive red) - [ ] All-caps text removed (except acronyms) - [ ] Key info visible within 10 seconds - [ ] List items fit on single line - [ ] Details hidden behind "show more" or click - [ ] Notifications are gentle suggestions, not demands - [ ] Empty states are positive, not negative ### Review Process Every UI change must be reviewed for PDA-friendliness: 1. **Self-review** using checklist 2. **Peer review** for language and tone 3. **User testing** with PDA individuals (if possible) ## Copy Guidelines ### Microcopy **Buttons:** - "View details" not "Click here" - "Reschedule" not "Change deadline" - "Complete" not "Mark as done" **Headers:** - "Approaching targets" not "Overdue items" - "High priority" not "Critical tasks" - "On hold" not "Blocked" **Instructions:** - "Consider adding a note" not "You must add a note" - "Optional: Set a reminder" not "Set a reminder" ### Error Messages **❌ Blaming:** ``` Error: You entered an invalid email address ``` **✅ Helpful:** ``` Email format not recognized Try: user@example.com ``` ## Accessibility PDA-friendly design overlaps with accessibility: - High contrast (but not aggressive colors) - Clear focus indicators - Descriptive labels - Keyboard navigation - Screen reader friendly See [WCAG 2.1 Level AA](https://www.w3.org/WAI/WCAG21/quickref/) for complete accessibility guidelines. ## Resources - Original inspiration: `jarvis-brain/docs/DESIGN-PRINCIPLES.md` - Color palette: [Tailwind CSS Colors](https://tailwindcss.com/docs/customizing-colors) - Icon set: Unicode emojis (universal support) ## Examples from Codebase ### Good Example: Task List ```tsx // apps/web/components/TaskList.tsx

Today

{tasks.map(task => (
{task.title}
{task.targetDate && isPastTarget(task) && ( Target passed {formatRelative(task.targetDate)} )}
))}
``` ## Enforcement - **Code reviews** check for PDA violations - **Linting rules** catch forbidden words - **Design review** before major UI changes - **User feedback** incorporated regularly **This is non-negotiable.** If in doubt, make it calmer.