brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
nextjs-senior-devSenior Next.js 15+/16 Engineer skill for App Router. Use when scaffolding production apps, enforcing RSC patterns, auditing codebases, or optimizing performance.
Independent GitHub snapshot ยท Automated classification ยท Original documentation governs
Transform into Senior Next.js 15+/16 Engineer for production-ready App Router applications.
| Version | Key Changes |
|---|---|
| Next.js 16 | middleware.ts โ proxy.ts, Node.js runtime only, Cache Components |
| Next.js 15 | fetch uncached by default, React 19, Turbopack stable |
| Command | Purpose |
|---|---|
/next-init | Scaffold new App Router project |
/next-route | Generate route folder (page, layout, loading, error) |
/next-audit | Audit codebase for patterns, security, performance |
/next-opt | Optimize bundle, images, fonts, caching |
Load based on task context:
| Category | Reference | When |
|---|---|---|
| Routing | references/app_router.md | Route groups, parallel, intercepting |
| Components | references/components.md | RSC vs Client decision, patterns |
| Data | references/data_fetching.md | fetch, cache, revalidation, streaming |
| Security | references/security.md | Server Actions, auth, OWASP |
| Performance | references/performance.md | CWV, images, fonts, bundle, memory |
| Middleware | references/middleware.md | Auth, redirects, Edge vs Node |
| Category | Reference | When |
|---|---|---|
| Architecture | references/architecture.md | File structure, feature-sliced design |
| Shared Components | references/shared_components.md | DRY patterns, composition, reusability |
| Code Quality | references/code_quality.md | Error handling, testing, accessibility |
| Category | Reference | When |
|---|---|---|
| SEO & Metadata | references/seo_metadata.md | generateMetadata, sitemap, OpenGraph |
| Database | references/database.md | Prisma, Drizzle, queries, migrations |
| Authentication | references/authentication.md | Auth.js, sessions, RBAC |
| Forms | references/forms.md | React Hook Form, Zod, file uploads |
| i18n | references/i18n.md | next-intl, routing, RTL support |
| Real-Time | references/realtime.md | SSE, WebSockets, polling, Pusher |
| API Design | references/api_design.md | REST, tRPC, webhooks, versioning |
| Category | Reference | When |
|---|---|---|
| Deployment | references/deployment.md | Vercel, Docker, CI/CD, env management |
| Monorepo | references/monorepo.md | Turborepo, shared packages, workspaces |
| Migration | references/migration.md | PagesโApp Router, version upgrades |
| Debugging | references/debugging.md | DevTools, profiling, error tracking |
| Scripts & 3rd-Party | references/scripts.md | next/script, loading strategies, Google Analytics |
| Self-Hosting | references/self_hosting.md | Docker standalone, cache handlers, multi-instance ISR |
| Debug Tricks | references/debug_tricks.md | MCP debugging, --debug-build-paths |
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
| Pattern | Runtime | Must Have |
|---|---|---|
page.tsx | Server | async, data fetching |
*.action.ts | Server | "use server", Zod, 7-step security |
*.interactive.tsx | Client | "use client", event handlers |
*.ui.tsx | Either | Pure presentation, stateless |
"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)
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).
| 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.
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
| Used 3+ places? | Contains business logic? | Action |
|---|---|---|
| Yes | No | Move to components/ui/ or shared/ |
| Yes | Yes | Keep in features/ |
| No | Any | Keep local (_components/) |
| State Type | Tool | Example |
|---|---|---|
| URL State | searchParams | Filters, pagination |
| Server State | Server Components | User data, posts |
| Form State | useActionState (React 19) | Form submissions |
| UI State | useState | Modals, dropdowns |
| Shared Client | Context/Zustand | Theme, cart |
Rule: Prefer URL state for shareable/bookmarkable state.
// lib/safe-action.ts - Reuse for all Server Actions
export const createPost = createSafeAction(schema, handler, {
revalidateTags: ["posts"]
})
Eliminates duplicate auth/validation/error handling.
| 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 |
any types | Proper types or unknown |
| Barrel exports in features | Direct imports |
| localStorage for auth | httpOnly cookies |
| Global caches (memory leak) | LRU cache or React cache() |
// 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).
| Script | Purpose |
|---|---|
scripts/scaffold_route.py | Generate route folder w/ all files |
| File | Purpose |
|---|---|
templates/page.tsx | Standard async page |
templates/layout.tsx | Layout w/ metadata |
templates/action.ts | 7-step secure Server Action |
templates/loading.tsx | Loading UI skeleton |
templates/error.tsx | Error boundary |
| File | Purpose |
|---|---|
assets/next.config.ts | Production config w/ security headers |
assets/middleware.ts | Deny-by-default auth (Next.js 15) |
assets/proxy.ts | Deny-by-default auth (Next.js 16+) |
Before merging any PR, verify:
Performance
Security
Architecture
Quality
any types