بنقرة واحدة
frontend-ui
Build beautiful, responsive UIs with React, Tailwind CSS, and Framer Motion animations.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Build beautiful, responsive UIs with React, Tailwind CSS, and Framer Motion animations.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Build accessible portfolio websites following WCAG guidelines with proper semantics, keyboard navigation, screen reader support, and inclusive design patterns.
Implement analytics, error monitoring, and performance tracking with Vercel Analytics, Google Analytics, Sentry, and custom event tracking.
Build server-side APIs using Next.js Server Actions and API routes.
Build production-ready contact forms with React Hook Form, Zod validation, Server Actions, and email services like Resend.
Manage portfolio content with MDX, Contentlayer, or local JSON for projects, blog posts, and dynamic content.
Implement robust dark mode and theming systems with next-themes, CSS custom properties, and Tailwind CSS for seamless user experience.
| name | frontend-ui |
| description | Build beautiful, responsive UIs with React, Tailwind CSS, and Framer Motion animations. |
| author | Jaivish Chauhan @ GDG SSIT |
| version | 1.0.0 |
| url | https://github.com/JaivishChauhan/vibecoding-starter |
This skill focuses on creating "premium" web experiences. We don't just build functionality; we build feeling. Every interaction should be smooth, every layout responsive, and every aesthetic choice intentional.
We use React not just for components, but for state-driven UI architecture.
Avoid prop-drilling by using composition (children prop) and slots.
// Bad: Prop drilling
<Layout userName={user.name} userAvatar={user.avatar} onLogout={handleLogout} />
// Good: Composition
<Layout
header={<Header user={user} onLogout={handleLogout} />}
sidebar={<Sidebar items={navItems} />}
>
{children}
</Layout>
Never clutter UI components with complex logic. Extract it.
// hooks/useAsync.js
export const useAsync = (asyncFunction, immediate = true) => {
const [status, setStatus] = useState("idle");
const [value, setValue] = useState(null);
const [error, setError] = useState(null);
const execute = useCallback(() => {
setStatus("pending");
setValue(null);
setError(null);
return asyncFunction()
.then((response) => {
setValue(response);
setStatus("success");
})
.catch((error) => {
setError(error);
setStatus("error");
});
}, [asyncFunction]);
useEffect(() => {
if (immediate) execute();
}, [execute, immediate]);
return { execute, status, value, error };
};
useMemo: Cache expensive calculations.useCallback: Stabilize function references (crucial for passing props to optimized child components).React.memo: Prevent re-renders of pure components.Tailwind is more than utility classes; it's a design system engine.
Use [] syntax for precise control when design tokens don't fit, but overuse indicates a weak design system.
<div class="top-[17px] w-[calc(100%-20px)] bg-[#1a1a1a]"></div>
<div class="group card">
<p class="text-gray-500 group-hover:text-white transition">Content</p>
</div>
<input class="peer invalid:border-red-500" required />
<p class="invisible peer-invalid:visible text-red-500">Error</p>
*:p-4 (applies padding to all direct children).Access CSS variables directly in classes if configured, or use arbitrary values to set them.
<div class="--bg-opacity:0.5 bg-black/[var(--bg-opacity)]"></div>
Animations should be physics-based, not linear.
layout PropMagically animate layout changes (reordering lists, expanding cards).
<motion.div layout transition={{ type: "spring", stiffness: 300, damping: 30 }}>
{/* Content that changes size/position */}
</motion.div>
Coordinate animations between parent and children.
const listVariants = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: {
staggerChildren: 0.1,
delayChildren: 0.3,
},
},
};
const itemVariants = {
hidden: { opacity: 0, y: 20 },
show: { opacity: 1, y: 0 },
};
// Usage
<motion.ul variants={listVariants} initial="hidden" animate="show">
<motion.li variants={itemVariants}>Item 1</motion.li>
<motion.li variants={itemVariants}>Item 2</motion.li>
</motion.ul>;
Add tactile feedback easily.
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
transition={{ type: "spring", stiffness: 400, damping: 17 }}
>
Click Me
</motion.button>
Always create components with a future-proof interface.
ts or js with JSDocclassName prop for overrides using clsx and tailwind-mergeimport { cn } from "@/lib/utils"; // standard shadcn/ui utility
export function Button({ className, variant, ...props }) {
return (
<button
className={cn(
"rounded px-4 py-2 font-medium transition active:scale-95",
variant === "primary" && "bg-blue-600 text-white hover:bg-blue-700",
variant === "ghost" && "bg-transparent hover:bg-slate-100",
className,
)}
{...props}
/>
);
}
md: is "tablet and up".@tailwindcss/container-queries for component-level responsiveness.outline-none without adding a custom focus style (focus-visible:ring-2).layout animations have stable keys.height: auto without layout prop.tailwind.config.js content array covers the file path.bg-${color}-500 will NOT work. Full class names must exist in source code.useMemo or move outside component.