frontend-dev
Standardized frontend development patterns for the Atomic CRM system using React and shadcn/ui.
Install
mkdir -p .claude/skills/frontend-dev && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4867" && unzip -o skill.zip -d .claude/skills/frontend-dev && rm skill.zipInstalls to .claude/skills/frontend-dev
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Coding practices for frontend development in Atomic CRM. Use when creating or modifying React components, forms, list pages, detail views, filters, data fetching, or responsive layouts.Key capabilities
- →Create or modify React components, forms, list pages, or detail views
- →Add or change filters, data fetching, or responsive layouts
- →Register a new resource or reorganize an existing resource folder
- →Import form inputs from @/components/admin/
- →Use ra-core hooks for standard CRUD operations
- →Split form fields into semantic sub-components
How it works
This skill defines conventions for frontend development in Atomic CRM, covering component architecture, resource organization, data fetching with ra-core, and form handling. It specifies where to import components and how to manage data and forms.
Inputs & outputs
When to use frontend-dev
- →Creating new React components for CRM modules
- →Implementing form fields for contacts and leads
- →Fetching data for CRM detail views and lists
About this skill
Frontend Development
Reference for the conventions a frontend change must follow. This is a reference skill, not a step sequence — read the relevant section before writing code, then verify against the checklist at the end. The frontend uses ra-core (react-admin headless) for data fetching, routing, and CRUD logic, with shadcn-admin-kit and shadcn/ui for the UI layer.
When to Use
- Creating or modifying React components, forms, list pages, or detail views.
- Adding or changing filters, data fetching, or responsive (mobile/desktop) layouts.
- Registering a new resource or reorganizing an existing resource folder.
Not for backend/schema work — see Skill({skill: "backend-dev"}).
Not for theming/colors — see Skill({skill: "shadcn-customization"}).
Component architecture
- Import form inputs (
TextInput,SelectInput,ReferenceInput, etc.) from@/components/admin/, not from shadcn/ui directly. The admin layer wraps shadcn with ra-core integration (labels, validation, data binding). - Import pure UI components (
Card,Button,Badge,Sheet, etc.) from@/components/ui/. - Domain configuration (deal stages, note statuses, task types, company sectors) comes from
useConfigurationContext(), never hardcoded.
Resource (CRUD) conventions
Each resource follows this file structure (e.g. contacts/):
ContactList.tsx— list page (desktop + mobile variants)ContactShow.tsx— detail viewContactEdit.tsx/ContactCreate.tsx— form pagesContactInputs.tsx— shared form fields reused between create and editindex.tsx— exports{ list, show, edit, create, recordRepresentation }
Resources are registered in root/CRM.tsx via <Resource name="contacts" {...contacts} />.
Data fetching
- For standard CRUD, use ra-core hooks:
useListContext(),useShowContext(),useGetList(),useGetOne(),useGetIdentity(). - When a query or mutation isn't covered by ra-core hooks, add a custom dataProvider method and call it via
useQuery/useMutationwithuseDataProvider<CrmDataProvider>()(e.g.dataProvider.getActivityLog()inActivityLog.tsx,dataProvider.salesCreate()inSalesCreate.tsx).
Forms
- Forms use
Formfrom ra-core +FormToolbarfor submit/cancel actions. - Ra-core's
Formuses React Hook Form under the hood. UseuseFormContext()for imperative operations (setValue,reset,getValues). - Top-level resource forms use full-page
CreateBase/EditBasewithCard(e.g. contacts), orDialog(e.g. deals). - On mobile, inline/sub-resource forms use
CreateSheet/EditSheetfrommisc/(e.g. notes, tasks). - Split form fields into semantic sub-components (e.g.
ContactIdentityInputs,ContactPositionInputs).
Filters
- Use
ToggleFilterButton/ActiveFilterButtoncomponents for filter UI. - Filters apply immediately, no "apply" button.
Responsive design
- Major pages have desktop and mobile variants. Use
useIsMobile()to branch. - Desktop: 2-column grid layouts. Mobile: single column with
MobileHeader/MobileContent. - Mobile lists use
InfiniteListBasefor scroll pagination.
Red Flags
- Importing
TextInput/SelectInput/etc. directly from@/components/ui/instead of@/components/admin/. - Hardcoding deal stages, note statuses, task types, or sectors instead of reading
useConfigurationContext(). - A new resource folder missing one of the standard files, or not registered in
root/CRM.tsx. - A bespoke fetch/axios call where a ra-core hook or a dataProvider method belongs.
- A new top-level page with only a desktop layout and no
useIsMobile()branch. - A form field component growing past the typical size instead of being split into semantic sub-components.
Verification
- Inputs imported from
@/components/admin/, pure UI from@/components/ui/. - Domain options come from
useConfigurationContext()— nothing hardcoded. - New resources follow the file structure and are registered in
root/CRM.tsx. - Data access uses ra-core hooks, or a dataProvider method via react-query.
- Pages touching major UI have both desktop and mobile variants.
- If the change touches UI/forms/filters/interactions, an e2e test exists (see
Skill({skill: "e2e-conventions"})).
When not to use it
- →When performing backend or schema work
- →When working on theming or colors
Limitations
- →This skill is not for backend or schema work.
- →This skill is not for theming or colors.
- →Domain configuration must come from useConfigurationContext(), not hardcoded.
How it compares
This skill provides specific architectural and coding standards for Atomic CRM frontend development, guiding developers to build features consistently within the existing framework rather than using generic React development practices.
Compared to similar skills
frontend-dev side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| frontend-dev (this skill) | 1 | 6mo | No flags | Intermediate |
| zustand | 113 | 2mo | No flags | Intermediate |
| web-artifacts-builder | 49 | 3mo | Review | Intermediate |
| landing-page-guide-v2 | 48 | 8mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by marmelab
View all by marmelab →You might also like
zustand
lobehub
Zustand state management guide. Use when working with store code (src/store/**), implementing actions, managing state, or creating slices. Triggers on Zustand store development, state management questions, or action implementation.
web-artifacts-builder
anthropics
Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
landing-page-guide-v2
bear2u
Create distinctive, high-converting landing pages that combine proven conversion elements with exceptional design quality. Build beautiful, memorable landing pages using Next.js 14+ and ShadCN UI that avoid generic AI aesthetics while following the 11 essential elements framework.
react
lobehub
React component development guide. Use when working with React components (.tsx files), creating UI, using @lobehub/ui components, implementing routing, or building frontend features. Triggers on React component creation, modification, layout implementation, or navigation tasks.
frontend-prompt-generator
gharam1234
Generate structured prompts for frontend development tasks following established patterns. Use when the user requests prompts for wireframes, UI implementation, data binding, or routing functionality in React/Next.js projects with specific formatting requirements (Cursor rules, file paths, test-driven development).
react-dev
davila7
This skill should be used when building React components with TypeScript, typing hooks, handling events, or when React TypeScript, React 19, Server Components are mentioned. Covers type-safe patterns for React 18-19 including generic components, proper event typing, and routing integration (TanStack Router, React Router).