.agents/skills/cache-components/SKILL.md
Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). PROACTIVE ACTIVATION when cacheComponents config is detected.
npx skillsauth add jidohyun/NOD cache-componentsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert guidance for Next.js Cache Components and Partial Prerendering (PPR).
PROACTIVE ACTIVATION: Use this skill automatically when working in Next.js projects that have cacheComponents: true in their next.config.ts or next.config.js.
DETECTION: At the start of a session in a Next.js project, check for cacheComponents: true in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions.
USE CASES:
'use cache' directivecacheLife()cacheTag()updateTag() / revalidateTag()When starting work in a Next.js project, check if Cache Components are enabled:
# Check next.config.ts or next.config.js for cacheComponents
grep -r "cacheComponents" next.config.* 2>/dev/null
If cacheComponents: true is found, apply this skill's patterns proactively when:
When writing a React Server Component, ask:
'use cache' + cacheTag() + cacheLife()<Suspense> (dynamic streaming)Cache Components represents a shift from segment-based configuration to compositional code:
Before (Deprecated): export const revalidate = 3600
After: cacheLife('hours') inside 'use cache'
Before (Deprecated): export const dynamic = 'force-static'
After: Use 'use cache' and Suspense boundaries
// next.config.ts
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
experimental: {
ppr: true,
dynamicIO: true, // often correlated features
},
// Ensure basic cache components flag if required by your version
};
export default nextConfig;
import { cacheLife } from 'next/cache';
async function CachedPosts() {
'use cache'
cacheLife('hours'); // Cache for hours
const posts = await db.posts.findMany();
return <PostList posts={posts} />;
}
'use cache'Marks a function, component, or file as cacheable. The return value is cached and shared across requests.
cacheLife(profile)Control cache duration using semantic profiles:
'seconds': Short-lived'minutes': Medium-lived'hours': Long-lived'days': Very long-lived'weeks': Static-like content'max': Permanent cachecacheTag(...tags)Tag cached data for on-demand invalidation.
import { cacheTag } from 'next/cache';
async function getUserProfile(id: string) {
'use cache'
cacheTag('user-profile', `user-${id}`);
// ... fetch logic
}
revalidateTag(tag) / expireTag(tag)Invalidate cached data in background or immediately.
'use server'
import { expireTag } from 'next/cache';
export async function updateUser(id: string, data: any) {
await db.user.update({ where: { id }, data });
expireTag(`user-${id}`); // Invalidate specific cache
}
development
Develop custom native UI libraries based on Flutter widgets for WebF. Create reusable component libraries that wrap Flutter widgets as web-accessible custom elements.
development
Advanced design intelligence for professional UI/UX. Use for implementing modern design patterns (Glassmorphism, Bento Grid), ensuring accessibility, and generating tailored design systems for web and mobile.
development
Manages Terraform state operations such as importing, moving, and removing resources. Use this skill when the user needs to refactor Terraform state, import existing infrastructure, fixing state drift, or migrate backends without destroying resources.
development
Expert guidance for creating, managing, and using Terraform modules. Use this skill when the user wants to create reusable infrastructure components, standardize Terraform patterns, or needs help with module structure and best practices for AWS, GCP, or Azure.