skills/dev-skills/angular-developer/references/naming-conventions.md
This skill enforces Angular naming conventions for components, services, directives, pipes, and models. While it promotes the modern "Intent over Role" philosophy introduced in Angular v20, it must respect existing project configurations first.
angular.json configuration, and ESLint rules. Do not force suffixless naming on projects that rely on standard suffixes..component.ts, .service.ts, or .directive.ts. Corresponding TypeScript classes drop suffixes like Component, Service, or Directive.-data, -store, -api, or -formatter).core/, features/, shared/) and IDE capabilities to identify the technical role of files, rather than encoding that context within the file name..model.ts suffix to clearly declare type contracts.product-list.ts).product-list.ts contains class ProductList).product-list.tsproduct-list.htmlproduct-list.css.spec.ts suffix (e.g., product-list.spec.ts for product-list.ts).Houses singleton services, global state, and system-wide models.
auth.service.ts (Class: AuthService)auth.ts (Class: AuthService)[domain]-data.ts, [domain]-store.ts, or [domain]-data-client.ts (e.g., auth-data.ts / AuthData, user-data-client.ts / UserDataClient)..model.ts suffix for data shapes.
user.model.ts (Interface: User)Organize files into feature-specific folders containing components, local services, and routes related to that domain.
features/profile/profile.ts (Class: Profile)features/profile/components/profile-header.ts (Class: ProfileHeader)features/projects/components/project-card.ts (Class: ProjectCard)features/projects/projects-data.ts (Class: ProjectsData)Store pure, presentational elements and helpers with zero business logic in a shared folder.
shared/components/button/button.ts (Class: Button)shared/components/spinner/spinner.ts (Class: Spinner)shared/pipes/format-date.ts (Class: FormatDate)highlight.directive.ts (Class: HighlightDirective)highlight.ts (Class: Highlight).component.ts or .ts?).angular.json for custom schematics options that might configure suffix behaviors..component.ts, .service.ts) as it is the safest default in the Angular ecosystem.user.ts (component) and user.model.ts (model) can collide if they both declare a class/interface named User.
class UserProfile in user-profile.ts or class UserDetail in user-detail.ts) while keeping the simple domain name for the interface (interface User in user.model.ts).AuthData or ProfileHeader) and file type icons rather than visual scan of suffix strings.