# Coding Conventions **Analysis Date:** 2026-04-10 ## Naming Patterns **Files:** - Vue components: PascalCase — `AppHeader.vue`, `ProjectCard.vue`, `ContactForm.vue` - Pages (Nuxt file-based routing): kebab-case — `about.vue`, `project/[id].vue` - Layouts: kebab-case — `default.vue` - Composables: camelCase with `use` prefix — `useProjects.ts` - Data files: camelCase — `projects.ts`, `faq.ts`, `site.ts`, `techstack.ts`, `testimonials.ts` - Type files: `index.ts` in a typed directory — `shared/types/index.ts` - Server routes: `[name].[method].ts` Nitro convention — `contact.post.ts` - Config files: camelCase — `nuxt.config.ts`, `app.config.ts` **Functions:** - Exported composables: `useX()` — `useProjects()` in `app/composables/useProjects.ts` - Toggle handlers: verb + noun — `toggleLocale()`, `toggleTheme()` - Query predicates: verb + noun — `isActive(path)`, `findById(id)`, `filterByCategory(category)`, `search(query)` - Async handlers: `onX` prefix — `onSubmit(event)` - Event handlers: `defineEventHandler` (Nitro server) — `server/api/contact.post.ts` **Variables:** - Reactive refs: camelCase — `mobileOpen`, `loading` - Computed values: camelCase — `navLinks`, `translatedCategory`, `relatedProjects`, `featuredProjects` - Constants/config exports: camelCase — `siteConfig`, `projects`, `homeFAQs` **Types:** - Interfaces: PascalCase — `Project`, `ProjectButton`, `Technology`, `TechStack`, `SiteConfig`, `FAQ` - Props interfaces: always named `Props` in `