
minimax-nextjs-agent
by HuynhSang2005
SKILL.md
name: minimax-nextjs-agent description: Expert UI/UX Next.js v16 với MiniMax M2.1 + MCP (understand_image, Chrome DevTools). Phân tích UI, redesign Shadcn/Tailwind, responsive, accessibility.
MiniMax M2.1 Next.js UI/Agent Skill
Expert UI/UX development cho Next.js 16 sử dụng MiniMax M2.1 model với MCP tools. Đặc biệt hữu ích cho việc phân tích và cải thiện UI/UX vì MiniMax M2.1 không có native vision.
🎯 Overview
Model Limitations & Solutions
MiniMax M2.1: Không có native vision capabilities → Sử dụng:
understand_imageMCP: Phân tích images (URLs, local files, base64)chrome-devtools-mcp: Browser automation, screenshots, DOM inspection
MCP Tools Stack
{
"mcpServers": {
"minimax": {
"command": "uvx",
"args": ["minimax-coding-plan-mcp", "-y"],
"env": {
"MINIMAX_API_KEY": "your-api-key",
"MINIMAX_API_HOST": "https://api.minimax.io"
}
},
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}
🔧 MCP Tools Reference
MiniMax Coding Plan MCP
understand_image
Purpose: Analyze images using AI vision models (compensates for M2.1's lack of native vision)
Input Types:
- Remote URLs:
https://example.com/screenshot.png - Local paths:
/absolute/path/to/image.pnghoặcrelative/path.jpg - Base64 data URLs:
data:image/png;base64,...
Usage Examples:
"Analyze this design mockup: https://example.com/design.png and identify components"
"Describe the UI issues in this screenshot: /Users/dev/Downloads/ current.png"
"Extract text from images/receipt.jpg for data entry validation"
Response: Textual analysis của image content
web_search
Purpose: Intelligent web search (organic results + related searches)
"Search for latest Tailwind CSS v4 features 2025"
Chrome DevTools MCP
Navigation Tools (7 tools)
navigate_page(url)- Điều hướng đến URLnew_page(url)- Mở tab mớilist_pages()- Liệt kê tất cả tabsselect_page(pageIdx)- Chọn tab theo indexclose_page()- Đóng tab hiện tạiwait_for(selectorOrTimeout)- Chờ element hoặc timeout
Input Automation (7 tools)
click(uid)- Click elementhover(uid)- Hover elementfill(uid, value)- Điền text vào inputfill_form(fieldValues)- Điền form với objectdrag(fromUid, toUid)- Drag elementhandle_dialog(action, promptText)- Handle alerts/confirmsupload_file(uid, filePath)- Upload file
Emulation (3 tools)
resize_page(width, height)- Resize viewportemulate_network(condition)- Network throttling (Offline, Slow 3G, Fast 3G, Slow 4G, Fast 4G)emulate_cpu(throttlingRate)- CPU throttling (1-20x)
Debugging (4 tools)
take_screenshot(uid?, fullPage?, filePath?)- Chụp screenshottake_snapshot(verbose?)- Lấy DOM snapshot (a11y tree)evaluate_script(function)- Execute JavaScriptlist_console_messages()- Xem console logs
Network (2 tools)
list_network_requests()- Liệt kê network requestsget_network_request(reqid)- Chi tiết một request
Performance (3 tools)
performance_start_trace()- Bắt đầu traceperformance_stop_trace()- Dừng traceperformance_analyze_insight()- Phân tích insights
📋 UI/UX Workflow với MiniMax M2.1
Phase 1: Analysis & Planning
Step 1: Navigate & Capture
1. navigate_page("http://localhost:3000/your-page")
2. take_screenshot(fullPage=true, filePath="/tmp/current-ui.png")
3. take_snapshot() // DOM structure
Step 2: Analyze với understand_image
Prompt: "Analyze this UI screenshot (/tmp/current-ui.png). Identify:
- Layout structure (grid, flex, stacked)
- Component types (cards, forms, modals, navigation)
- Color scheme và contrast issues
- Spacing/typography problems
- Accessibility concerns (color contrast, focus states)
- Responsive behavior suggestions
Focus on: Shadcn UI patterns, Tailwind conventions."
Step 3: Check Console/Network Errors
1. list_console_messages()
2. list_network_requests()
3. evaluate_script(() => document.documentElement.outerHTML)
Phase 2: Redesign Planning
Component Tree Analysis:
From snapshot + screenshot → Identify:
├── Navigation (header, sidebar)
├── Hero Section
├── Content Area
│ ├── Cards (blog, projects)
│ ├── Forms (search, filter)
│ └── Modals/Dialogs
└── Footer
Responsive Breakpoints:
// Tailwind breakpoints
const breakpoints = {
sm: '640px', // Mobile landscape
md: '768px', // Tablet
lg: '1024px', // Desktop
xl: '1280px', // Large desktop
'2xl': '1536px' // Extra large
}
Design System Check:
"Based on screenshot analysis, suggest:
1. Shadcn UI components to use (Card, Button, Dialog, etc.)
2. Tailwind classes for consistent spacing (spacing scale)
3. Color adjustments for dark mode compatibility
4. Typography hierarchy (text-sm, text-lg, text-xl, etc.)
5. Motion/Animation with Framer Motion"
Phase 3: Implementation
File Structure:
apps/web/src/components/
├── ui/ # Shadcn (DON'T EDIT)
├── blog/
│ ├── post-card.tsx
│ ├── post-list.tsx
│ └── pagination.tsx
├── docs/
│ ├── sidebar-nav.tsx
│ └── toc.tsx
└── site/
├── site-header.tsx
└── site-footer.tsx
Code Patterns:
Client Component (interactive):
'use client'
import { useState } from 'react'
import { Button } from '@/components/ui/button'
import { Card } from '@/components/ui/card'
export function PostCard({ post }: { post: BlogPost }) {
const [isHovered, setIsHovered] = useState(false)
return (
<Card
className="transition-all duration-200 hover:shadow-lg"
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
{/* Content */}
</Card>
)
}
Server Component (data fetch):
import { getBlogPosts } from '@/services/blog-service'
import { PostCard } from './post-card'
export async function BlogList({ page = 1 }: { page?: number }) {
const { data: posts } = await getBlogPosts('vi', 'published', { page })
return (
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
{posts.map(post => (
<PostCard key={post.id} post={post} />
))}
</div>
)
}
Responsive Design:
// Mobile-first responsive classes
<div className="
grid gap-4 // Mobile (default)
md:grid-cols-2 // Tablet
lg:grid-cols-3 // Desktop
xl:gap-6 // Large screens
">
Phase 4: Validation & Iteration
Screenshot Comparison Workflow:
1. make_file_changes()
2. navigate_page("http://localhost:3000/page")
3. take_screenshot(filePath="/tmp/updated-ui.png")
4. understand_image("Compare with /tmp/current-ui.png. What changed? Is it better?")
Accessibility Check:
"Check this screenshot for:
- Color contrast ratios (WCAG AA/AAA)
- Focus indicators on interactive elements
- Touch target sizes (44x44px minimum)
- Semantic HTML structure
- ARIA labels missing"
Performance Audit:
performance_start_trace()
wait_for(5000) // Let page load
performance_stop_trace()
performance_analyze_insight()
🛠️ Common Tasks
Task 1: Redesign Hero Section
Prompt:
1. Navigate http://localhost:3000 và take screenshot
2. Analyze hero section: "Describe hero layout, identify issues with spacing, typography, visual hierarchy"
3. Suggest Shadcn + Tailwind redesign:
- Use Card or custom component
- Suggest heading sizes (text-3xl, text-4xl, text-5xl)
- Suggest button styles (default, secondary, outline)
- Suggest spacing (gap-4, gap-6, gap-8)
Task 2: Fix Responsive Grid
Prompt:
1. Navigate http://localhost:3000/blog và take full-page screenshot
2. Analyze grid: "How does the current grid behave on mobile? Tablet? Desktop?"
3. Suggest Tailwind grid fixes:
- Mobile: grid-cols-1
- Tablet: md:grid-cols-2
- Desktop: lg:grid-cols-3
4. Verify with resize_page(375, 667) // Mobile size
5. Screenshot and confirm
Task 3: Form Validation UI
Prompt:
1. Navigate http://localhost:3000/admin/posts/new
2. Analyze form: "Identify form fields, validation states, error message placement"
3. Suggest improvements:
- Use Shadcn Form components (Form, FormField, FormItem)
- Add error: parameter in Zod schemas
- Show inline validation feedback
4. Fill form test data và screenshot kết quả
Task 4: Dark Mode Check
Prompt:
1. Take screenshot of current page (assume light mode)
2. evaluate_script(() => document.documentElement.classList.contains('dark'))
3. If dark mode not active: navigate_page with ?theme=dark or trigger toggle
4. take_screenshot() for dark mode
5. analyze_image: "Compare light vs dark mode. Any contrast issues? Gray-on-gray? Text unreadable?"
⚠️ Limitations & Workarounds
MiniMax M2.1 Vision Limits
Issue: M2.1 không có native vision
Solution: Sử dụng chain:
browser_action → take_screenshot → understand_image → analysis
Best Practices:
- Luôn capture trước/sau comparison
- Sử dụng
take_snapshot()để có DOM structure (text-based, more accurate) - Kết hợp console errors với visual analysis
Image Path Handling
Issue: File paths với @ prefix từ MCP clients
Solution: understand_image tool automatically strips @ prefix
Browser Startup
Issue: Chrome DevTools MCP starts browser on first tool use
Solution: Đợi browser ready trước khi take screenshot:
navigate_page("http://localhost:3000")
wait_for("body") // Wait for page load
take_screenshot()
🔗 Cross-References
Related Skills:
- .github/skills/nextjs-app-router/SKILL.md - Next.js 16 patterns
- .github/skills/tailwind/SKILL.md - Tailwind CSS patterns
- .github/skills/i18n-next-intl-vi/SKILL.md - Vietnamese UI
- .github/skills/shadcn-ui/SKILL.md - Shadcn patterns
Documentation:
- app-router.instructions.md - Next.js 16 App Router
- components.instructions.md - Component rules
📝 Example Prompts
Full UI Redesign:
"Redesign the blog listing page:
1. Navigate http://localhost:3000/vi/blog
2. Take full-page screenshot
3. Analyze current UI: 'Describe layout, components, color scheme, spacing issues'
4. Suggest Shadcn + Tailwind redesign:
- PostCard component với hover effects
- Responsive grid (1→2→3 columns)
- Pagination component
- Tag filter UI
5. Make changes và screenshot để verify"
Quick Visual Check:
"Check UI consistency:
1. Navigate http://localhost:3000
2. Take screenshot
3. analyze_image: 'List all UI inconsistencies (colors, spacing, typography)'
4. suggest_fixes: 'Specific Tailwind classes to fix each issue'"
Form UX Improvement:
"Improve form UX:
1. Navigate http://localhost:3000/contact
2. Take screenshot
3. Analyze: 'What form validation exists? Any UX issues?'
4. Suggest: 'Add Zod validation, error messages, focus states'
5. Implement và verify với screenshot comparison"
🎨 UI Component Patterns
Shadcn + Tailwind Combinations
Card with hover effect:
<Card className="transition-all duration-200 hover:shadow-lg hover:-translate-y-1">
<CardHeader>
<CardTitle>{title}</CardTitle>
</CardHeader>
<CardContent>{content}</CardContent>
</Card>
Button variants:
<Button variant="default">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="link">Link</Button>
Responsive spacing:
<div className="p-4 md:p-6 lg:p-8">
<div className="gap-4 md:gap-6 lg:gap-8">
Dark mode:
<div className="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100">
🚫 Boundaries
- DO: Focus UI/UX, responsive, accessibility, Shadcn/Tailwind patterns
- DON'T: Edit backend code, database migrations, authentication logic
- DO: Use
understand_image+take_screenshotchain for visual analysis - DON'T: Rely solely on code reading—always verify with browser inspection
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon