--- name: MCP Widget Patterns description: This skill should be used when the user asks to "design a widget", "what widget pattern should I use", "inline card design", "carousel widget", "fullscreen mode", "picture in picture", "widget layout", "card design for ChatGPT", or needs guidance on specific widget patterns and implementations for OpenAI Apps SDK. version: 0.1.0 --- # MCP Widget Patterns for OpenAI Apps SDK ## Overview Widgets are visual components that render inline with ChatGPT conversations. This skill catalogs proven widget patterns with implementation guidance for the OpenAI Apps SDK. ## Display Modes The Apps SDK supports four display modes, each suited to different use cases: | Mode | Use When | Example | |------|----------|---------| | **Inline** | Quick confirmations, simple data | Order confirmation card | | **Inline Carousel** | Comparing similar items | Product search results | | **Fullscreen** | Complex workflows, rich interaction | Document editor, maps | | **Picture-in-Picture** | Persistent parallel activity | Video call, game | ## Inline Card Patterns ### Simple Confirmation Card **Use for:** Action confirmations, status updates, receipts ```html
Booking Confirmed
Restaurant Chez Pierre
Date Tonight, 7:00 PM
Party Size 2 guests
``` **Design rules:** - Maximum 2 primary actions at bottom - 3-5 detail rows maximum - No deep navigation within card ### Status Timeline Card **Use for:** Order tracking, process status, delivery updates ```html
Order #12345
Confirmed
2:30 PM
Preparing
Estimated 15 min
Out for Delivery
``` ### Data Card with Badge **Use for:** Account info, subscription status, quick stats ```html
Account Balance Active
$1,234.56
Available balance
``` ## Carousel Patterns ### Product Carousel **Use for:** Search results, recommendations, similar items ```html ``` **Design rules:** - 3-8 items maximum - Consistent visual hierarchy across cards - Up to 3 lines of metadata per card - Single primary action per card ### Media Carousel **Use for:** Image galleries, video thumbnails, portfolio items ```html ``` ### List Carousel (Ranked) **Use for:** Top results, favorites, prioritized lists ```html ``` ## Fullscreen Patterns ### Editor Canvas **Use for:** Document editing, code editing, design tools ```javascript // Request fullscreen mode await window.openai.requestDisplayMode('fullscreen'); // Widget structure
``` ### Map View **Use for:** Location selection, route display, area exploration ```html
Selected Location
123 Main St
``` ### Multi-Step Wizard **Use for:** Complex forms, onboarding, guided processes ```html
1
2
3
``` ## Picture-in-Picture Patterns ### Video Player **Use for:** Video calls, tutorials, live streams ```javascript // Request PiP mode await window.openai.requestDisplayMode('pip');
``` ### Live Session **Use for:** Games, collaborative editing, real-time monitoring ```html
Live Session
``` ## Styling Guidelines ### Color System Use ChatGPT's semantic colors: ```css :root { /* Text */ --text-default: #000000; --text-secondary: #666666; --text-subtle: #999999; /* Surfaces */ --surface-primary: #ffffff; --surface-secondary: #f5f5f5; --surface-elevated: #ffffff; /* Actions */ --action-primary: #0066cc; --action-secondary: #e0e0e0; /* Status */ --status-success: #22c55e; --status-warning: #f59e0b; --status-error: #ef4444; /* Borders */ --border-default: #e0e0e0; --border-subtle: #f0f0f0; } /* Dark mode */ .dark { --text-default: #ffffff; --text-secondary: #a0a0a0; --surface-primary: #1a1a1a; --surface-secondary: #2d2d2d; --border-default: #404040; } ``` ### Typography Inherit system fonts: ```css body { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; line-height: 1.5; } .heading-lg { font-size: 18px; font-weight: 600; } .heading-md { font-size: 16px; font-weight: 600; } .body { font-size: 14px; } .body-small { font-size: 12px; } .caption { font-size: 11px; color: var(--text-secondary); } ``` ### Spacing Consistent spacing scale: ```css --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 16px; --space-xl: 24px; --space-2xl: 32px; ``` ### Border Radius Match ChatGPT's rounded corners: ```css --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-full: 9999px; ``` ## Pattern Selection Guide | User Need | Pattern | Display Mode | |-----------|---------|--------------| | Confirm an action | Confirmation Card | Inline | | Compare 3-8 options | Carousel | Inline | | Track progress | Timeline Card | Inline | | View account status | Data Card | Inline | | Edit a document | Editor Canvas | Fullscreen | | Select a location | Map View | Fullscreen | | Complete complex form | Wizard | Fullscreen | | Watch video content | Video Player | PiP | | Join live session | Live Session | PiP | ## Additional Resources ### Reference Files For detailed implementation: - **`references/css-variables.md`** - Complete CSS variable reference - **`references/responsive-patterns.md`** - Mobile/desktop adaptations ### Example Files Working examples in `examples/`: - **`examples/inline-card.html`** - Basic inline card template - **`examples/carousel.html`** - Product carousel template - **`examples/fullscreen-editor.html`** - Fullscreen editor template ### Official Resources - UI Kit: https://github.com/openai/apps-sdk-ui - UI Guidelines: https://developers.openai.com/apps-sdk/concepts/ui-guidelines/ - Examples: https://github.com/openai/openai-apps-sdk-examples