frontend-polish
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseFrontend Polish
前端优化打磨
Make the AI-generated frontend production-ready: loading states, error handling, and responsive fixes.
This skill is called by theorchestrator. Framework-agnostic — applies to both Next.js and Vite/React.vibe-ship
让AI生成的前端达到生产就绪状态:加载状态、错误处理和响应式修复。
该技能由编排器调用。与框架无关——适用于Next.js和Vite/React。vibe-ship
1. Apply design best practices
1. 应用设计最佳实践
Invoke for visual quality guidance before making any changes.
frontend-design在进行任何修改之前,调用获取视觉质量指导。
frontend-design2. Add loading states
2. 添加加载状态
Scan every component that fetches data. For each one missing a loading state:
Next.js — create a file next to the :
loading.tsxpage.tsxtypescript
// app/dashboard/loading.tsx
export default function Loading() {
return <div className="animate-pulse h-8 bg-gray-200 rounded" />
}Vite/React — add a loading conditional before the main return:
typescript
const [loading, setLoading] = useState(true)
// set loading to false after data fetch completes
if (loading) return <div className="animate-pulse h-8 bg-gray-200 rounded" />扫描所有获取数据的组件。对于每个缺少加载状态的组件:
Next.js — 在旁创建文件:
page.tsxloading.tsxtypescript
// app/dashboard/loading.tsx
export default function Loading() {
return <div className="animate-pulse h-8 bg-gray-200 rounded" />
}Vite/React — 在主return语句前添加加载状态判断:
typescript
const [loading, setLoading] = useState(true)
// 数据获取完成后将loading设为false
if (loading) return <div className="animate-pulse h-8 bg-gray-200 rounded" />3. Add error boundaries
3. 添加错误边界
Next.js — create an file next to any that fetches data:
error.tsxpage.tsxtypescript
'use client'
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
return (
<div>
<p>Something went wrong.</p>
<button onClick={reset}>Try again</button>
</div>
)
}Vite/React — wrap top-level routes with :
react-error-boundaryInstall if not present:
npm install react-error-boundarytypescript
import { ErrorBoundary } from 'react-error-boundary'
function FallbackUI({ resetErrorBoundary }: { resetErrorBoundary: () => void }) {
return (
<div>
<p>Something went wrong.</p>
<button onClick={resetErrorBoundary}>Try again</button>
</div>
)
}
// Wrap your routes:
// <ErrorBoundary FallbackComponent={FallbackUI}><YourRoute /></ErrorBoundary>Next.js — 在任何获取数据的旁创建文件:
page.tsxerror.tsxtypescript
'use client'
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
return (
<div>
<p>出现错误。</p>
<button onClick={reset}>重试</button>
</div>
)
}Vite/React — 使用包裹顶级路由:
react-error-boundary若未安装则执行:
npm install react-error-boundarytypescript
import { ErrorBoundary } from 'react-error-boundary'
function FallbackUI({ resetErrorBoundary }: { resetErrorBoundary: () => void }) {
return (
<div>
<p>出现错误。</p>
<button onClick={resetErrorBoundary}>重试</button>
</div>
)
}
// 包裹你的路由:
// <ErrorBoundary FallbackComponent={FallbackUI}><YourRoute /></ErrorBoundary>4. Check page titles and meta tags
4. 检查页面标题和元标签
Next.js — ensure every exports a metadata object:
page.tsxtypescript
export const metadata = { title: 'Page Title | App Name' }Vite/React — open and confirm:
index.html- is set to the app name (not the default "Vite App")
<title> - exists
<meta name="description" content="...">
Next.js — 确保每个都导出metadata对象:
page.tsxtypescript
export const metadata = { title: '页面标题 | 应用名称' }Vite/React — 打开并确认:
index.html- 已设置为应用名称(而非默认的"Vite App")
<title> - 已存在
<meta name="description" content="...">
5. Quick responsive audit
5. 快速响应式检查
In the browser, open each main page at 375px width (iPhone SE size — use DevTools device toolbar). Flag and fix any of:
- Text overflowing its container
- Buttons too small to tap (less than 44px height)
- Horizontal scroll appearing unexpectedly
Fix using Tailwind responsive prefixes (, ) or CSS media queries.
sm:md:在浏览器中,打开每个主页面并将宽度设为375px(iPhone SE尺寸——使用开发者工具的设备工具栏)。标记并修复以下问题:
- 文本溢出容器
- 按钮过小无法点击(高度小于44px)
- 意外出现水平滚动条
使用Tailwind响应式前缀(、)或CSS媒体查询进行修复。
sm:md:6. Validate
6. 验证
Ask the user to:
- Run
npm run dev - Throttle network to "Slow 3G" in DevTools → confirm loading states appear before content
- Open each main page at 375px width → confirm no overflow or scroll issues
Report: "✓ Frontend polished. Loading states, error boundaries, and responsive layout confirmed."
请用户执行以下操作:
- 运行
npm run dev - 在开发者工具中将网络限速为"Slow 3G" → 确认加载状态在内容显示前出现
- 将每个主页面宽度设为375px → 确认无溢出或滚动问题
报告:"✓ 前端已优化完成。加载状态、错误边界和响应式布局已确认正常。"