Agent skill

Nextjs App Architecture

by jakubwarkusz in jakubwarkusz/themes

Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture.

MITAuto-check passedDevelopment

Install Nextjs App Architecture

skills CLI
$ npx skills add jakubwarkusz/themes --skill nextjs-app-architecture -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jakubwarkusz/themes nextjs-app-architecture --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jakubwarkusz/themes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/nextjs-app-architecture .claude/skills/nextjs-app-architecture && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
nextjs-app-architecture
GitHub stars
123
Used in
1 other repo
Token cost
~2.5k tokens
SKILL.md length
1,162 words
Files
9 (incl. references)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture.

  • Works in 10 steps: Pages compose, they never fetch. A… → Pages stay synchronous. Use… → Feature components receive IDs, not… → …
  • Scaffolding a new app
  • SKILL.md covers Prerequisite, Architecture target, Invariants (what every change… and Workflow, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Nextjs App Architecture is an agent skill from jakubwarkusz/themes. Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture. Use when scaffolding a new app, adding a feature, reviewing an existing app, refactoring route-loader-shaped pages into feature-owned async server components, deciding where queries/actions/components live, keeping pages synchronous with params.then(), placing Suspense boundaries, choosing the client/server boundary, designing skeletons, preventing CLS, or enabling Cache Components. Also use when the user asks…

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files (for example `references/cache-components.md`, `references/components.md` and `references/example.md`).

It sits in Development, covering Project scaffolding and Refactoring. It works with Next.js and React. The repository describes itself as: A modern, fully-featured theme management library for Next.js. The licence is MIT.

When your agent uses it

  • Scaffolding a new app
  • Adding a feature
  • Reviewing an existing app
  • Refactoring route-loader-shaped pages into feature-owned async server components

Example prompts

  • “use cache”
  • “/nextjs-app-architecture”

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Pages compose, they never fetch. A page/layout imports feature components and places . No queries, no domain logic, no route-specific…
  2. Pages stay synchronous. Use params.then() / searchParams.then(), never await params at the top — so chrome paints into the static shell…
  3. Feature components receive IDs, not route props. Resolve params / searchParams at the page boundary and pass plain values (id, slug…
  4. Async server component is the default. 'use client' only for hooks, event handlers, or browser APIs — and only on leaves, never on parents…
  5. The page owns the Suspense boundary; the feature owns the skeleton. Features never pre-wrap themselves in .
  6. Skeletons live in the same file as the component, exported alongside it, defined at the end. Feed and FeedSkeleton are siblings.
  7. Queries live in -queries.ts (import 'server-only'); actions live in -actions.ts ('use server'). The file name matches the folder, even for…
  8. One feature folder per real domain noun. Sub-concepts (favorite, like, vote, bookmark, search) fold into the parent feature, never their…
  9. Client components import actions directly — never receive a server action as a prop just to call it.
  10. Feature-local cache coordination stays with its domain. Put pure tags/keys in -cache.ts, client query definitions in -query-options.ts…

What it can do on your machine

Read from SKILL.md and the folder at commit 1fb713c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • preview.nextjs.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Nextjs App Architecture loads about 2.5k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 183 tokens; SKILL.md has 1,162 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~183
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~16k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jakubwarkusz/themes at commit 1fb713c, republished under its MIT licence (© jakubwarkusz). 1,162 words, ~2,542 tokens.

Download SKILL.mdSave it as .claude/skills/nextjs-app-architecture/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
nextjs-app-architecture
description
Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture. Use when scaffolding a new app, adding a feature, reviewing an existing app, refactoring route-loader-shaped pages into feature-owned async server components, deciding where queries/actions/components live, keeping pages synchronous with `params.then()`, placing Suspense boundaries, choosing the client/server boundary, designing skeletons, preventing CLS, or enabling Cache Components. Also use when the user asks about RSC composition, components receiving IDs instead of route params, `'use cache'`, `cacheTag`, `updateTag`, static-shell prerendering, or making an app easier for AI agents to modify.
license
MIT
metadata.author
aurorascharff
metadata.version
1.3.7

Next.js App Architecture

A workflow for building and auditing Next.js 16+ App Router apps so they follow one consistent, feature-sliced RSC architecture like next-beats.

Follow the workflow below step by step — it produces the invariants by construction. Load the reference a step names for the decision it depends on. Get framework mechanics (API signatures, config options, hook contracts) from the linked docs — don't restate or improvise them.

Prerequisite

Before changing a Next.js app, make sure the project is set up for AI agents to read version-matched docs. Follow the AI Coding Agents guide: prefer the project's AGENTS.md / bundled docs, and create or refresh them when missing. Then use this skill for architecture decisions.

Architecture target

Build pages that describe the loading experience, not pages that act like route loaders:

  • app/**/page.tsx and layout.tsx are synchronous composition surfaces: static chrome, section headings, <Suspense> boundaries, error boundaries, and transition wrappers.
  • Feature components own their reads on the server. They receive minimal stable inputs (id, slug, handle, parsed filter values) or already-fetched records, never raw params / searchParams.
  • Queries and actions live in the feature folder. Components import queries; client leaves import actions directly.
  • When server tags and client query keys describe the same feature data, a pure feature-local cache contract owns those identities.
  • Skeletons mirror the component tree and live beside the component they represent.

Invariants (what every change must satisfy)

The non-negotiables. The workflow produces them; the final check verifies them.

  1. Pages compose, they never fetch. A page/layout imports feature components and places <Suspense>. No queries, no domain logic, no route-specific components defined inline.
  2. Pages stay synchronous. Use params.then() / searchParams.then(), never await params at the top — so chrome paints into the static shell and only data-dependent sections suspend.
  3. Feature components receive IDs, not route props. Resolve params / searchParams at the page boundary and pass plain values (id, slug, query) into features.
  4. Async server component is the default. 'use client' only for hooks, event handlers, or browser APIs — and only on leaves, never on parents of server content.
  5. The page owns the Suspense boundary; the feature owns the skeleton. Features never pre-wrap themselves in <Suspense>.
  6. Skeletons live in the same file as the component, exported alongside it, defined at the end. Feed and FeedSkeleton are siblings.
  7. Queries live in <domain>-queries.ts (import 'server-only'); actions live in <domain>-actions.ts ('use server'). The file name matches the folder, even for sub-concepts.
  8. One feature folder per real domain noun. Sub-concepts (favorite, like, vote, bookmark, search) fold into the parent feature, never their own folder.
  9. Client components import actions directly — never receive a server action as a prop just to call it.
  10. Feature-local cache coordination stays with its domain. Put pure tags/keys in <domain>-cache.ts, client query definitions in <domain>-query-options.ts, hook wrappers in hooks/use-*.ts, and tiny client leaves in components/; promote support code only after real cross-feature reuse.

Workflow

Run these in order for build-from-scratch, feature work, or audits. Each step names the reference to consult and the check it must pass.

  1. Choose mode.
    • Build from scratch: sketch routes, real domain nouns, static shell, and expected loading groups before writing code.
    • Audit/refactor: scan current app/ pages first; list every async page, page-level query import, route prop leak, missing Suspense boundary, and feature folder mismatch. → references/example.md for the target shape; references/feature-folders.md for placement. ✓ You know whether you are creating the architecture or converting loader-shaped code into it.
  2. Place the work. Decide the feature folder before writing anything. → references/feature-folders.md (decision tree + merge rules). ✓ A real domain, or folded into the right parent.
  3. Write the query and, when a client cache shares its data, the cache contract. Put server reads in <domain>-queries.ts with import 'server-only'; keep shared tag/key identities in a pure <domain>-cache.ts. → references/queries-actions.md; for SWR/TanStack Query → references/single-page-applications.md; with cacheComponents: true, also → references/cache-components.md. ✓ Cache identities are defined once; server reads are server-only, cached/tagged/lifetimed under Cache Components, and return domain types rather than ORM rows.
  4. Write the action (if there's a mutation). features/<domain>/<domain>-actions.ts, 'use server' at the top. → references/queries-actions.md. ✓ Re-checks auth, validates input, invalidates matching cache tags under Cache Components (refresh() only for justified dynamic reads), returns a discriminated union.
  5. Build the component + skeleton. features/<domain>/components/<name>.tsx: an async server component that awaits its own query from minimal props; 'use client' only on interactive leaves. → references/components.md; for a client data library or strict-SPA/CSR feature → references/single-page-applications.md. ✓ Component receives IDs/handles/parsed filters or already-resolved records, not params; skeleton is a sibling export at the end; no alias skeleton wrappers.
  6. Compose the page. app/<route>/page.tsx: synchronous, params.then(), place <Suspense fallback={<NameSkeleton />}><Name /></Suspense>, and wrap fallible sections in an error boundary. → references/pages-suspense.md. ✓ The page only composes; the boundary lives here, not in the feature; route props are resolved to plain values before reaching feature components.
  7. Add interaction (if any): optimistic updates, pending state, toasts, confirmation. → references/ux-patterns.md. ✓ Feedback isn't doubled; destructive actions confirm; feature-owned client coordination stays with that feature instead of leaking into unrelated domains.
  8. Verify against the checklist below before declaring done.
Show full SKILL.md (334 more words)Show less

Verify before done

Inspect the diff against every invariant — each is checkable by reading the changed files:

  • No page/layout imports a *-queries file or defines a route-specific component inline.
  • Every page with params is synchronous and uses params.then() / searchParams.then().
  • Feature components receive plain IDs/handles/parsed filters or resolved records; no feature prop is named params or searchParams.
  • Every <Suspense> for page data sits in the page; no feature pre-wraps itself.
  • Every component has its real *Skeleton in the same file, at the end; no tiny skeleton aliases just to pass props.
  • Every *-queries.ts starts with import 'server-only'; every *-actions.ts with 'use server'.
  • With cacheComponents: true, reusable reads use 'use cache' / cacheTag / cacheLife, or 'use cache: private' / 'use cache: remote' when appropriate; any dynamic read is intentional and justified.
  • Mutations touching cached reads call updateTag() / revalidateTag(..., 'max') for the matching tags; refresh() is not a substitute for tag invalidation.
  • Action files are named <folder>-actions.ts; no sub-concept spawned its own folder.
  • Features with both server tags and client query keys define them once in a pure <domain>-cache.ts; queries, actions, hydration, query options, and hooks import from it.
  • Feature-local client-support files sit in the smallest fitting place: query options at the feature root, use-* hook wrappers in hooks/, leaf components in components/, and shared support only after real cross-feature reuse.
  • 'use client' components are leaves — they import actions/hooks/providers, not async server components.
  • Mutations validate their input and invalidate the affected data.

Reference index

  • references/feature-folders.md — where code goes: folder layout, cache contracts, naming, and merging sub-concepts.
  • references/queries-actions.md — query/action rules: server-only, dedup, validation, invalidation, return shape.
  • references/components.md — server/client boundary, skeletons, use(), single-use helpers, live data.
  • references/pages-suspense.md — page composition, params.then(), Suspense placement, CLS, error boundaries, prefetch.
  • references/cache-components.md — the cacheComponents decisions: which reads to cache, which directive to use, how to invalidate.
  • references/single-page-applications.md — client cache decisions: placement, server seeding, Cache Components coordination, hydration, and mutations.
  • references/ux-patterns.md — interaction decisions: optimistic vs pending vs inline error, toasts, action-prop, confirmations.
  • references/example.md — the next-beats reference app: invariant → file map, for seeing any rule in real code.

© jakubwarkusz, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 8 other files (references) in .agents/skills/nextjs-app-architecture of jakubwarkusz/themes.

  • SKILL.md
  • references/cache-components.md
  • references/components.md
  • references/example.md
  • references/feature-folders.md
  • references/pages-suspense.md
  • references/queries-actions.md
  • references/single-page-applications.md
  • references/ux-patterns.md

Open the folder on GitHubat commit 1fb713c

Used in 1 other repository

We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in jakubwarkusz/themes, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Nextjs App Architecture next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Nextjs App Architecture compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Nextjs App Architecture this skilljakubwarkusz/themes1231 repos~2.5kAutomated safety check: PassMIT
Nuqstrycompai/crm11k1 repos~1.7kAutomated safety check: PassMIT
React Best Practicesshapeshift/web2061 repos~2kAutomated safety check: PassMIT
Clean Code Refactorerfike/fastapi-blog101—~402Automated safety check: PassMIT
Portaljs Connect Ckandatopian/portaljs2.4k1 repos~1.5kAutomated safety check: PassMIT
Senior Fullstackdavila7/claude-code-templates33k7 repos~1.1kAutomated safety check: NotesMIT

Similar skills

  • Nuqs

    trycompai/crm

    nuqs (type-safe URL query state) best practices for Next.js and other React frameworks.

    11k GitHub starsUsed in 1 repo~1.7k tokens
    DevelopmentAuto-check passed
  • React Best Practices

    shapeshift/web

    Comprehensive React and Next.js performance optimization guide with 40+ rules for eliminating waterfalls, optimizing bundles, and improving rendering.

    206 GitHub starsUsed in 1 repo~2k tokens
    DevelopmentAuto-check passed
  • Clean Code Refactorer

    fike/fastapi-blog

    Skill for identifying code smells and refactoring code using Clean Code, SOLID, and DRY principles.

    101 GitHub stars~402 tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Portaljs Connect Ckan

    datopian/portaljs

    Wire a scaffolded PortalJS portal to a CKAN backend over its API.

    2.4k GitHub starsUsed in 1 repo~1.5k tokens
    DevelopmentAuto-check passed
  • Senior Fullstack

    davila7/claude-code-templates

    Comprehensive fullstack development skill for building complete web applications with React, Next.js, Node.js, GraphQL, and PostgreSQL.

    33k GitHub starsUsed in 7 repos~1.1k tokens
    DevelopmentAuto-check: notes
  • React Refactor Tournament

    ragnar-pwninskjold/tech-snacks

    Review React/Next.js code against the real vercel-react-best-practices skill, backlog the performance findings keyed to actual rule ids + impact tiers, rank the most over-subscribed tiers, then fix…

    137 GitHub stars~1.3k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

Works with

Categories

Questions about Nextjs App Architecture

What does Nextjs App Architecture do?

Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture. Nextjs App Architecture is an agent skill from jakubwarkusz/themes.js 16 App Router apps using a next-beats-style React Server Components architecture.

When should I use Nextjs App Architecture?

Nextjs App Architecture fits situations like: scaffolding a new app; adding a feature; reviewing an existing app; refactoring route-loader-shaped pages into feature-owned async server components.

How do I install Nextjs App Architecture in Claude Code?

Run `npx skills add jakubwarkusz/themes --skill nextjs-app-architecture -a claude-code`. Or copy the skill folder (.agents/skills/nextjs-app-architecture in jakubwarkusz/themes) into .claude/skills/nextjs-app-architecture in your project. Claude Code loads it when a task matches its description.

How do I install Nextjs App Architecture in Codex?

Run `npx skills add jakubwarkusz/themes --skill nextjs-app-architecture -a codex`. Or copy the skill folder (.agents/skills/nextjs-app-architecture in jakubwarkusz/themes) into .agents/skills/nextjs-app-architecture in your project. Codex loads it when a task matches its description.

Can I use Nextjs App Architecture in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jakubwarkusz/themes --skill nextjs-app-architecture -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nextjs-app-architecture, .gemini/skills/nextjs-app-architecture, .github/skills/nextjs-app-architecture and .opencode/skills/nextjs-app-architecture in your project.

What does Nextjs App Architecture need to run?

SKILL.md names no scripts, command-line tools or credentials: Nextjs App Architecture is instructions for the agent only.

Does Nextjs App Architecture access the network?

SKILL.md names 1 domain. As links in the text: preview.nextjs.org. This is read from the text; nothing was executed.

Is Nextjs App Architecture safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Nextjs App Architecture use?

Nextjs App Architecture is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Nextjs App Architecture use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 13k tokens, read only when the agent opens those files.

What are the alternatives to Nextjs App Architecture?

Skills that share tags, products or a category with Nextjs App Architecture: Nuqs (trycompai/crm, 11k stars), React Best Practices (shapeshift/web, 206 stars), Clean Code Refactorer (fike/fastapi-blog, 101 stars) and Portaljs Connect Ckan (datopian/portaljs, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Nextjs App Architecture?

jakubwarkusz (a GitHub user) maintains it in jakubwarkusz/themes, which has 123 GitHub stars. The repository was last updated on October 7, 2026.

Source: jakubwarkusz/themes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.