@sprouted/create-vibes
Version:
Create a new Vibes monorepo
69 lines (59 loc) • 1.8 kB
Markdown
# Code Patterns in Vibes
## Feature Structure Pattern
```
features/[feature-name]/
├── ui/ # User interface layer
├── api/ # HTTP/GraphQL endpoints
├── logic/ # Business logic and services
├── data/ # Data models and repositories
├── tests/ # Feature-specific tests
└── index.ts # Public exports
```
## Common Patterns
### 1. Creating a New Feature
```typescript
// features/[feature-name]/index.ts
export * from './ui';
export * from './api';
export * from './logic';
export * from './data';
```
### 2. API Route Pattern
```typescript
// features/[feature-name]/api/routes/[resource].ts
export const routes = {
'GET /api/[resource]': handlers.list,
'POST /api/[resource]': handlers.create,
'PUT /api/[resource]/:id': handlers.update,
'DELETE /api/[resource]/:id': handlers.delete
};
```
### 3. Service Pattern
```typescript
// features/[feature-name]/logic/services/[Resource]Service.ts
export class ResourceService {
constructor(private repo: ResourceRepository) {}
async create(data: CreateResourceDto): Promise<Resource> {
// Business logic here
return this.repo.save(data);
}
}
```
### 4. Component Pattern
```typescript
// features/[feature-name]/ui/components/[Component].tsx
export function Component({ prop }: ComponentProps) {
const { data, loading } = useResource();
if (loading) return <Loading />;
return (
<div>
{/* Component JSX */}
</div>
);
}
```
## AI Assistant Tips
- Features are self-contained - all related code lives together
- Use the `index.ts` barrel exports to understand what a feature exposes
- Shared code should only be truly generic utilities
- Each layer has a specific responsibility - don't mix concerns