2026-03-29 19:05:02 +02:00
# AGENTS.md - Developer Guidelines for Craze-Data-check
2026-04-24 12:20:14 +02:00
## Ruflo Standard Operating Procedure (SOP)
**MANDATORY: Follow these steps for every user instruction.**
1. **Retrieve (Semantic Memory)** : Before starting, run `ruflo memory search -q "<task description>"` to find relevant historical patterns or previous solutions.
2. **Verify (Security)** : Use `ruflo security defend -i "<user instruction>"` to ensure the instruction is safe and follows security protocols.
3. **Execute (Agent Swarm)** : For complex tasks (refactors, multi-file changes), consider spawning specialized agents with `ruflo agent spawn -t <type>` .
4. **Version Control** : Use `agentic-jujutsu` for managing concurrent changes or if a lock-free approach is needed.
5. **Record (Learning)** : After completion, record the outcome with `ruflo memory store --key "<task_id>" --value "<outcome_details>"` to improve future performance.
---
2026-03-29 19:05:02 +02:00
## Build, Lint, and Test Commands
### Development
```bash
npm run dev # Start dev server on port 3000
npm run build # Production build
npm run preview # Preview production build
npm run clean # Remove dist folder
```
### Linting & Type Checking
```bash
npm run lint # TypeScript type check only (tsc --noEmit)
```
2026-04-09 09:13:18 +02:00
Note: No test framework configured. To add tests, install Vitest or Jest.
2026-03-29 19:05:02 +02:00
---
## Code Style Guidelines
### General Principles
- Use TypeScript for all new code
- Prefer functional components with hooks over class components
- Keep components focused and modular
- Use meaningful variable and function names
2026-04-09 09:13:18 +02:00
### Imports (order top to bottom)
1. React (`react` )
2026-03-29 19:05:02 +02:00
2. External libraries (`lucide-react` , `xlsx` , etc.)
3. Internal components (`./components/...` )
4. Internal lib/utils (`./lib/...` )
5. Types (`./types` )
```typescript
import React , { useState , useMemo } from 'react' ;
import { Search , Filter , Edit2 } from 'lucide-react' ;
import { ExcelRow , COLUMNS } from '../types' ;
import { cn } from '../lib/utils' ;
```
### TypeScript Conventions
- Use explicit types for props and function parameters
- Use `any` sparingly; prefer union types or interfaces
- Define column indices in a centralized `COLUMNS` object (see `src/types.ts` )
```typescript
interface ProductDescriptionsProps {
data : ExcelRow [];
onEdit : ( index : number ) => void ;
}
export const COLUMNS = {
ARTICLE_NO : 0 ,
ARTICLE_NAME : 2 ,
LINE : 7 ,
};
```
### Naming Conventions
| Element | Convention | Example |
|---------|------------|---------|
| Components | PascalCase | `ProductDescriptions` , `MatrixView` |
| Functions | camelCase | `handleFileUpload` , `formatCellValue` |
| Variables | camelCase | `activeModule` , `paginatedData` |
| Constants | UPPER_SNAKE_CASE | `ARTICLE_NO` , `MAX_UPLOAD_SIZE` |
| Interfaces | PascalCase | `AppState` , `ExcelRow` |
| Types | PascalCase | `TabType` , `SortDirection` |
### React Patterns
- Destructure props in function signature
- Use `useMemo` for expensive computations
- Use `useCallback` for event handlers passed to child components
- Keep `useState` calls at the top of component
### Error Handling
- Use TypeScript's type system for runtime safety
- Use optional chaining (`?.` ) and nullish coalescing (`??` )
- Validate file uploads with proper type checks
### UI/Styling
- Use Tailwind CSS for all styling
- Use `cn()` utility from `lib/utils` for conditional classes
- Follow existing color scheme (slate, blue, green, red for status)
- Use `lucide-react` for icons
```typescript
2026-04-09 09:13:18 +02:00
< button className = { cn ( "px-4 py-2 rounded-md" , isActive ? "bg-blue-600" : "bg-slate-800" )}>
2026-03-29 19:05:02 +02:00
```
### File Organization
```
src/
├── components/ # React components
2026-04-09 09:13:18 +02:00
├── lib/ # Utilities (utils.ts, auth.ts, supabase.ts)
├── services/ # External API integrations (gemini.ts, anthropic.ts)
├── types.ts # TypeScript types and constants
├── App.tsx # Main application
└── main.tsx # Entry point
2026-03-29 19:05:02 +02:00
```
### Data Processing
2026-04-09 09:13:18 +02:00
- Handle both string and number types when processing Excel data
2026-03-29 19:05:02 +02:00
- Use centralized column index constants
- Format numbers consistently (2 decimal places for prices/weights)
2026-04-09 09:13:18 +02:00
- Handle Excel date serial numbers properly
2026-03-29 19:05:02 +02:00
```typescript
// Handle date columns from Excel
2026-04-09 09:13:18 +02:00
if ( typeof val === 'number' && val >= 25569 && val <= 60000 ) {
const excelEpoch = new Date ( 1899 , 11 , 30 );
return new Date ( excelEpoch . getTime () + val * 86400000 ). toLocaleDateString ( 'en-GB' );
2026-03-29 19:05:02 +02:00
}
```
### Git Workflow
- Make small, focused commits
- Write clear commit messages describing what changed
- Push to main to trigger Vercel deployment automatically
### Environment Variables
- Use `.env` file for local development
- Never commit secrets - use Vercel dashboard for production env vars
2026-04-09 09:13:18 +02:00
Required: `VITE_SUPABASE_URL` , `VITE_SUPABASE_ANON_KEY` , `VITE_GEMINI_API_KEY` , `VITE_ANTHROPIC_API_KEY`