Files and Directories
General Files
- Use lowercase and hyphen-separated names (kebab-case) for files and directories
- ✅
user-profile.ts
- ❌
UserProfile.ts
- Group related files in directories with descriptive plural names
- ✅
components
, services
, utils
- ❌
component
, util
Special Files
- Configuration files should follow framework conventions
- ✅
next.config.mjs
, tailwind.config.js
- Test files should mirror source files with
.test
or .spec
suffix
- ✅
user-service.test.ts
for user-service.ts
- Database migration files should include timestamp and description
- ✅
20241017124431_add_documents_and_insights.sql
Code Symbols
Variables and Functions
- Use camelCase for variables and function names
- ✅
fetchUserData
, isLoading
, handleSubmit
- ❌
FetchUserData
, is_loading
- Boolean variables should use is/has/should prefix
- ✅
isVerifyEmailEnabled
, hasPermission
, shouldDisplay
- Async functions should use verb prefixes suggesting async
- ✅
fetchData
, createUser
, updateProfile
Classes and Types
- Use PascalCase for:
- Classes:
Config
, Client
, ResponseAPI
- Interfaces:
TSurveySummaryResponse
, ApiConfig
- Type aliases:
TResponseData
, TJsTrackProperties
- Prefix types with T and interfaces with I (when helpful)
- ✅
TStats
, TResponseData
, IApiConfig
- Enum names should be PascalCase, values in UPPER_SNAKE_CASE
enum ProjectFeatureKeys {
FREE = "free",
STARTUP = "startup",
SCALE = "scale"
}
Constants
- Use UPPER_SNAKE_CASE for constant values
- ✅
API_TIMEOUT
, MAX_RETRIES
, CONTAINER_ID
- Use PascalCase for constant references/objects
Database Models
- Use PascalCase singular form for model names
- ✅
Survey
, Response
, Document
- Use camelCase for field names
- ✅
createdAt
, environmentId
, isSpam
- Use snake_case for database column names
Components
- Use PascalCase for React components and their files
- ✅
SurveyCard.tsx
, UserProfile.tsx
- Component-specific types should be prefixed with component name
- ✅
SurveyCardProps
, UserProfileData
API and Endpoints
- Use kebab-case for API endpoints
- ✅
/api/user-profile
, /api/survey-responses
- Use camelCase for query parameters
- ✅
/api/surveys?pageSize=10&sortOrder=desc
Schema and Validation
- Prefix Zod schemas with Z
- ✅
ZSurvey
, ZDocument
, ZInsight
- Use descriptive names for validation schemas
- ✅
ZUpdateDocumentAction
, ZGenerateDocumentObjectSchema
Error Handling
- Suffix error classes with “Error”
- ✅
ValidationError
, DatabaseError
, AuthenticationError
- Use descriptive names for error types
- ✅
SURVEY_NOT_FOUND
, INVALID_RESPONSE
Best Practices
- Keep names descriptive but concise
- Be consistent within each context
- Follow existing patterns in the codebase
- Use full words instead of abbreviations unless widely accepted
- ✅
configuration
vs ❌ config
(except in standard terms)
- ✅
id
, url
(standard abbreviations are acceptable)
By following these conventions, we maintain consistency and clarity across the codebase, making it more maintainable and easier to understand for all team members.
Responses are generated using AI and may contain mistakes.