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.
npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-codeWhat 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
.componentand.servicesuffixes 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.tsgo 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-codenpx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-code2Manually: put the files in place
~/.claude/skills/architecture/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/architecture/
1Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a codex2Manually: put the files in place
.agents/skills/architecture/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a cursor2Manually: put the files in place
.cursor/skills/architecture/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Gentleman-Programming/Gentleman-Skills architecture2Manually: put the files in place
.github/skills/architecture/SKILL.md1Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a gemini-cli2Platform CLI
gemini skills install https://github.com/Gentleman-Programming/Gentleman-Skills --path curated/angular/architectureManually: put the files in place
.devin/skills/architecture/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
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