Automated Formatting
All code is automatically formatted with Prettier. Git hooks enforce formatting before commits.Prettier Configuration
Running Prettier
ESLint Configuration
Brainbox uses ESLint with TypeScript support and import ordering rules.Core Rules
- TypeScript ESLint: Recommended rules with strict typing
- Import Plugin: Enforces consistent import ordering
- Prettier Integration: Disables conflicting ESLint rules
Import Ordering
Imports are automatically ordered in the following groups:- Built-in Node.js modules
- External dependencies
- Internal
@brainbox/*packages - Parent, sibling, and index imports
Running ESLint
ESLint errors will prevent commits via git hooks. Fix all linting issues before committing.
TypeScript Guidelines
Strict Mode
Strict mode is enabled across all packages. This includes:- No implicit
anytypes - Strict null checks
- Strict function types
- No unused locals or parameters (unless prefixed with
_)
Type Organization
Shared types belong in@brainbox/core:
Runtime Validation
Use Zod for runtime validation and schema definition:Type-Safe Queries
Use Kysely for type-safe SQL queries:React Guidelines
Component Style
Use functional components with hooks:Avoid Unnecessary Effects
Don’t useuseEffect for transformations or calculations. Derive state in render:
Bad:
Use Effects Only for External Systems
UseuseEffect only for synchronizing with external systems:
Server State Management
Use TanStack Query for server state:Accessibility
Follow WAI-ARIA guidelines:- Use semantic HTML elements
- Add ARIA labels for icon-only buttons
- Ensure keyboard navigation works
- Maintain visible focus indicators
CSS and Styling
TailwindCSS v4
All styling uses TailwindCSS v4:Design Principles
- Flat design: Minimal shadows and gradients
- No hover scale effects: Avoid transforms on hover
- Consistent spacing: Use Tailwind spacing scale
- Date format:
DD MMM YYYY(e.g., “03 Mar 2026”) - Time format:
H:MM AM/PM(e.g., “9:45 AM”)
Component Library
Use Radix UI primitives from@brainbox/ui:
General Principles
No Unnecessary Comments
Write self-documenting code. Avoid comments that explain what code does: Bad:Simple, Focused Solutions
- Prefer simple implementations over clever ones
- Keep functions small and focused
- Avoid premature abstraction
- Read existing code before modifying
Prefer Editing Over Creating
Always prefer editing existing files over creating new ones. Maintain consistency with existing patterns.Code Review Checklist
Before submitting a PR, verify:- All TypeScript strict mode checks pass
- ESLint shows no errors
- Prettier formatting is applied
- No unused imports or variables
- Imports are properly ordered
- Tests are included for new functionality
- Accessibility requirements are met
- Code follows existing patterns in the codebase