Skip to main content
skill CX Codex

angular-architecture — Claude Code skill: Angular project structure

A skill that decides where Angular components go, how files are named, and which style guide rules to follow.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-code
Open on GitHub

What angular-architecture does

The core of the skill is the Scope Rule: a component's location follows its usage. Used by one feature, it sits in features/[feature]/components/. Used by two or more, it moves to features/shared/components/. Each feature keeps its own services/ and models/, while core/ holds app-wide singletons such as services, interceptors and guards.

File naming is the second hard rule. The skill drops .component, .service and .model suffixes, since the folder already says what the file is — user-profile.ts, not user-profile.component.ts. From the official Angular style guide it keeps inject() over constructor injection, class and style bindings over ngClass/ngStyle, protected for template-only members, and readonly on inputs, outputs and queries.

The naming rule is where this skill parts ways with the official docs, so agree on it with your team before installing. Otherwise every pull request turns into the same argument. The skill also ships ng commands for generating a component, a service or a guard straight into the right folder.

What it helps with

  • decide which folder a new component belongs in
  • lay out features, shared and core the same way every time
  • drop .component and .service suffixes from file names
  • move components to inject() and signals
  • generate a component or guard directly into the right directory

Example prompts for the agent

  • Help me split the cart and checkout components across the project structure
  • Where should button.ts go if both the cart and checkout use it?
  • Generate a service for the products feature following the skill rules

How to install angular-architecture

1Skills CLI (Vercel)

npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-code

2Manually: put the files in place

~/.claude/skills/architecture/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/architecture/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about angular-architecture

How do I install angular-architecture in Claude?

Run npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code. The skill file lands at ~/.claude/skills/architecture/SKILL.md.

What does angular-architecture do?

It defines Angular project structure: the Scope Rule for placing components, the features/shared/core layout, file naming rules and a set of conventions from the official style guide.

How is it different from the official Angular style guide?

It follows the official rules but overrides file naming: .component, .service and .model suffixes are not used, because the folder provides that context.

Source text

SKILL.md · MIT
---
name: angular-architecture
description: >
  Angular architecture: Scope Rule, project structure, file naming, style guide.
  Trigger: When structuring Angular projects or deciding where to place components.
metadata:
  author: gentleman-programming
  version: "1.0"
---

## The Scope Rule (REQUIRED)

**"Scope determines structure"** - Where a component lives depends on its usage.

| Usage | Placement |
|-------|-----------|
| Used by 1 feature | `features/[feature]/components/` |
| Used by 2+ features | `features/shared/components/` |

### Example

```
features/
  shopping-cart/
    shopping-cart.ts          # Main component = feature name
    components/
      cart-item.ts            # Used ONLY by shopping-cart
      cart-summary.ts         # Used ONLY by shopping-cart
  checkout/
    checkout.ts
    components/
      payment-form.ts         # Used ONLY by checkout
  shared/
    components/
      button.ts               # Used by shopping-cart AND checkout
      modal.ts                # Used by multiple features
```

---

## Project Structure

```
src/app/
  features/
    [feature-name]/
      [feature-name].ts       # Main component (same name as folder)
      components/             # Feature-specific components
      services/               # Feature-specific services
      models/                 # Feature-specific types
    shared/                   # ONLY for 2+ feature usage
      components/
      services/
      pipes/
  core/                       # App-wide singletons
    services/
    interceptors/
    guards/
  app.ts
  app.config.ts
  routes.ts
  main.ts
```

---

## File Naming (REQUIRED)

No `.component`, `.service`, `.model` suffixes. The folder tells you what it is.

```
✅ user-profile.ts
❌ user-profile.component.ts

✅ cart.ts
❌ cart.service.ts

✅ user.ts
❌ user.model.ts
```

---

## Style Guide

### What We Follow (from official docs)

- `inject()` over constructor injection
- `class` and `style` bindings over `ngClass`/`ngStyle`
- `protected` for template-only members
- `readonly` for inputs, outputs, queries
- Name handlers for action (`saveUser`) not event (`handleClick`)
- Keep lifecycle hooks simple - delegate to well-named methods
- One concept per file

```typescript
@Component({...})
export class UserProfileComponent {
  // 1. Injected dependencies
  private readonly userService = inject(UserService);
  
  // 2. Inputs/Outputs
  readonly userId = input.required<string>();
  readonly userSaved = output<User>();
  
  // 3. Internal state
  private readonly _loading = signal(false);
  readonly loading = this._loading.asReadonly();
  
  // 4. Computed
  protected readonly displayName = computed(() => ...);
  
  // 5. Methods
  save(): void { ... }
}
```

### What We Override

| Official Says | We Do | Why |
|---------------|-------|-----|
| `user-profile.component.ts` | `user-profile.ts` | Redundant - folder tells context |
| `user.service.ts` | `user.ts` | Same |

---

## Commands

```bash
# New project
ng new my-app --style=scss --ssr=false

# Component in feature
ng g c features/products/components/product-card --flat

# Service in feature  
ng g s features/products/services/product --flat

# Guard in core
ng g g core/guards/auth --functional
```

---

## Resources

- https://angular.dev/style-guide

© gentleman-programming · MIT · Gentleman-Programming/Gentleman-Skills

Similar skills

Everything for Frontend and UI →

From the same set4

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor