mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-10 23:05:17 -05:00
Split `autogpt_platform/CLAUDE.md` into project-specific files, to make the scope of the instructions clearer. Also, some minor improvements: - Change references to other Markdown files to @file/path.md syntax that Claude recognizes - Update ambiguous/incorrect/outdated instructions - Remove trailing slashes - Fix broken file path references in other docs (including comments)
2.9 KiB
2.9 KiB
CLAUDE.md - Frontend
This file provides guidance to Claude Code when working with the frontend.
Essential Commands
# Install dependencies
pnpm i
# Generate API client from OpenAPI spec
pnpm generate:api
# Start development server
pnpm dev
# Run E2E tests
pnpm test
# Run Storybook for component development
pnpm storybook
# Build production
pnpm build
# Format and lint
pnpm format
# Type checking
pnpm types
Code Style
- Fully capitalize acronyms in symbols, e.g.
graphID,useBackendAPI - Use function declarations (not arrow functions) for components/handlers
Architecture
- Framework: Next.js 15 App Router (client-first approach)
- Data Fetching: Type-safe generated API hooks via Orval + React Query
- State Management: React Query for server state, co-located UI state in components/hooks
- Component Structure: Separate render logic (
.tsx) from business logic (use*.tshooks) - Workflow Builder: Visual graph editor using @xyflow/react
- UI Components: shadcn/ui (Radix UI primitives) with Tailwind CSS styling
- Icons: Phosphor Icons only
- Feature Flags: LaunchDarkly integration
- Error Handling: ErrorCard for render errors, toast for mutations, Sentry for exceptions
- Testing: Playwright for E2E, Storybook for component development
Environment Configuration
.env.default (defaults) → .env (user overrides)
Feature Development
See @CONTRIBUTING.md for complete patterns. Quick reference:
- Pages: Create in
src/app/(platform)/feature-name/page.tsx- Extract component logic into custom hooks grouped by concern, not by component. Each hook should represent a cohesive domain of functionality (e.g., useSearch, useFilters, usePagination) rather than bundling all state into one useComponentState hook.
- Put each hook in its own
.tsfile
- Put each hook in its own
- Put sub-components in local
components/folder - Component props should be
type Props = { ... }(not exported) unless it needs to be used outside the component
- Extract component logic into custom hooks grouped by concern, not by component. Each hook should represent a cohesive domain of functionality (e.g., useSearch, useFilters, usePagination) rather than bundling all state into one useComponentState hook.
- Components: Structure as
ComponentName/ComponentName.tsx+useComponentName.ts+helpers.ts- Use design system components from
src/components/(atoms, molecules, organisms) - Never use
src/components/__legacy__/*
- Use design system components from
- Data fetching: Use generated API hooks from
@/app/api/__generated__/endpoints/- Regenerate with
pnpm generate:api - Pattern:
use{Method}{Version}{OperationName}
- Regenerate with
- Styling: Tailwind CSS only, use design tokens, Phosphor Icons only
- Testing: Add Storybook stories for new components, Playwright for E2E
- Code conventions:
- Use function declarations (not arrow functions) for components/handlers
- Do not use
useCallbackoruseMemounless asked to optimise a given function - Do not type hook returns, let Typescript infer as much as possible
- Never type with
anyunless a variable/attribute can ACTUALLY be of any type