configure-cache-busting
Cache-busting for Next.js and Vite: content hashing, CDN cache headers. Use when adding Vercel/Cloudflare cache headers or auditing static asset caching.
What this skill does
## When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Configuring content hashing for Next.js or Vite builds | Optimizing server-side caching (nginx, CDN config directly) | | Setting up CDN cache headers for Vercel or Cloudflare | Debugging build output issues (system-debugging agent) | | Verifying cache-busting compliance after a framework upgrade | Configuring general CI/CD workflows (`/configure:workflows`) | | Adding build verification scripts for hashed assets | Setting up container builds (`/configure:container`) | | Auditing static asset caching strategy across a project | Profiling frontend performance (browser devtools) | ## Context - Project root: !`pwd` - Package files: !`find . -maxdepth 1 -name 'package.json'` - Next.js config: !`find . -maxdepth 1 -name 'next.config.*'` - Vite config: !`find . -maxdepth 1 -name 'vite.config.*'` - Build output: !`find . -maxdepth 1 -type d \( -name '.next' -o -name 'dist' -o -name 'out' \)` - CDN config: !`find . -maxdepth 2 \( -path './vercel.json' -o -path './_headers' -o -path './_redirects' -o -path './public/_headers' \)` - Project standards: !`find . -maxdepth 1 -name '.project-standards.yaml'` ## Parameters Parse from command arguments: - `--check-only`: Report compliance status without modifications (CI/CD mode) - `--fix`: Apply fixes automatically without prompting - `--framework <nextjs|vite>`: Override framework detection - `--cdn <cloudflare|vercel|none>`: Specify CDN provider for cache header configuration ## Execution Execute this cache-busting configuration check: ### Step 1: Detect project framework Identify the framework from file structure: | Indicator | Framework | Config File | |-----------|-----------|-------------| | `next.config.js` or `next.config.mjs` | Next.js | `next.config.*` | | `next.config.ts` | Next.js | `next.config.ts` | | `vite.config.js` or `vite.config.ts` | Vite | `vite.config.*` | | `.next/` directory | Next.js (built) | Detection only | | `dist/` directory + vite in package.json | Vite (built) | Detection only | Check `package.json` dependencies for `"next"` or `"vite"`. If both detected, prompt user to specify with `--framework`. If neither detected, report unsupported and exit. ### Step 2: Analyze current cache-busting state For the detected framework, read config files and check: **Next.js** - Read `next.config.js/ts` and check: - [ ] `generateBuildId` configured for deterministic builds - [ ] `assetPrefix` configured for CDN - [ ] `compress: true` enabled - [ ] `poweredByHeader: false` for security - [ ] `generateEtags` configured - [ ] Cache headers configured in `headers()` function **Vite** - Read `vite.config.js/ts` and check: - [ ] `build.rollupOptions.output.entryFileNames` uses `[hash]` - [ ] `build.rollupOptions.output.chunkFileNames` uses `[hash]` - [ ] `build.rollupOptions.output.assetFileNames` uses `[hash]` - [ ] `build.manifest: true` for SSR/manifest-based routing - [ ] `build.cssCodeSplit` configured appropriately ### Step 3: Detect CDN provider Identify CDN from project files: | Indicator | CDN Provider | |-----------|--------------| | `vercel.json` exists | Vercel | | `.vercelignore` exists | Vercel | | `_headers` in root or `public/` | Cloudflare Pages | | `_redirects` exists | Cloudflare Pages / Netlify | | `wrangler.toml` exists | Cloudflare Workers/Pages | | None of the above | Generic / None | ### Step 4: Generate compliance report Print a formatted compliance report: ``` Cache-Busting Compliance Report ================================ Project: [name] Framework: [Next.js 14.x | Vite 5.x] CDN Provider: [Vercel | Cloudflare | None detected] Framework Configuration: Config file next.config.js [EXISTS | MISSING] Asset hashing [hash] in filenames [ENABLED | DISABLED] Build manifest manifest files [GENERATED | MISSING] Deterministic builds Build ID configured [PASS | NOT SET] Compression gzip/brotli enabled [PASS | DISABLED] Cache Headers: Static assets immutable, 1y [CONFIGURED | MISSING] HTML files no-cache, must-revalidate [CONFIGURED | MISSING] API routes varies by route [CONFIGURED | N/A] CDN configuration vercel.json/_headers [EXISTS | MISSING] Build Output (if built): Hashed filenames app.[hash].js [DETECTED | NOT BUILT] Content addressing Unique hashes per version [PASS | DUPLICATE] Manifest integrity Valid manifest.json [PASS | INVALID] Overall: [X issues found] Recommendations: [List specific fixes needed] ``` If `--check-only`, stop here. ### Step 5: Apply configuration (if --fix or user confirms) Based on detected framework, create or update config files using templates from [REFERENCE.md](REFERENCE.md): 1. **Next.js**: Update `next.config.js/ts` with deterministic builds, compression, cache headers 2. **Vite**: Update `vite.config.js/ts` with content hashing, manifest, chunk splitting ### Step 6: Configure CDN cache headers Based on detected CDN provider, create or update cache header configuration using templates from [REFERENCE.md](REFERENCE.md): - **Vercel**: Create/update `vercel.json` with header rules - **Cloudflare Pages**: Create `public/_headers` with cache rules - **Generic**: Provide nginx configuration reference ### Step 7: Add build verification Create `scripts/verify-cache-busting.js` to verify content hashing works after build. Add `package.json` scripts for build verification. Use the verification script template from [REFERENCE.md](REFERENCE.md). ### Step 8: Configure CI/CD verification Add cache-busting verification step to GitHub Actions workflow. Use the CI workflow template from [REFERENCE.md](REFERENCE.md). ### Step 9: Update standards tracking Update `.project-standards.yaml`: ```yaml standards_version: "2025.1" last_configured: "[timestamp]" components: cache-busting: "2025.1" cache-busting-framework: "[nextjs|vite]" cache-busting-cdn: "[vercel|cloudflare|none]" cache-busting-verified: true ``` ### Step 10: Print final report Print a summary of changes applied, cache strategy overview, and next steps for verification. For detailed configuration templates and code examples, see [REFERENCE.md](REFERENCE.md). ## Agentic Optimizations | Context | Command | |---------|---------| | Quick compliance check | `/configure:cache-busting --check-only` | | Auto-fix all issues | `/configure:cache-busting --fix` | | Next.js project only | `/configure:cache-busting --fix --framework nextjs` | | Vite project only | `/configure:cache-busting --fix --framework vite` | | Cloudflare CDN headers | `/configure:cache-busting --fix --cdn cloudflare` | | Vercel CDN headers | `/configure:cache-busting --fix --cdn vercel` | ## Output Provide: 1. Compliance report with framework and CDN configuration status 2. List of changes made (if --fix) or proposed (if interactive) 3. Verification instructions and commands 4. CDN cache header examples 5. Next steps for deployment and monitoring ## See Also - `/configure:all` - Run all compliance checks - `/configure:status` - Quick compliance overview - `/configure:workflows` - GitHub Actions workflow standards - `/configure:dockerfile` - Container configuration with build caching - **Next.js Documentation** - https://nextjs.org/docs/pages/api-reference/next-config-js - **Vite Documentation** - https://vitejs.dev/config/build-options.html - **Web.dev Caching Guide** - https://web.dev/http-cache/
Related in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.