Professional UI/UX design expertise for full-stack applications. Covers design thinking, user psychology (Hick's/Fitts's/Jakob's Law), visual hierarchy, interaction patterns, accessibility, performance-driven design, and design critique. Use when designing features, improving UX, solving user problems, or conducting design reviews.
name: generic-fullstack-ux-designer
description: Professional UI/UX design expertise for full-stack applications. Covers design thinking, user psychology (Hick's/Fitts's/Jakob's Law), visual hierarchy, interaction patterns, accessibility, performance-driven design, and design critique. Use when designing features, improving UX, solving user problems, or conducting design reviews.
Fullstack UX Designer
Professional UX expertise for Next.js/NestJS full-stack applications.
Extends:Generic UX Designer - Read base skill for design thinking process, research methods, interaction patterns, and critique framework.
Full-Stack UX Considerations
Server-Side Rendering UX
Scenario
UX Pattern
Initial page load
Hydration-safe skeleton screens
Data fetching
Server components for static, client for dynamic
Authentication
Protected routes with redirect UX
Form submission
Progressive enhancement
Hydration-Safe Patterns
// ✓ Avoid hydration mismatch
function Timestamp({ date }: { date: Date }) {
const [formatted, setFormatted] = useState("");
useEffect(() => {
setFormatted(date.toLocaleString()); // Client-side only
}, [date]);
return <span>{formatted || "Loading..."}</span>;
}
// Show immediate feedback, rollback on error
async function toggleLike(postId: string) {
// 1. Update UI immediately
setLiked(true);
setLikeCount((c) => c + 1);
try {
// 2. Call API
await api.like(postId);
} catch {
// 3. Rollback on failure
setLiked(false);
setLikeCount((c) => c - 1);
showToast("Failed to like");
}
}
When to Use Optimistic UI
Action
Optimistic?
Why
Like/favorite
Yes
Low risk, common action
Add comment
Yes
Can show pending state
Delete item
No
Destructive, needs confirm
Payment
No
Critical, must verify
Form submit
Maybe
Depends on complexity
Form Submission UX
Client → Server Flow
User Input → Client Validation → Submit → Server Validation → Response
↓ ↓ ↓ ↓ ↓
Feedback Inline errors Loading... Field errors Success/Error
Multi-Step Forms
// Show progress and allow back navigation
<FormStepper
steps={["Details", "Payment", "Confirm"]}
currentStep={step}
onBack={() => setStep((s) => s - 1)}
/>