generate_ux_flow
Create detailed UX flows including user journeys, interaction patterns, state management, and accessibility requirements for websites, apps, and digital interfaces.
Instructions
Create detailed user experience flows including user journeys, interaction patterns, state management, error handling, and accessibility requirements.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| interfaceType | Yes | Type of interface | |
| primaryGoal | Yes | Main user goal | |
| secondaryGoals | No | Additional user goals | |
| userPersonas | No | Target user types | |
| customFlows | No | Custom user flows to include |
Implementation Reference
- src/tools/ux-flow.ts:130-313 (handler)The main handler function that generates the UX flow specification based on input parameters, using templates, user journeys, patterns, and accessibility guidelines.export function generateUXFlow(input: UXFlowInput): string { const { interfaceType, primaryGoal, secondaryGoals, userPersonas, customFlows } = input; const template = INTERFACE_TEMPLATES[interfaceType]; const userJourney = generateUserJourney(interfaceType, primaryGoal); const patternRecommendations = generateUXPatternRecommendations(interfaceType); return `# UX Flow Specification ## Overview **Interface Type**: ${interfaceType.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase())} **Primary Goal**: ${primaryGoal} ${secondaryGoals ? `**Secondary Goals**: ${secondaryGoals.join(', ')}` : ''} ${userPersonas ? `**Target Users**: ${userPersonas.join(', ')}` : `**Target Users**: ${template.uxPriorities.join(', ')}`} --- ## User Journey Map ${userJourney.map(step => ` ### Step ${step.step}: ${step.screen} **User Action**: ${step.userAction} **System Response**: ${step.systemResponse} **Micro-Interactions**: ${step.microInteractions.map(m => `- ${m}`).join('\n')} ${step.errorHandling ? `**Error Handling**: ${step.errorHandling}` : ''} `).join('\n---\n')} --- ## UX Pattern Recommendations ${patternRecommendations} --- ## Interaction Design Principles ### Response Time Guidelines | Action Type | Expected Response | User Feedback | |-------------|-------------------|---------------| | Button click | Immediate (<100ms) | Visual press state | | Form submit | <1 second | Loading indicator | | Page load | <2 seconds | Skeleton loader | | Background task | Variable | Progress indicator | ### Feedback Loop Requirements 1. **Immediate**: Visual change on interaction (hover, press) 2. **Short-term**: Confirmation of action (toast, animation) 3. **Long-term**: Status of outcome (success page, notification) --- ## State Management ### Screen States to Design For each screen, design these states: 1. **Empty State** - First-time user guidance - Clear CTA to populate - Friendly illustration 2. **Loading State** - Skeleton that matches content structure - Meaningful progress indication - Avoid layout shift when content loads 3. **Error State** - Clear problem explanation - Actionable recovery steps - Maintain user's context/data 4. **Success State** - Celebration appropriate to action importance - Clear next steps - Easy navigation to continue 5. **Partial State** - Graceful degradation - Clear indication of limitations - Offline-capable where possible --- ## Error Handling UX ### Prevention ${Object.entries(ERROR_HANDLING_UX.preventive).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} ### Communication ${Object.entries(ERROR_HANDLING_UX.informative).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} ### Recovery ${Object.entries(ERROR_HANDLING_UX.recovery).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} --- ## Accessibility Requirements ### Focus Management ${Object.entries(ACCESSIBILITY_PATTERNS.focusManagement).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} ### Screen Reader Support ${Object.entries(ACCESSIBILITY_PATTERNS.screenReaders).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} ### Color & Contrast ${Object.entries(ACCESSIBILITY_PATTERNS.colorAndContrast).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} ### Motion Sensitivity ${Object.entries(ACCESSIBILITY_PATTERNS.motion).map(([key, value]) => `- **${key}**: ${value}`).join('\n')} --- ## Mobile UX Considerations ### Touch Targets - Minimum touch target: 44x44px (iOS) / 48x48dp (Android) - Spacing between targets: minimum 8px - Place primary actions in thumb-friendly zones ### Gestures - Swipe: Navigation, dismissal, actions - Long press: Context menus, selection - Pinch: Zoom (images, maps) - Pull down: Refresh content ### Mobile-Specific Patterns - Bottom sheets for additional options - Full-screen modals for focused tasks - Floating action button for primary create action - Snackbars for brief feedback --- ## Performance UX ### Perceived Performance Optimizations 1. **Instant feedback**: Respond to input immediately 2. **Optimistic updates**: Show expected result before confirmation 3. **Progressive loading**: Prioritize above-fold content 4. **Skeleton screens**: Show structure while loading 5. **Preloading**: Anticipate next action, preload resources ### Loading Strategy by Content Type | Content | Strategy | Placeholder | |---------|----------|-------------| | Text | Skeleton lines | Gray bars matching text | | Images | Blur-up/LQIP | Blurred thumbnail | | Lists | Skeleton cards | Repeated card shapes | | Data | Skeleton + spinner | Structure + activity | --- ${customFlows ? `## Custom Flow Requirements ${customFlows.map(flow => `- ${flow}`).join('\n')} ---` : ''} ## UX Quality Metrics ### Key Metrics to Track - **Task completion rate**: % of users completing primary goal - **Time to first action**: How quickly users engage - **Error rate**: Frequency of user errors - **Recovery rate**: % who recover from errors - **Satisfaction**: User-reported satisfaction scores ### Success Criteria - [ ] Users can complete primary goal without help - [ ] Error states provide clear recovery paths - [ ] Loading states prevent user confusion - [ ] Accessibility requirements met (WCAG AA) - [ ] Mobile experience is fully functional --- *This UX flow is designed to create intuitive, delightful user experiences that feel thoughtfully crafted rather than generic.* `; }
- src/server.ts:83-93 (schema)Zod schema for validating the input parameters to the generate_ux_flow tool.const GenerateUXFlowSchema = z.object({ interfaceType: z.enum([ 'website-landing', 'website-saas', 'website-portfolio', 'website-ecommerce', 'dashboard', 'mobile-app', 'desktop-app', 'cli-terminal', 'presentation', 'admin-panel', 'social-platform', 'custom' ]).describe('Type of interface'), primaryGoal: z.string().describe('Main user goal (e.g., "sign up for newsletter")'), secondaryGoals: z.array(z.string()).optional().describe('Additional user goals'), userPersonas: z.array(z.string()).optional().describe('Target user types'), customFlows: z.array(z.string()).optional().describe('Custom user flows to include'), });
- src/server.ts:194-224 (registration)Tool registration in the listTools handler, defining name, description, and inputSchema for the MCP tool.{ name: 'generate_ux_flow', description: 'Create detailed user experience flows including user journeys, interaction patterns, state management, error handling, and accessibility requirements.', inputSchema: { type: 'object', properties: { interfaceType: { type: 'string', enum: ['website-landing', 'website-saas', 'website-portfolio', 'website-ecommerce', 'dashboard', 'mobile-app', 'desktop-app', 'cli-terminal', 'presentation', 'admin-panel', 'social-platform', 'custom'], description: 'Type of interface' }, primaryGoal: { type: 'string', description: 'Main user goal' }, secondaryGoals: { type: 'array', items: { type: 'string' }, description: 'Additional user goals' }, userPersonas: { type: 'array', items: { type: 'string' }, description: 'Target user types' }, customFlows: { type: 'array', items: { type: 'string' }, description: 'Custom user flows to include' } }, required: ['interfaceType', 'primaryGoal'] } },
- src/server.ts:297-307 (registration)Handler case in the callToolRequest that parses args with schema and invokes the generateUXFlow function.case 'generate_ux_flow': { const parsed = GenerateUXFlowSchema.parse(args); const result = generateUXFlow({ interfaceType: parsed.interfaceType as InterfaceType, primaryGoal: parsed.primaryGoal, secondaryGoals: parsed.secondaryGoals, userPersonas: parsed.userPersonas, customFlows: parsed.customFlows, }); return { content: [{ type: 'text', text: result }] }; }
- src/tools/ux-flow.ts:13-100 (helper)Helper function to generate user journey steps based on interface type.function generateUserJourney(interfaceType: InterfaceType, primaryGoal: string): UXFlowStep[] { const journeyTemplates: Record<InterfaceType, UXFlowStep[]> = { 'website-landing': [ { step: 1, screen: 'Hero Section', userAction: 'Lands on page', systemResponse: 'Display value proposition with animated entrance', microInteractions: ['Logo fade in', 'Headline type effect', 'CTA button pulse'] }, { step: 2, screen: 'Hero Section', userAction: 'Scrolls down or clicks CTA', systemResponse: 'Smooth scroll to features or open signup modal', microInteractions: ['Scroll indicator bounce', 'Button press feedback', 'Modal slide up'] }, { step: 3, screen: 'Features Section', userAction: 'Explores features', systemResponse: 'Reveal features with scroll-triggered animations', microInteractions: ['Card hover lift', 'Icon animations', 'Staggered reveals'] }, { step: 4, screen: 'Social Proof', userAction: 'Views testimonials', systemResponse: 'Show rotating testimonials or grid', microInteractions: ['Carousel auto-advance', 'Quote fade transitions'] }, { step: 5, screen: 'Pricing/CTA', userAction: 'Reviews offering', systemResponse: 'Display pricing or final value prop', microInteractions: ['Price toggle animation', 'Feature list reveals'] }, { step: 6, screen: 'Signup Form', userAction: 'Submits email/info', systemResponse: 'Validate and confirm signup', microInteractions: ['Input focus glow', 'Validation checkmarks', 'Success animation'], errorHandling: 'Inline validation with helpful messages' } ], 'website-saas': [ { step: 1, screen: 'Homepage', userAction: 'Arrives from marketing', systemResponse: 'Show product overview and primary CTA', microInteractions: ['Hero animation', 'Navigation highlight'] }, { step: 2, screen: 'Features Page', userAction: 'Explores features', systemResponse: 'Detail each feature with demos', microInteractions: ['Interactive previews', 'Comparison toggles'] }, { step: 3, screen: 'Pricing Page', userAction: 'Compares plans', systemResponse: 'Show tier comparison with toggle', microInteractions: ['Annual/monthly toggle', 'Feature tooltips', 'Recommended badge pulse'] }, { step: 4, screen: 'Signup Flow', userAction: 'Starts trial', systemResponse: 'Streamlined signup process', microInteractions: ['Progress indicator', 'Form validation', 'Loading states'], errorHandling: 'Clear error messages with recovery options' }, { step: 5, screen: 'Onboarding', userAction: 'Sets up account', systemResponse: 'Guided setup wizard', microInteractions: ['Step transitions', 'Completion celebrations', 'Skip options'] }, { step: 6, screen: 'Dashboard', userAction: 'Starts using product', systemResponse: 'Show key actions and help', microInteractions: ['Feature tooltips', 'Empty state guidance'] } ], 'website-portfolio': [ { step: 1, screen: 'Landing', userAction: 'Views portfolio', systemResponse: 'Impactful first impression', microInteractions: ['Name/logo animation', 'Custom cursor activation'] }, { step: 2, screen: 'Work Grid', userAction: 'Browses projects', systemResponse: 'Display project thumbnails', microInteractions: ['Hover reveals', 'Image zoom', 'Project title slides'] }, { step: 3, screen: 'Project Detail', userAction: 'Opens project', systemResponse: 'Smooth transition to detail', microInteractions: ['Page transition', 'Gallery navigation', 'Related projects'] }, { step: 4, screen: 'About Section', userAction: 'Learns about creator', systemResponse: 'Personal story and skills', microInteractions: ['Skill bar animations', 'Timeline reveals'] }, { step: 5, screen: 'Contact', userAction: 'Reaches out', systemResponse: 'Contact form or info', microInteractions: ['Form interactions', 'Social link hovers', 'Success confirmation'] } ], 'website-ecommerce': [ { step: 1, screen: 'Homepage', userAction: 'Browses store', systemResponse: 'Featured products and categories', microInteractions: ['Product card hovers', 'Quick view triggers'] }, { step: 2, screen: 'Category Page', userAction: 'Filters products', systemResponse: 'Dynamic filtering with results', microInteractions: ['Filter animations', 'Sort transitions', 'Load more reveals'] }, { step: 3, screen: 'Product Detail', userAction: 'Views product', systemResponse: 'Full product information', microInteractions: ['Image zoom', 'Variant selection', 'Add to cart feedback'] }, { step: 4, screen: 'Cart', userAction: 'Reviews cart', systemResponse: 'Cart summary and options', microInteractions: ['Quantity adjusters', 'Remove animations', 'Price updates'] }, { step: 5, screen: 'Checkout', userAction: 'Completes purchase', systemResponse: 'Multi-step checkout flow', microInteractions: ['Step progress', 'Address autocomplete', 'Payment processing'], errorHandling: 'Payment error recovery, saved cart' }, { step: 6, screen: 'Confirmation', userAction: 'Order placed', systemResponse: 'Success and next steps', microInteractions: ['Celebration animation', 'Order summary', 'Continue shopping CTA'] } ], 'dashboard': [ { step: 1, screen: 'Login', userAction: 'Authenticates', systemResponse: 'Secure login flow', microInteractions: ['Input validation', 'Loading state', 'Success transition'] }, { step: 2, screen: 'Overview', userAction: 'Views dashboard', systemResponse: 'Key metrics at a glance', microInteractions: ['Number counting', 'Chart animations', 'Refresh indicators'] }, { step: 3, screen: 'Data View', userAction: 'Explores data', systemResponse: 'Interactive charts/tables', microInteractions: ['Chart hover tooltips', 'Table sorting', 'Filter animations'] }, { step: 4, screen: 'Detail View', userAction: 'Drills down', systemResponse: 'Detailed data view', microInteractions: ['Breadcrumb updates', 'Data transitions', 'Export options'] }, { step: 5, screen: 'Actions', userAction: 'Takes action', systemResponse: 'Action confirmation', microInteractions: ['Button feedback', 'Toast notifications', 'Status updates'] } ], 'mobile-app': [ { step: 1, screen: 'Splash', userAction: 'Opens app', systemResponse: 'Brand moment and load', microInteractions: ['Logo animation', 'Progress indicator'] }, { step: 2, screen: 'Onboarding', userAction: 'First launch', systemResponse: 'Feature introduction', microInteractions: ['Swipe navigation', 'Skip option', 'Progress dots'] }, { step: 3, screen: 'Home', userAction: 'Main screen', systemResponse: 'Primary content/actions', microInteractions: ['Pull to refresh', 'Tab switches', 'FAB interactions'] }, { step: 4, screen: 'Feature Screen', userAction: 'Uses feature', systemResponse: 'Feature functionality', microInteractions: ['Gesture feedback', 'Loading states', 'Success animations'] }, { step: 5, screen: 'Settings', userAction: 'Configures app', systemResponse: 'Preferences and options', microInteractions: ['Toggle switches', 'List interactions', 'Save confirmations'] } ], 'desktop-app': [ { step: 1, screen: 'Launch', userAction: 'Opens application', systemResponse: 'Load workspace', microInteractions: ['Splash screen', 'Workspace restore'] }, { step: 2, screen: 'Main Workspace', userAction: 'Primary tasks', systemResponse: 'Working environment', microInteractions: ['Panel resizing', 'Tool selection', 'Context menus'] }, { step: 3, screen: 'File Operations', userAction: 'Opens/saves files', systemResponse: 'File dialogs', microInteractions: ['File browser', 'Progress indicators', 'Recent files'] }, { step: 4, screen: 'Preferences', userAction: 'Customizes app', systemResponse: 'Settings panels', microInteractions: ['Tab navigation', 'Apply/cancel', 'Reset options'] } ], 'cli-terminal': [ { step: 1, screen: 'Init', userAction: 'Runs command', systemResponse: 'Parse and validate', microInteractions: ['Typing echo', 'Validation feedback'] }, { step: 2, screen: 'Processing', userAction: 'Waits for result', systemResponse: 'Progress indication', microInteractions: ['Spinner', 'Progress bar', 'Status updates'] }, { step: 3, screen: 'Output', userAction: 'Views result', systemResponse: 'Formatted output', microInteractions: ['Syntax highlighting', 'Pagination'] }, { step: 4, screen: 'Interactive', userAction: 'Makes choices', systemResponse: 'Prompts for input', microInteractions: ['Arrow selection', 'Confirmation prompts'], errorHandling: 'Clear error messages with suggestions' } ], 'presentation': [ { step: 1, screen: 'Title Slide', userAction: 'Starts presentation', systemResponse: 'Display opening', microInteractions: ['Title animation', 'Author reveal'] }, { step: 2, screen: 'Content Slides', userAction: 'Advances slides', systemResponse: 'Show content', microInteractions: ['Slide transitions', 'Build animations', 'Chart reveals'] }, { step: 3, screen: 'Interactive', userAction: 'Engages audience', systemResponse: 'Interactive elements', microInteractions: ['Poll results', 'Q&A interface'] }, { step: 4, screen: 'Closing', userAction: 'Concludes', systemResponse: 'Final CTA', microInteractions: ['Contact info reveal', 'Thank you animation'] } ], 'admin-panel': [ { step: 1, screen: 'Login', userAction: 'Authenticates', systemResponse: 'Secure access', microInteractions: ['2FA if needed', 'Loading state'], errorHandling: 'Lockout protection, password reset' }, { step: 2, screen: 'Dashboard', userAction: 'Views overview', systemResponse: 'System status', microInteractions: ['Alert indicators', 'Quick actions'] }, { step: 3, screen: 'Content List', userAction: 'Manages content', systemResponse: 'Data table view', microInteractions: ['Sort/filter', 'Bulk selection', 'Quick edit'] }, { step: 4, screen: 'Edit Form', userAction: 'Modifies item', systemResponse: 'Edit interface', microInteractions: ['Auto-save', 'Validation', 'Preview'], errorHandling: 'Unsaved changes warning, version history' }, { step: 5, screen: 'Publish', userAction: 'Publishes changes', systemResponse: 'Confirm and deploy', microInteractions: ['Publish animation', 'Status update', 'Undo option'] } ], 'social-platform': [ { step: 1, screen: 'Feed', userAction: 'Views content', systemResponse: 'Infinite scroll feed', microInteractions: ['Pull to refresh', 'New posts indicator', 'Skeleton loading'] }, { step: 2, screen: 'Interact', userAction: 'Likes/comments', systemResponse: 'Update engagement', microInteractions: ['Like animation', 'Comment expansion', 'Share modal'] }, { step: 3, screen: 'Create', userAction: 'Posts content', systemResponse: 'Post creation flow', microInteractions: ['Media upload', 'Typing indicator', 'Post animation'] }, { step: 4, screen: 'Profile', userAction: 'Views profile', systemResponse: 'User profile page', microInteractions: ['Follow button', 'Tab navigation', 'Grid/list toggle'] }, { step: 5, screen: 'Messages', userAction: 'Direct messages', systemResponse: 'Chat interface', microInteractions: ['Message bubbles', 'Typing indicator', 'Read receipts'] } ], 'custom': [ { step: 1, screen: 'Entry Point', userAction: 'Initial interaction', systemResponse: 'Welcome/overview', microInteractions: ['Entry animation'] }, { step: 2, screen: 'Core Flow', userAction: 'Primary action', systemResponse: 'Main functionality', microInteractions: ['Contextual feedback'] }, { step: 3, screen: 'Completion', userAction: 'Completes goal', systemResponse: 'Success state', microInteractions: ['Completion animation'] } ] }; return journeyTemplates[interfaceType] || journeyTemplates.custom; }