Awesome-omni-skill nextjs-senior-dev
Senior Next.js 15+/16 Engineer skill for App Router. Use when scaffolding production apps, enforcing RSC patterns, auditing codebases, or optimizing performance.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/nextjs-senior-dev-majiayu000" ~/.claude/skills/diegosouzapw-awesome-omni-skill-nextjs-senior-dev-c264ae && rm -rf "$T"
manifest:
skills/development/nextjs-senior-dev-majiayu000/SKILL.mdsource content
Next.js Senior Developer
Transform into Senior Next.js 15+/16 Engineer for production-ready App Router applications.
When to Use
- Scaffolding new Next.js App Router projects
- RSC vs Client Component decisions
- Server Actions and data fetching patterns
- Performance optimization (CWV, bundle, caching)
- Middleware and authentication setup
- Next.js 15/16 migration or audit
Version Notes
| Version | Key Changes |
|---|---|
| Next.js 16 | → , Node.js runtime only, Cache Components |
| Next.js 15 | fetch uncached by default, React 19, Turbopack stable |
Triggers
| Command | Purpose |
|---|---|
| Scaffold new App Router project |
| Generate route folder (page, layout, loading, error) |
| Audit codebase for patterns, security, performance |
| Optimize bundle, images, fonts, caching |
Reference Files (20 Total)
Load based on task context:
Core References
| Category | Reference | When |
|---|---|---|
| Routing | | Route groups, parallel, intercepting |
| Components | | RSC vs Client decision, patterns |
| Data | | fetch, cache, revalidation, streaming |
| Security | | Server Actions, auth, OWASP |
| Performance | | CWV, images, fonts, bundle, memory |
| Middleware | | Auth, redirects, Edge vs Node |
Architecture & Quality
| Category | Reference | When |
|---|---|---|
| Architecture | | File structure, feature-sliced design |
| Shared Components | | DRY patterns, composition, reusability |
| Code Quality | | Error handling, testing, accessibility |
Features & Integrations
| Category | Reference | When |
|---|---|---|
| SEO & Metadata | | generateMetadata, sitemap, OpenGraph |
| Database | | Prisma, Drizzle, queries, migrations |
| Authentication | | Auth.js, sessions, RBAC |
| Forms | | React Hook Form, Zod, file uploads |
| i18n | | next-intl, routing, RTL support |
| Real-Time | | SSE, WebSockets, polling, Pusher |
| API Design | | REST, tRPC, webhooks, versioning |
DevOps & Migration
| Category | Reference | When |
|---|---|---|
| Deployment | | Vercel, Docker, CI/CD, env management |
| Monorepo | | Turborepo, shared packages, workspaces |
| Migration | | Pages→App Router, version upgrades |
| Debugging | | DevTools, profiling, error tracking |
Core Tenets
1. Server-First
Default to Server Components. Use Client only when required.
RSC when: data fetching, secrets, heavy deps, no interactivity Client when: useState, useEffect, onClick, browser APIs
2. Component Archetypes
| Pattern | Runtime | Must Have |
|---|---|---|
| Server | async, data fetching |
| Server | "use server", Zod, 7-step security |
| Client | "use client", event handlers |
| Either | Pure presentation, stateless |
3. 7-Step Server Action Security
"use server" // 1. Rate limit (IP/user) // 2. Auth verification // 3. Zod validation (sanitize errors!) // 4. Authorization check (IDOR prevention) // 5. Mutation // 6. Granular revalidateTag() (NOT revalidatePath) // 7. Audit log (async)
4. Data Fetching Strategy
Static → generateStaticParams + fetch ISR → fetch(url, { next: { revalidate: 60 }}) Dynamic → fetch(url, { cache: 'no-store' }) Real-time → Client fetch (SWR)
Next.js 15 Change: fetch is UNCACHED by default (opposite of 14).
5. Caching
| Type | Scope | Invalidation |
|---|---|---|
| Request Memoization | Request | Automatic |
| Data Cache | Server | revalidateTag() |
| Full Route Cache | Server | Rebuild |
| Router Cache | Client | router.refresh() |
Prefer
revalidateTag() over revalidatePath() to avoid cache storms.
6. Feature-Sliced Architecture
For large apps (50+ routes), use domain-driven structure:
src/ ├── app/ # Routing only ├── components/ # Shared UI (ui/, shared/) ├── features/ # Business logic per domain │ └── [feature]/ │ ├── components/ │ ├── actions/ │ ├── queries/ │ └── hooks/ ├── lib/ # Global utilities └── types/ # Global types
7. Component Sharing Rules
| Used 3+ places? | Contains business logic? | Action |
|---|---|---|
| Yes | No | Move to or |
| Yes | Yes | Keep in |
| No | Any | Keep local () |
8. State Management Hierarchy
| State Type | Tool | Example |
|---|---|---|
| URL State | searchParams | Filters, pagination |
| Server State | Server Components | User data, posts |
| Form State | useFormState | Form submissions |
| UI State | useState | Modals, dropdowns |
| Shared Client | Context/Zustand | Theme, cart |
Rule: Prefer URL state for shareable/bookmarkable state.
9. DRY with createSafeAction
// lib/safe-action.ts - Reuse for all Server Actions export const createPost = createSafeAction(schema, handler, { revalidateTags: ["posts"] })
Eliminates duplicate auth/validation/error handling.
Anti-Patterns
| Don't | Do |
|---|---|
| "use client" at tree root | Push boundary down to leaves |
| API routes for server data | Direct DB in Server Components |
| useEffect for fetching | Server Component async fetch |
| revalidatePath('/') | Granular revalidateTag() |
| Trust middleware alone | Validate at data layer too |
| Prop drill 5+ levels | Context or composition |
types | Proper types or |
| Barrel exports in features | Direct imports |
| localStorage for auth | httpOnly cookies |
| Global caches (memory leak) | LRU cache or React cache() |
Middleware: Deny by Default
// middleware.ts - Public routes MUST be allowlisted const publicRoutes = ['/login', '/register', '/api/health'] if (!publicRoutes.some(r => pathname.startsWith(r))) { // Require auth }
CRITICAL: Upgrade to Next.js 15.2.3+ (CVE-2025-29927 fix).
Scripts
| Script | Purpose |
|---|---|
| Generate route folder w/ all files |
Templates
| File | Purpose |
|---|---|
| Standard async page |
| Layout w/ metadata |
| 7-step secure Server Action |
| Loading UI skeleton |
| Error boundary |
Assets
| File | Purpose |
|---|---|
| Production config w/ security headers |
| Deny-by-default auth (Next.js 15) |
| Deny-by-default auth (Next.js 16+) |
Quick Reference: Senior Code Review
Before merging any PR, verify:
Performance
- No unnecessary "use client"
- Images use next/image with dimensions
- Heavy components dynamic imported
- Parallel fetching (Promise.all)
Security
- Server Actions validate with Zod
- Auth in actions (not just middleware)
- IDOR prevention (user owns resource)
- No secrets in client bundles
Architecture
- Components in correct layer
- No cross-feature imports
- DRY patterns used (createSafeAction)
- URL state for shareable state
Quality
- No
typesany - Error boundaries present
- Loading states for async
- Accessibility (semantic HTML, alt text)