Agent skill
providing-feedback
Implements feedback and notification systems including toasts, alerts, modals, progress indicators, and error states. Use when communicating system state, displaying messages, confirming actions, or showing errors.
Install this agent skill to your Project
npx add-skill https://github.com/ancoleman/ai-design-components/tree/main/skills/providing-feedback
SKILL.md
Providing User Feedback and Notifications
This skill implements comprehensive feedback and notification systems that enhance all other component skills by providing consistent patterns for communicating system state, displaying messages, and handling user confirmations.
When to Use This Skill
Activate this skill when:
- Implementing toast notifications or snackbars
- Displaying success, error, warning, or info messages
- Creating modal dialogs or confirmation dialogs
- Implementing progress indicators (spinners, progress bars, skeleton screens)
- Designing empty states or zero-result displays
- Adding tooltips or contextual help
- Determining notification timing, stacking, or positioning
- Implementing accessible feedback patterns with ARIA
- Communicating any system state to users
Feedback Type Decision Matrix
Choose the appropriate feedback mechanism based on urgency and attention requirements:
Critical + Blocking → Modal Dialog
Important + Non-blocking → Alert Banner
Success/Info + Temporary → Toast/Snackbar
Contextual Help → Tooltip/Popover
In-progress → Progress Indicator
No Data → Empty State
Quick Reference by Urgency
| Urgency Level | Component | Duration | Blocks Interaction |
|---|---|---|---|
| Critical | Modal Dialog | Until action | Yes |
| Important | Alert Banner | Until dismissed | No |
| Standard | Toast | 3-7 seconds | No |
| Contextual | Inline Message | Persistent | No |
| Help | Tooltip | On hover | No |
| Progress | Spinner/Bar | During operation | Optional |
Implementation Approach
Step 1: Determine Feedback Type
Assess the situation using these criteria:
- Urgency: How critical is the information?
- Duration: How long should it persist?
- Action Required: Does user need to respond?
- Context: Is it related to specific UI element?
Step 2: Choose Implementation Pattern
For Toasts/Snackbars:
- Position: Bottom-right (recommended)
- Duration: 3-4s (success), 5-7s (warning), 7-10s (error)
- Stack limit: 3-5 maximum
- See
references/toast-patterns.mdfor detailed patterns
For Modal Dialogs:
- Focus management: Trap focus within modal
- Accessibility: ESC to close, proper ARIA labels
- Backdrop: Click outside to close (optional)
- See
references/modal-patterns.mdfor implementation
For Progress Indicators:
- <100ms: No indicator needed
- 100ms-5s: Spinner with message
- 5s-30s: Progress bar (determinate if possible)
-
30s: Progress bar + time estimate + cancel
- See
references/progress-indicators.mdfor patterns
For Empty States:
- Include: Illustration, headline, body text, CTA
- Types: First use, zero results, error, permission denied
- See
references/empty-states.mdfor designs
Step 3: Implement with Recommended Libraries
Modern React Stack (Recommended):
npm install sonner @radix-ui/react-dialog
For Toasts - Use Sonner:
import { Toaster, toast } from 'sonner';
// In your app root
<Toaster position="bottom-right" />
// Trigger notifications
toast.success('Changes saved successfully');
toast.promise(saveData(), {
loading: 'Saving...',
success: 'Saved!',
error: 'Failed to save'
});
For Modals - Use Radix UI:
import * as Dialog from '@radix-ui/react-dialog';
<Dialog.Root>
<Dialog.Trigger>Open</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay />
<Dialog.Content>
<Dialog.Title>Confirm Action</Dialog.Title>
<Dialog.Description>Are you sure?</Dialog.Description>
<Dialog.Close>Cancel</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
See references/library-comparison.md for alternative libraries and selection criteria.
Step 4: Apply Accessibility Patterns
ARIA Live Regions for Announcements:
<!-- For non-critical notifications -->
<div role="status" aria-live="polite">
File uploaded successfully
</div>
<!-- For critical alerts -->
<div role="alert" aria-live="assertive">
Error: Failed to save
</div>
Focus Management for Modals:
- Save current focus before opening
- Move focus to first interactive element in modal
- Trap focus within modal (Tab cycles)
- Restore focus to trigger on close
See references/accessibility-feedback.md for complete patterns.
Step 5: Integrate Design Tokens
All feedback components use the design-tokens skill for consistent theming:
/* Example token usage */
.toast {
background: var(--toast-bg);
color: var(--toast-text);
padding: var(--toast-padding);
border-radius: var(--toast-border-radius);
box-shadow: var(--toast-shadow);
animation-duration: var(--toast-enter-duration);
}
Token categories used:
- Colors: Toast, alert, modal, tooltip backgrounds
- Spacing: Internal padding for all components
- Typography: Font sizes for titles and messages
- Shadows: Elevation for floating elements
- Motion: Animation durations and easing
Notification Timing Guidelines
Auto-dismiss durations:
- Success: 3-4 seconds
- Info: 4-5 seconds
- Warning: 5-7 seconds
- Error: 7-10 seconds or manual dismiss
- With action button: 10+ seconds or no auto-dismiss
Progress indicator thresholds:
- <100ms: No indicator
- 100ms-5s: Spinner
- 5s-30s: Progress bar
-
30s: Progress bar + cancel option
Resources
Scripts (Token-Free Execution)
scripts/generate_toast_manager.js- Generate toast configurations with timing and stackingscripts/format_messages.py- Format user-facing messages based on contextscripts/calculate_timing.js- Calculate auto-dismiss timings
References (Detailed Documentation)
references/toast-patterns.md- Toast positioning, stacking, animationsreferences/alert-patterns.md- Alert banner implementationsreferences/modal-patterns.md- Modal dialogs with focus managementreferences/progress-indicators.md- Loading states and progressreferences/empty-states.md- No-data and zero-result patternsreferences/accessibility-feedback.md- ARIA patterns and focus managementreferences/library-comparison.md- Detailed library analysis
Examples (Implementation Code)
examples/success-toast.tsx- Success notification with Sonnerexamples/confirmation-modal.tsx- Delete confirmation with Radix UIexamples/progress-upload.tsx- File upload with progress barexamples/inline-validation.tsx- Form validation errors
Assets (Templates and Configs)
assets/message-templates.json- Reusable message templatesassets/error-catalog.json- Error code to message mappingsassets/timing-config.json- Timing recommendations
Cross-Skill Integration
This skill enhances all other component skills:
- Forms: Validation feedback, success confirmations
- Data Visualization: Loading states, error messages
- Tables: Bulk operation feedback, action confirmations
- AI Chat: Streaming indicators, rate limit warnings
- Dashboards: Widget loading, system status
- Search/Filter: Zero results, search progress
- Media: Upload progress, processing status
- Design Tokens: All visual styling via token system
Library Quick Comparison
| Library | Type | Size | Best For |
|---|---|---|---|
| Sonner | Toast | Small | Modern React 18+, accessibility |
| react-hot-toast | Toast | <5KB | Minimal bundle size |
| react-toastify | Toast | ~16KB | RTL support, mobile |
| Radix UI | Modal | Small | Design systems, headless |
| Headless UI | Modal | Small | Tailwind projects |
Choose based on project requirements. See references/library-comparison.md for detailed analysis.
Key Principles
- Match urgency to attention: Don't use modals for non-critical info
- Be consistent: Same feedback type for similar actions
- Provide context: Explain what happened and what to do
- Enable recovery: Include undo, retry, or help options
- Respect preferences: Honor reduced motion settings
- Test accessibility: Verify with screen readers and keyboard
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
designing-sdks
Design production-ready SDKs with retry logic, error handling, pagination, and multi-language support. Use when building client libraries for APIs or creating developer-facing SDK interfaces.
administering-linux
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and troubleshooting. Use when deploying applications, optimizing server performance, diagnosing production issues, or managing users and security on Linux servers.
implementing-api-patterns
API design and implementation across REST, GraphQL, gRPC, and tRPC patterns. Use when building backend services, public APIs, or service-to-service communication. Covers REST frameworks (FastAPI, Axum, Gin, Hono), GraphQL libraries (Strawberry, async-graphql, gqlgen, Pothos), gRPC (Tonic, Connect-Go), tRPC for TypeScript, pagination strategies (cursor-based, offset-based), rate limiting, caching, versioning, and OpenAPI documentation generation. Includes frontend integration patterns for forms, tables, dashboards, and ai-chat skills.
prompt-engineering
Engineer effective LLM prompts using zero-shot, few-shot, chain-of-thought, and structured output techniques. Use when building LLM applications requiring reliable outputs, implementing RAG systems, creating AI agents, or optimizing prompt quality and cost. Covers OpenAI, Anthropic, and open-source models with multi-language examples (Python/TypeScript).
deploying-applications
Deployment patterns from Kubernetes to serverless and edge functions. Use when deploying applications, setting up CI/CD, or managing infrastructure. Covers Kubernetes (Helm, ArgoCD), serverless (Vercel, Lambda), edge (Cloudflare Workers, Deno), IaC (Pulumi, OpenTofu, SST), and GitOps patterns.
optimizing-costs
Optimize cloud infrastructure costs through FinOps practices, commitment discounts, right-sizing, and automated cost management. Use when reducing cloud spend, implementing budget controls, or establishing cost visibility across AWS, Azure, GCP, and Kubernetes environments.
Didn't find tool you were looking for?