General Principles
- Consistency: Follow existing patterns in the codebase
- Readability: Write code that’s easy to understand
- Type Safety: Leverage TypeScript’s type system
- Performance: Optimize for user experience
- Accessibility: Build inclusive interfaces
TypeScript Guidelines
Strict Mode
CV Builder uses TypeScript strict mode. All type checks must pass:Type Definitions
Use explicit types for function parameters and return values:Avoid any Type
any, add a comment explaining why.
Type Imports
Naming Conventions
Files and Directories
-
Components: PascalCase with
.tsxextensionPersonalDetailsForm.tsxCVPreview.tsxTemplateCard.tsx
-
Utilities: camelCase with
.tsextensioncvService.tsauthValidation.tsutils.ts
-
Hooks: camelCase starting with
useuseCVDraft.tsuseCVVersions.tsuseScrollSpy.ts
-
Directories: kebab-case or lowercase
components/forms/lib/backend/app/editor/
Variables and Functions
Components
Constants
Boolean Variables
React Patterns
Component Structure
Props Destructuring
Event Handlers
Conditional Rendering
Tailwind CSS Usage
Class Organization
Order classes logically:Component Variants with CVA
Use Class Variance Authority for component variants:Utility Function for Class Names
Dark Mode Support
Always Include Dark Mode Styles
Color Palette Guidelines
Test Dark Mode
Always test your changes in both light and dark mode:Form Validation with Zod
Schema Definition
Form Integration
ESLint Configuration
CV Builder uses Next.js ESLint configuration:Run Linting
Common Rules
- No unused variables
- No console.log in production code (use console.error for errors)
- Prefer const over let
- Use template literals instead of string concatenation
Git Commit Messages
Conventional Commits
Follow the Conventional Commits specification:Commit Types
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, missing semicolons, etc.)refactor:- Code refactoringperf:- Performance improvementstest:- Adding or updating testschore:- Maintenance tasks, dependency updates
Examples
Commit Message Body
For complex changes, add a body:Code Comments
When to Comment
JSDoc for Public APIs
Performance Best Practices
Debounce Heavy Operations
Lazy Load Components
Optimize Images
Accessibility
Semantic HTML
ARIA Labels
Keyboard Navigation
Summary
Key takeaways:- TypeScript strict mode - No any types, explicit function signatures
- Naming conventions - PascalCase components, camelCase functions
- Tailwind CSS - Organized classes with dark mode support
- Conventional commits - Clear, descriptive commit messages
- Accessibility - Semantic HTML, ARIA labels, keyboard navigation
Questions about code style? Check the existing codebase for examples or open an issue on GitHub!