# Coding Conventions **Analysis Date:** 2026-04-07 ## Naming Patterns **Files:** - Vue components: PascalCase (e.g., `AppHeader.vue`, `ProjectCard.vue`) - Composables: camelCase with `use` prefix (e.g., `useTheme.ts`, `useProjects.ts`) - Utility/config files: camelCase (e.g., `site.ts`, `techstack.ts`) - Data files: camelCase (e.g., `testimonials.ts`, `faq.ts`) - Type definitions: camelCase in `types/index.ts` **Functions:** - All functions use camelCase (e.g., `toggleTheme`, `openGallery`, `getImageUrl`) - Composables are named with `use` prefix: `useTheme()`, `useGallery()`, `useSeo()` - Getter functions use `get` prefix: `getTheme()`, `getImageUrl()` - Boolean functions/computed use `is`/`has` prefix: `isDark`, `hasNext`, `isOpen` - Handler functions use verb + `Handler`: `toggleTheme`, `openGallery`, `closeGallery` **Variables:** - Refs and computed properties: camelCase (e.g., `isDark`, `currentIndex`, `isOpen`) - Interfaces and types: PascalCase (e.g., `Props`, `SeoOptions`, `Theme`) - Constants: UPPER_SNAKE_CASE for config constants (not extensively used in codebase) - Private/module state: camelCase prefixed with `_` if truly private **Types:** - Type aliases: PascalCase (e.g., `type Theme = 'light' | 'dark'`) - Interface names: PascalCase (e.g., `interface Props`, `interface SeoOptions`) - Props interfaces: Always named `Props` (e.g., in ` ``` ## Type Safety **TypeScript Configuration:** - Version: ~5.8.0 - DOM-focused (`tsconfig.dom.json` from @vue/tsconfig) - Path alias `@/*` points to `./src/*` - Type checking enabled in build: `npm run type-check` runs `vue-tsc --build` **Type Usage Patterns:** - All component Props use interface definitions - Composable return values typed explicitly - Function parameters and return types annotated - Type imports use `import type` syntax - Avoid `any` type; use proper interfaces/generics ## Vue 3 Specific **Composition API:** - `