mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-06 21:54:01 -05:00
* feat(cursorrules): updated cursorrules and claude md file * added rules for adding new integrations
57 lines
2.0 KiB
Plaintext
57 lines
2.0 KiB
Plaintext
---
|
|
description: Core architecture principles for the Sim app
|
|
globs: ["apps/sim/**"]
|
|
---
|
|
|
|
# Sim App Architecture
|
|
|
|
## Core Principles
|
|
1. **Single Responsibility**: Each component, hook, store has one clear purpose
|
|
2. **Composition Over Complexity**: Break down complex logic into smaller pieces
|
|
3. **Type Safety First**: TypeScript interfaces for all props, state, return types
|
|
4. **Predictable State**: Zustand for global state, useState for UI-only concerns
|
|
|
|
## Root-Level Structure
|
|
|
|
```
|
|
apps/sim/
|
|
├── app/ # Next.js app router (pages, API routes)
|
|
├── blocks/ # Block definitions and registry
|
|
├── components/ # Shared UI (emcn/, ui/)
|
|
├── executor/ # Workflow execution engine
|
|
├── hooks/ # Shared hooks (queries/, selectors/)
|
|
├── lib/ # App-wide utilities
|
|
├── providers/ # LLM provider integrations
|
|
├── stores/ # Zustand stores
|
|
├── tools/ # Tool definitions
|
|
└── triggers/ # Trigger definitions
|
|
```
|
|
|
|
## Feature Organization
|
|
|
|
Features live under `app/workspace/[workspaceId]/`:
|
|
|
|
```
|
|
feature/
|
|
├── components/ # Feature components
|
|
├── hooks/ # Feature-scoped hooks
|
|
├── utils/ # Feature-scoped utilities (2+ consumers)
|
|
├── feature.tsx # Main component
|
|
└── page.tsx # Next.js page entry
|
|
```
|
|
|
|
## Naming Conventions
|
|
- **Components**: PascalCase (`WorkflowList`)
|
|
- **Hooks**: `use` prefix (`useWorkflowOperations`)
|
|
- **Files**: kebab-case (`workflow-list.tsx`)
|
|
- **Stores**: `stores/feature/store.ts`
|
|
- **Constants**: SCREAMING_SNAKE_CASE
|
|
- **Interfaces**: PascalCase with suffix (`WorkflowListProps`)
|
|
|
|
## Utils Rules
|
|
|
|
- **Never create `utils.ts` for single consumer** - inline it
|
|
- **Create `utils.ts` when** 2+ files need the same helper
|
|
- **Check existing sources** before duplicating (`lib/` has many utilities)
|
|
- **Location**: `lib/` (app-wide) → `feature/utils/` (feature-scoped) → inline (single-use)
|