nextjs-senior-dev — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited nextjs-senior-dev (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 |
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 | useFormState | 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~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.