1---2name: stack3description: Stack — Index4---56# Stack — Index78Persimmon app code = Next.js 16 (App Router, Server Components, Server Actions) in strict TypeScript, validated with Zod at every boundary, styled with Tailwind v4 tokens. This mother is a map; follow the child for the actual work.910## Trigger1112- "Write the Server Action for…" / "Handle this form submit / mutation"13- "Fix the types" / "strict mode" / "remove this `any`"14- "Validate this input" / "Zod schema"15- "Theme tokens" / "Tailwind setup"1617## The child skills1819| Skill | When to use | Owns |20|---|---|---|21| `stack-server-actions` | Any mutation, form submit, or App Router data write | Next 16 Server Action patterns — Zod boundary, `revalidatePath`/`revalidateTag`, error shape, `force-dynamic` |22| `stack-typescript-strict` | Any new TS, or tightening existing code | Strict-mode patterns, `unknown` over `any`, explicit return types, narrowing |23| `stack-zod-boundary` | Any trust boundary (Server Action, API route, webhook) | Zod schemas at the edge, parse-don't-validate, error mapping |24| `stack-tailwind-tokens` | Styling setup or design-token work | Tailwind v4 `@theme` CSS-first config, token layering, utility patterns |2526## How to route27281. **New mutation / form?** → `stack-server-actions` for the action shape; `stack-zod-boundary` for input parsing.292. **Type errors / `any` leaks?** → `stack-typescript-strict`.303. **Styling / theme?** → `stack-tailwind-tokens`.3132## Persimmon stack defaults — one-screen summary3334- **Server Components by default.** `"use client"` only for state, effects, or browser APIs.35- **Server Actions for mutations.** API routes only for background-job triggers, webhooks, SSE/streaming.36- **`const dynamic = "force-dynamic"`** on any page that reads the DB or `auth()` at request time.37- **Zod at every boundary**; narrow `unknown`, never trust raw input.38- **No `any`** without a justified `// eslint-disable` + reason. Explicit return types on exported functions.39- **Tailwind v4** via `@theme` tokens — no hardcoded values where a token exists.4041## Anti-patterns banned4243- Mutations via API routes when a Server Action fits44- Reading DB/`auth()` in a page without `force-dynamic`45- `any` as a shortcut around a real type46- Unvalidated boundary input47- Hardcoded colors/spacing outside the Tailwind token layer4849## Relationship to other mothers5051| Mother | Connection |52|---|---|53| `data` | Server Actions call the Prisma client defined in `data` |54| `ai` | AI-backed actions route through `ai-sdk-wrapper` |55| `security` | Auth checks in actions follow `security-nextauth` |56| `quality` | Reviewed by `quality-review-type-safety` and `quality-review-data-layer` |