with one click
setup-react
Scaffold a React + Vite + pnpm frontend inside an existing project
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Scaffold a React + Vite + pnpm frontend inside an existing project
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Author a deterministic email parser for a bank Tidings doesn't yet support, working only from the user's quarantined ("Needs review") emails — scrubs real samples into fixtures, derives a conservative regex parser, and runs the suites. Invoke when the user says "add support for my bank", "my bank isn't supported", "write a parser for <bank>", or "bank not recognized".
Audit whether the codebase obeys the directives declared in its CLAUDE.md, AGENTS.md, or nested context files — finds violations with file:line evidence and classifies each as auto-fixable or human-judgment. Read-only by default (--apply does doc-only fixes). Complements /basis-principles-audit (which scores whether the rules are good). Invoke for "conformance", "AGENTS.md compliance", "do we follow our own rules", or "Basis cleanup".
Audit a codebase against the five Basis principles for agent-native architecture — canonicality, localization, verifiability, interoperability, default-no. Produces a 5-row scorecard with file:line evidence plus tiered recommendations. Read-only. Invoke for a principles read on whether a repo is structured for agents, or when the user mentions the Basis essay, "agent-native codebase", "agent-ready", or agent readiness.
Apply Tidings brand voice to any user-facing copy — marketing strings, error messages, empty states, tooltips, toasts, FAQ entries, button labels, README prose. Loads the canonical voice rules from docs/brand/voice.md and self-checks the result against the 5-bullet PR review checklist. Invoke when writing or editing any string a user will see, or when reviewing a copy-heavy diff.
Frame the session with Fable as orchestrator and Opus subagents as the workforce — Fable owns decomposition, decisions, briefs, verification, and commits; Opus agents execute self-contained work packets (coding, research, bulk reading). Generic across planning, research, and general coding missions. Invoke at the start of a session with /fable-orchestrate, optionally followed by the mission.
Author an execution-grade implementation plan for a feature or fix, saved as a dated spec under docs/specs/, detailed enough that Opus agents can execute it end-to-end without Fable in the loop. Invoke when the user starts with /fable-plan, asks for a "fable plan", or wants a task planned for later Opus execution rather than built now.
| name | setup-react |
| description | Scaffold a React + Vite + pnpm frontend inside an existing project |
| argument-hint | ["frontend-directory-name"] |
| disable-model-invocation | true |
| allowed-tools | Bash(mkdir:*), Bash(pnpm:*), Bash(ls:*), Bash(test:*), Write, Read, Glob, AskUserQuestion |
Scaffold a modern React + Vite + Tailwind CSS frontend as a subdirectory of an existing project. Designed for projects with a Python/FastAPI backend.
@tailwindcss/vite plugin@/ path alias → src/0.0.0.0 (devcontainer-friendly)Determine the frontend directory name:
$ARGUMENTS is provided, use itfrontendDetermine the project display name:
Check if the directory already exists:
Use AskUserQuestion to gather all feature selections. Batch questions where possible.
Ask: "Include shadcn/ui component library?" Options:
pnpm dlx shadcn@latest add <component>.Ask: "Include React Router v7 for client-side routing?" Options:
Ask: "Include TanStack Query for API data fetching/caching?" Options:
Ask: "Include Zustand for global state management?" Options:
Ask: "Which font setup?" Options:
Ask: "Backend API port for Vite dev proxy? (proxy /api → localhost:)" Options:
Store all selections for template processing.
Create the frontend directory structure:
mkdir -p <DIR>/public
mkdir -p <DIR>/src/assets
mkdir -p <DIR>/src/components
mkdir -p <DIR>/src/lib
If shadcn/ui selected:
mkdir -p <DIR>/src/components/ui
Read each template file from the skill's templates/ directory and process placeholders. The template directory is located at the same path as this SKILL.md file, under templates/.
| Placeholder | Source |
|---|---|
{{PROJECT_NAME}} | Sanitized project name |
{{FRONTEND_DIR}} | Frontend directory name |
{{API_PORT}} | Backend API port |
{{SHADCN_DEPS}} | shadcn dependency block or empty |
{{ROUTER_DEP}} | React Router dependency line or empty |
{{TANSTACK_DEP}} | TanStack Query dependency line or empty |
{{ZUSTAND_DEP}} | Zustand dependency line or empty |
{{FONT_LINKS}} | Google Fonts link tags or empty |
{{FONT_THEME}} | Font @theme CSS or empty |
{{SHADCN_UTILS_IMPORT}} | Import for cn() or empty |
Process these templates and write to the frontend directory:
package.json ← templates/package.json.template
{{PROJECT_NAME}}, conditional dependency blocks{{SHADCN_DEPS}}: If shadcn selected:
"class-variance-authority": "^0.7",
"clsx": "^2",
"lucide-react": "^0.564",
"tailwind-merge": "^3",
{{ROUTER_DEP}}: If React Router: "react-router": "^7",\n{{TANSTACK_DEP}}: If TanStack Query: "@tanstack/react-query": "^5",\n{{ZUSTAND_DEP}}: If Zustand: "zustand": "^5",\nvite.config.ts ← templates/vite.config.ts.template
{{API_PORT}}tsconfig.json ← templates/tsconfig.json.template (no placeholders)
tsconfig.app.json ← templates/tsconfig.app.json.template (no placeholders)
tsconfig.node.json ← templates/tsconfig.node.json.template (no placeholders)
eslint.config.js ← templates/eslint.config.js.template (no placeholders)
index.html ← templates/index.html.template
{{PROJECT_NAME}}, {{FONT_LINKS}}{{FONT_LINKS}}: If Inter font selected:
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
src/main.tsx ← templates/src/main.tsx.template (no placeholders)
src/App.tsx ← templates/src/App.tsx.template
{{PROJECT_NAME}}src/index.css ← templates/src/index.css.template
{{FONT_THEME}}{{FONT_THEME}}: If Inter:
@theme {
--font-sans: "Inter", sans-serif;
}
If shadcn selected:
templates/src/lib/utils.ts.template (no placeholders)templates/components.json.template
{{FRONTEND_DIR}}Do NOT run pnpm install automatically. Just report what was created.
Display a summary:
React frontend scaffolded in <DIR>/
Stack:
- React 19 + TypeScript (strict)
- Vite 7 + Tailwind CSS 4
- ESLint 10 (flat config)
[- shadcn/ui components]
[- React Router v7]
[- TanStack Query v5]
[- Zustand v5]
Vite proxy: /api → http://localhost:<port>
Next steps:
1. cd <DIR> && pnpm install
2. pnpm dev
[3. pnpm dlx shadcn@latest add button (add shadcn components)]
Files created:
<list all files>