frontend-dev-guidelines — Claude Code skill
Sets strict React and TypeScript conventions for feature structure, Suspense data fetching, MUI styling, and performance-focused reviews.
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a claude-codeWhat frontend-dev-guidelines does
This skill guides an agent while it creates components or pages, adds features, works with data, configures routing, styles interfaces, or refactors frontend code. Before implementation, it can assess a proposal with the FFCI score, weighing architectural fit, complexity, rendering risk, reuse, and maintenance cost.
The conventions target React, TypeScript, TanStack Query, and TanStack Router. Data fetching uses useSuspenseQuery; heavy routes and feature entry components are lazy loaded; domain code belongs in features/, while shared primitives go in components/. It also calls for explicit types, import type, a feature API layer, and Suspense boundaries.
This is a strict rule set: it rejects any, manual spinners, and cross-feature coupling. The examples use MUI and TanStack, but existing project requirements take priority, so the skill should not force a stack migration.
What it helps with
- assess a frontend feature with FFCI
- organize a new feature under
features/ - move data loading to
useSuspenseQuery - lazy load routes and heavy components
- review React code against TypeScript and MUI rules
Example prompts for the agent
- Use `frontend-dev-guidelines` to add a profile page within the existing project structure.
- Apply `frontend-dev-guidelines` to this component and remove manual data loading.
- Assess this feature with FFCI, then split its API, hooks, and types under `features/`.
How to install frontend-dev-guidelines
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a claude-code2Manually: put the files in place
~/.claude/skills/frontend-dev-guidelines/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/frontend-dev-guidelines/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a codex2Manually: put the files in place
.agents/skills/frontend-dev-guidelines/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a cursor2Manually: put the files in place
.cursor/skills/frontend-dev-guidelines/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sickn33/agentic-awesome-skills frontend-dev-guidelines2Manually: put the files in place
.github/skills/frontend-dev-guidelines/SKILL.md1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a gemini-cli2Platform CLI
gemini skills install https://github.com/sickn33/agentic-awesome-skills --path skills/frontend-dev-guidelinesManually: put the files in place
.devin/skills/frontend-dev-guidelines/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set80
The whole set →Similar
Questions about frontend-dev-guidelines
How do I install frontend-dev-guidelines in Claude Code?
Run npx skills add sickn33/agentic-awesome-skills --skill frontend-dev-guidelines -a claude-code. The installed skill file is at ~/.claude/skills/frontend-dev-guidelines/SKILL.md.
What does frontend-dev-guidelines do?
It gives an agent conventions for React applications: strict TypeScript, Suspense-first data fetching, feature-based code organization, and performance safeguards. It also uses FFCI to assess implementation choices.
What data-fetching approach does the skill require?
Its primary data hook is useSuspenseQuery. It forbids isLoading conditionals, early-return spinners, and fetch logic inside components.
Source text
SKILL.md · MIT
---
name: frontend-dev-guidelines
description: "You are a senior frontend engineer operating under strict architectural and performance standards. Use when creating components or pages, adding new features, or fetching or mutating data."
risk: critical
source: community
date_added: "2026-02-27"
---
# Frontend Development Guidelines
**(React · TypeScript · Suspense-oriented examples)**
You are a **senior frontend engineer** operating under strict architectural and performance standards.
Your goal is to build **scalable, predictable, and maintainable React applications** using:
* Suspense-first data fetching
* Feature-based code organization
* Strict TypeScript discipline
* Performance-safe defaults
These are conventions for an illustrative MUI/TanStack application. Existing project requirements and user scope take precedence; do not impose a stack migration.
---
## 1. Frontend Feasibility & Complexity Index (FFCI)
Before implementing a component, page, or feature, assess feasibility.
### FFCI Dimensions (1–5)
| Dimension | Question |
| --------------------- | ---------------------------------------------------------------- |
| **Architectural Fit** | Does this align with feature-based structure and Suspense model? |
| **Complexity Load** | How complex is state, data, and interaction logic? |
| **Performance Safety** | Does it introduce rendering, bundle, or CLS risk? |
| **Reusability** | Can this be reused without modification? |
| **Maintenance Cost** | How hard will this be to reason about in 6 months? |
### Score Formula
```
FFCI = (Architectural Fit + Reusability + Performance) − (Complexity + Maintenance Cost)
```
**Range:** `-7 → +13`
### Interpretation
| FFCI | Meaning | Action |
| --------- | ---------- | ----------------- |
| **10–13** | Excellent | Proceed |
| **6–9** | Acceptable | Proceed with care |
| **3–5** | Risky | Simplify or split |
| **≤ 2** | Poor | Redesign |
---
## 2. Core Architectural Doctrine (Non-Negotiable)
### 1. Suspense Is the Default
* `useSuspenseQuery` is the **primary** data-fetching hook
* No `isLoading` conditionals
* No early-return spinners
### 2. Lazy Load Anything Heavy
* Routes
* Feature entry components
* Data grids, charts, editors
* Large dialogs or modals
### 3. Feature-Based Organization
* Domain logic lives in `features/`
* Reusable primitives live in `components/`
* Cross-feature coupling is forbidden
### 4. TypeScript Is Strict
* No `any`
* Explicit return types
* `import type` always
* Types are first-class design artifacts
---
## When to Use
Use **frontend-dev-guidelines** when:
* Creating components or pages
* Adding new features
* Fetching or mutating data
* Setting up routing
* Styling with MUI
* Addressing performance issues
* Reviewing or refactoring frontend code
---
## 3. Quick Start Checklists
### New Component Checklist
* [ ] `React.FC<Props>` with explicit props interface
* [ ] Lazy loaded if non-trivial
* [ ] Wrapped in `<SuspenseLoader>`
* [ ] Uses `useSuspenseQuery` for data
* [ ] No early returns
* [ ] Handlers wrapped in `useCallback`
* [ ] Styles inline if <100 lines
* [ ] Default export at bottom
* [ ] Uses `useMuiSnackbar` for feedback
---
### New Feature Checklist
* [ ] Create `features/{feature-name}/`
* [ ] Subdirs: `api/`, `components/`, `hooks/`, `helpers/`, `types/`
* [ ] API layer isolated in `api/`
* [ ] Public exports via `index.ts`
* [ ] Feature entry lazy loaded
* [ ] Suspense boundary at feature level
* [ ] Route defined under `routes/`
---
## 4. Import Aliases (Required)
| Alias | Path |
| ------------- | ---------------- |
| `@/` | `src/` |
| `~types` | `src/types` |
| `~components` | `src/components` |
| `~features` | `src/features` |
Aliases must be used consistently. Relative imports beyond one level are discouraged.
---
## 5. Component Standards
### Required Structure Order
1. Types / Props
2. Hooks
3. Derived values (`useMemo`)
4. Handlers (`useCallback`)
5. Render
6. Default export
### Lazy Loading Pattern
```ts
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));
```
Always wrapped in `<SuspenseLoader>`.
---
## 6. Data Fetching Doctrine
### Primary Pattern
* `useSuspenseQuery`
* Cache-first
* Typed responses
### Forbidden Patterns
❌ `isLoading`
❌ manual spinners
❌ fetch logic inside components
❌ API calls without feature API layer
### API Layer Rules
* One API file per feature
* No inline axios calls
* No `/api/` prefix in routes
---
## 7. Routing Standards (TanStack Router)
* Folder-based routing only
* Lazy load route components
* Breadcrumb metadata via loaders
```ts
export const Route = createFileRoute('/my-route/')({
component: MyPage,
loader: () => ({ crumb: 'My Route' }),
});
```
---
## 8. Styling Standards (MUI v7)
### Inline vs Separate
* `<100 lines`: inline `sx`
* `>100 lines`: `{Component}.styles.ts`
### Grid Syntax (v7 Only)
```tsx
<Grid size={{ xs: 12, md: 6 }} /> // ✅
<Grid xs={12} md={6} /> // ❌
```
Theme access must always be type-safe.
---
## 9. Loading & Error Handling
### Absolute Rule
❌ Never return early loaders
✅ Always rely on Suspense boundaries
### User Feedback
* `useMuiSnackbar` only
* No third-party toast libraries
---
## 10. Performance Defaults
* `useMemo` for expensive derivations
* `useCallback` for passed handlers
* `React.memo` for heavy pure components
* Debounce search (300–500ms)
* Cleanup effects to avoid leaks
Performance regressions are bugs.
---
## 11. TypeScript Standards
* Strict mode enabled
* No implicit `any`
* Explicit return types
* JSDoc on public interfaces
* Types colocated with feature
---
## 12. Canonical File Structure
```
src/
features/
my-feature/
api/
components/
hooks/
helpers/
types/
index.ts
components/
SuspenseLoader/
CustomAppBar/
routes/
my-route/
index.tsx
```
---
## 13. Canonical Component Template
```ts
import React, { useState, useCallback } from 'react';
import { Box, Paper } from '@mui/material';
import { useSuspenseQuery } from '@tanstack/react-query';
import { featureApi } from '../api/featureApi';
import type { FeatureData } from '~types/feature';
interface MyComponentProps {
id: number;
onAction?: () => void;
}
export const MyComponent: React.FC<MyComponentProps> = ({ id, onAction }) => {
const [state, setState] = useState('');
const { data } = useSuspenseQuery<FeatureData>({
queryKey: ['feature', id],
queryFn: () => featureApi.getFeature(id),
});
const handleAction = useCallback(() => {
setState('updated');
onAction?.();
}, [onAction]);
return (
<Box sx={{ p: 2 }}>
<Paper sx={{ p: 3 }}>
{/* Content */}
</Paper>
</Box>
);
};
export default MyComponent;
```
---
## 14. Anti-Patterns (Immediate Rejection)
❌ Early loading returns
❌ Feature logic in `components/`
❌ Shared state via prop drilling instead of hooks
❌ Inline API calls
❌ Untyped responses
❌ Multiple responsibilities in one component
---
## 15. Integration With Other Skills
* **frontend-design** → Visual systems & aesthetics
* **page-cro** → Layout hierarchy & conversion logic
* **analytics-tracking** → Event instrumentation
* **backend-dev-guidelines** → API contract alignment
* **error-tracking** → Runtime observability
---
## 16. Operator Validation Checklist
Before finalizing code:
* [ ] FFCI ≥ 6
* [ ] Suspense used correctly
* [ ] Feature boundaries respected
* [ ] No early returns
* [ ] Types explicit and correct
* [ ] Lazy loading applied
* [ ] Performance safe
---
## 17. Skill Status
**Status:** Stable, opinionated, and enforceable
**Intended Use:** Production React codebases with long-term maintenance horizons
### When to Use
This skill is applicable to execute the workflow or actions described in the overview.
## Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
## Application prerequisites and limits
SuspenseLoader, LoadingOverlay, useMuiSnackbar, useAuth and apiClient are project-specific examples, not bundled implementations. Provide or adapt them before use. FFCI is an advisory heuristic, not a validated feasibility/performance gate. Suspense does not itself prevent layout shift; reserve matching fallback space. Regular useQuery and early returns are valid when hooks are unconditional and loading/error/empty states are handled. Profile memoization and lazy boundaries rather than applying them mechanically. Server authorization and runtime response validation remain required; TypeScript does not validate network data.
© sickn33 · MIT · sickn33/agentic-awesome-skills