Run checks
For each file in scope:
Frontend Checks (*.tsx, *.ts in frontend/)
Anti-pattern: Frontend Pagination
Search for patterns like:
- .slice(startIndex, endIndex) // on API response data
- data.slice(page * pageSize // pseudo-pagination
- useState.*page.*setPage // local pagination state with no API call
Anti-pattern: Frontend Sorting
Search for patterns like:
- .sort((a, b) => // sorting API response
- [...data].sort( // copying and sorting
- useMemo.*sort // memoized sort on full data
Anti-pattern: Frontend Filtering
Search for patterns like:
- .filter(item => // on API response data
- data.filter( // filtering full dataset
- useMemo.*filter // memoized filter on API data
Required: Loading States
Check for:
- isLoading / isPending usage
- Skeleton / Spinner components
- Loading fallback UI
Required: React Query
Check for:
- useQuery / useMutation usage
- No direct fetch() in components
Backend Checks (*.py in backend/)
Anti-pattern: Missing LIMIT
Search for patterns like:
- .all() without .limit()
- SELECT * FROM without LIMIT
- query.all() on unbounded queries
Anti-pattern: Missing Pagination Params
Check router functions for:
- List endpoints missing page/page_size params
- Missing skip/limit in queries
Required: Structured Logging
Check service classes for:
- logger.info/warning/error usage
- Key fields: task_id, duration, retry_count