skills/team/react-feature-slice/SKILL.md
Scaffolds feature-based React / TypeScript architecture using feature folders, presentational + container components, custom hooks, a typed data layer, and structural CQRS (query hooks vs mutation hooks). React analog of dotnet-vertical-slice and python-feature-slice — no DI framework; uses props/context for dependency injection and a query cache for server state. Use when creating feature-based React projects, adding React features, organizing components by feature rather than by technical type, or scaffolding a feature's data layer.
npx skillsauth add michaelalber/ai-toolkit react-feature-sliceInstall 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.
"The best code is code that never has to be written." -- Jeff Atwood
"Organize around business capabilities, not technical layers." -- Sam Newman, Building Microservices
Feature slice architecture organizes code by feature, not by technical type. The default React tutorial
layout — components/, hooks/, utils/, services/ — spreads one feature across many directories,
so adding "checkout" means touching five folders. This skill replaces that with self-contained vertical
slices: features/cart/, features/checkout/, each owning its full stack — components, hooks, data layer,
types, and tests.
React has no mediator and no DI container. Dependency injection is props and context; the container
resolves nothing for you. CQRS is a structural and naming convention — read hooks (useOrdersQuery)
versus mutation hooks (useCreateOrder) — backed by a query cache (TanStack Query / RTK Query) for server
state, never a library contract.
Grounding note: the KB has no React corpus. Use
collection="javascript"for TS,collection="ui_ux"for accessible component design, and cite react.dev for hooks/component patterns. Never invent areactcollection.
Non-Negotiable Constraints:
strict — every component, hook, and prop is typed; no any without justificationshared/ or composition onlyfetch; query/mutation hooks douseState + useEffect for server dataindex.tsWhat this skill is NOT:
The 10 domain principles (applied-as examples) and the grounding query map live in
references/domain-principles.md. The structural CQRS conventions live in references/react-cqrs-conventions.md.
AI discipline rules, the anti-patterns catalog, and error-recovery procedures live in
references/discipline-and-recovery.md.
Objective: Understand the existing structure before scaffolding.
# React + tooling versions
grep -E '"(react|typescript|vite|next|@reduxjs/toolkit|zustand|@tanstack/react-query)"' package.json
# TypeScript strictness
grep -n '"strict"' tsconfig*.json
# Existing layout — type-based, feature-based, or mixed
find src -type d -maxdepth 2 | head -30
# Existing data-fetching pattern
grep -rn "useQuery\|createApi\|fetch(\|axios" src/ | head -20
Record: React version, bundler (Vite/CRA/Next), TS strict on/off, state/query libraries, current layout, router.
Create the feature folder. See references/feature-folder-template.md for file-by-file content.
src/features/<name>/
components/<Name>List.tsx # container: wires hooks → view
components/<Name>ListView.tsx # presentational: props in, JSX out
components/<Name>Form.tsx # form with boundary validation
hooks/use<Name>sQuery.ts # read (query hook)
hooks/useCreate<Name>.ts # write (mutation hook)
data/api.ts # api client + zod parse; the only I/O
data/schema.ts # zod schemas + inferred types
types.ts # feature-local types
index.ts # barrel: the feature's public surface
<Name>List.test.tsx # RTL test
hooks/useCreate<Name>.test.ts # hook test
Register the slice with the router and (only if shared) a context provider.
// app/routes.tsx
import { OrdersPage } from "@/features/orders"; // barrel import only
{ path: "/orders", element: <OrdersPage /> }
// Provider only when prop-drilling earns it:
// <CartProvider> wraps the subtree that needs it, at the feature root.
npx tsc --noEmit # types clean
npx eslint src/features/<name> # incl. hooks + a11y rules
npx vitest run src/features/<name> # slice tests green
# Cross-feature import check — should print nothing:
grep -rn "features/" "src/features/<name>" | grep -v "features/<name>"
<react-feature-slice-state>
phase: DETECT | SCAFFOLD | WIRE | VERIFY | COMPLETE
feature_name: [name]
react_version: [detected]
existing_structure: type-based | feature-based | mixed | unknown
query_lib: tanstack | rtk-query | none
route_registered: true | false
query_hook_created: true | false
mutation_hook_created: true | false
tests_scaffolded: true | false
last_action: [description]
next_action: [description]
</react-feature-slice-state>
Emit a "Feature Slice Scaffold" report (Files Created / Wiring / Verification checklist) plus the
feature-folder diagram. Both full templates live in references/output-templates.md.
| Skill | Relationship |
|-------|-------------|
| react-component-scaffolder | Component-level quality (props typing, RTL test, story, a11y). Use to generate the individual components inside a slice. |
| react-app-scaffolder | When there is no app yet, scaffold the Vite + TS + router + Vitest skeleton first, then add slices. |
| react-security-review | After scaffolding, audit the slice's boundary validation, link/URL handling, and token usage against OWASP. |
| react-architecture-checklist | Architecture quality gate. Run after several slices to verify isolation, hooks discipline, and coupling. |
| tdd | Drive each hook and component test-first (RED → GREEN → REFACTOR) rather than scaffolding code ahead of tests. |
development
Interviews the user relentlessly about a plan, decision, or idea — one question at a time, each with a recommended answer. Shared engine behind "grill-me" and "grill-with-docs". Use on any "grill" trigger phrase or to stress-test thinking. Do NOT use to build the plan; it ends at shared understanding, not implementation.
testing
Runs a relentless interview to sharpen a plan or design, capturing the decisions as ADRs and a glossary along the way. Use when the user wants to be grilled AND wants the session to leave durable domain documentation behind. Do NOT use for a throwaway stress-test with no artifacts; use grill-me instead.
tools
OWASP-based security review of Vue/TypeScript front-ends. Detects framework (Vite/Vue CLI/Nuxt), entry points, and data flows; scans the OWASP Top 10 (2025) mapped to Vue client-side risks (raw-HTML XSS via v-html, URL/protocol injection, bundled secrets, insecure token storage, dependency CVEs, missing CSP, open redirects, router guard bypass); emits an exec summary plus graded findings. Use to audit Vue for vulnerabilities. Not for architecture grading (vue-architecture-checklist).
tools
Analyzes legacy Vue codebases and produces actionable modernization plans. Primary migration paths include Options API to Composition API, Vue 2 to Vue 3, Vue CLI to Vite, JavaScript to TypeScript, Vue Test Utils/Karma/Mocha to Vitest + Vue Testing Library, legacy Vuex to Pinia, and removed-in-Vue-3 pattern cleanup (filters, event bus, `$listeners`). Does NOT perform the migration — assesses, quantifies risk, and plans.