Back to Skills

nextjs-16-architecture

verified

Comprehensive Next.js v16 development with Cache Components, feature-based architecture, and best practices. Use for ANY Next.js 16 task to know - (1) Project structure with features folder pattern, (2) Where to fetch data with use cache, (3) Server vs Client component decisions, (4) One file per query/type/schema/hook pattern, (5) Cache invalidation with updateTag/revalidateTag, (6) Proper component organization within features. Apply to all Next.js 16 development tasks.

View on GitHub

Marketplace

horuz

horuz-ai/claude-plugins

Plugin

nextjs

Repository

horuz-ai/claude-plugins
1stars

plugins/nextjs/skills/nextjs-16-architecture/SKILL.md

Last Verified

January 21, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/horuz-ai/claude-plugins/blob/main/plugins/nextjs/skills/nextjs-16-architecture/SKILL.md -a claude-code --skill nextjs-16-architecture

Installation paths:

Claude
.claude/skills/nextjs-16-architecture/
Powered by add-skill CLI

Instructions

# Next.js 16 Architecture

Architecture patterns for Next.js 16 with Cache Components and feature-based organization.

## Core Philosophy

1. **Dynamic by default, cache what you choose** - Use `"use cache"` explicitly
2. **Fetch in smallest possible component** - Don't prop-drill data
3. **Keep everything static, stream only dynamic** - Use Suspense for dynamic parts
4. **Suspense boundaries high** - Place in pages/layouts, not feature components

## Quick Reference

### Feature Folder Structure
```
features/{feature}/
├── components/
│   ├── server/       # Async data-fetching components
│   ├── client/       # 'use client' interactive components
│   └── skeletons/    # Loading states for Suspense
├── data/             # Database queries (SELECT, INSERT, UPDATE, DELETE)
├── actions/          # Server Actions ('use server' + cache invalidation)
├── types/            # TypeScript types (1 file = 1 type)
├── schemas/          # Zod schemas (1 file = 1 schema)
├── hooks/            # Client-side hooks
└── lib/              # Feature-specific utilities
```

### File Naming
| Type | Pattern | Example |
|------|---------|---------|
| Server component | `kebab-case.tsx` | `agent-header.tsx` |
| Client component | `kebab-case.tsx` | `login-form.tsx` |
| Skeleton | `{name}-skeleton.tsx` | `agent-header-skeleton.tsx` |
| GET query | `get-{entity}.ts` | `get-agent.ts` |
| GET multiple | `get-{entities}.ts` | `get-agents.ts` |
| CREATE | `create-{entity}.ts` | `create-agent.ts` |
| DELETE | `delete-{entity}.ts` | `delete-agent.ts` |
| Server Action | `{verb}-{entity}-action.ts` | `delete-agent-action.ts` |

### Cache Pattern
```typescript
// Data file (SELECT with cache)
export async function getEntity(id: number) {
  "use cache";
  cacheTag(`entity-${id}`);
  cacheLife("hours");
  return await db.select()...
}

// Server Action (mutation + invalidation)
"use server";
export async function deleteEntityAction(id: number) {
  await deleteEntity(id);
  updateTag(`entity-${id}`);

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
2844 chars