Skip to main content

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
  • Prefix types with T and interfaces with I (when helpful)
    • ✅ TStats, TResponseData, IApiConfig
  • Enum names should be PascalCase, values in UPPER_SNAKE_CASE

Constants

  • Use UPPER_SNAKE_CASE for constant values
    • ✅ API_TIMEOUT, MAX_RETRIES, CONTAINER_ID
  • Use PascalCase for constant references/objects
    • ✅ ErrorCodes, Config

Database Models

  • Use PascalCase singular form for model names
    • ✅ Survey, Response, Document
  • Use camelCase for field names
    • ✅ createdAt, workspaceId, isSpam
  • Use snake_case for database column names
    • ✅ created_at, updated_at

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.