Back to skills
SkillHub ClubShip Full StackFull StackFrontend

frontend

Imported from https://github.com/tidemann/st44-home.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
0
Hot score
74
Updated
March 19, 2026
Overall rating
C2.3
Composite score
2.3
Best-practice grade
B81.2

Install command

npx @skill-hub/cli install tidemann-st44-home-frontend

Repository

tidemann/st44-home

Skill path: .claude/skills/frontend

Imported from https://github.com/tidemann/st44-home.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack, Frontend.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: tidemann.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install frontend into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/tidemann/st44-home before adding frontend to shared team environments
  • Use frontend for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: frontend
description: Angular 21+ expert for .ts .html .css files, @Component, UI, components, pages, services, routing, forms, templates, signals, RxJS, HttpClient, inject(), reactive forms, validators, accessibility, WCAG, AXE, browser testing, Karma, Jasmine, e2e, Playwright
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# Frontend Development Skill

Expert in Angular 21+ frontend development following project conventions.

## When to Use This Skill

Use this skill when:

- Implementing UI components or pages
- Creating or modifying Angular services
- Working with forms and validation
- Implementing routing or guards
- Any frontend-related task

## Core Principles

### Angular 21+ Patterns

- **Standalone components only** (no NgModules)
- **Signals for state** (`signal()`, `computed()`)
- **OnPush change detection** (always)
- **inject() for DI** (not constructor injection)
- **Native control flow** (`@if`, `@for`, `@switch`)
- **input()/output() functions** (not decorators)

### Naming Conventions

- **camelCase everywhere** - variables, properties, all naming
- **NEVER use snake_case**

## Mandatory Local Testing (CRITICAL)

**BEFORE EVERY PUSH, run ALL checks from apps/frontend:**

```bash
cd apps/frontend

# 1. Lint check
npm run lint

# 2. Format check
npm run format:check

# 3. Tests
npm run test:ci

# 4. Build
npm run build
```

**If ANY check fails:**

1. STOP - Do not proceed
2. Fix the issue
3. Re-run ALL checks
4. Only push when ALL pass

**Why:** CI feedback loop takes 3-5 minutes vs local checks in <1 minute. Debugging locally is 10x faster.

## Component Guidelines

### Component Size Management

- **Small components (<50 lines template):** Inline templates OK
- **All components:** CSS in separate files (NEVER inline styles)
- **Large components (>200 lines):** Break into smaller components
- **Large controllers (>100 lines):** Extract utility functions

### TypeScript Best Practices

- **NEVER use `any`** - use `unknown` instead
- Prefer type inference when obvious
- Use proper generics for type safety
- Leverage TypeScript utility types (Partial, Required, Pick, Omit)

## Templates

### Control Flow

```typescript
// ✅ CORRECT - Native control flow
@if (user()) {
  <p>Welcome {{user().name}}</p>
}

@for (item of items(); track item.id) {
  <div>{{item.name}}</div>
}

// ❌ WRONG - Old structural directives
*ngIf="user"
*ngFor="let item of items"
```

### Class Bindings

```html
<!-- ✅ CORRECT -->
<div [class.active]="isActive()">
  <!-- ❌ WRONG -->
  <div [ngClass]="{'active': isActive()}"></div>
</div>
```

## State Management

**⚠️ CRITICAL - Read Before Implementing**:

### Shared State (Multi-Component)

If data is needed across multiple pages/components:

- **MUST use centralized store** (NgRx SignalStore or custom signal-based store)
- **NEVER duplicate API calls** across components
- Examples: household, user, tasks, assignments

### Local Component State

```typescript
// Simple local state with signals
export class MyComponent {
  // Local state
  private count = signal(0);

  // Derived state
  doubleCount = computed(() => this.count() * 2);

  // Update state
  increment() {
    this.count.update((c) => c + 1);
    // Or: this.count.set(5);
  }
}
```

### Async Data Loading

**Use AsyncState utility instead of manual loading/error/data signals**:

```typescript
import { AsyncState } from '../utils/async-state';

export class MyComponent {
  protected readonly dataState = new AsyncState<Data[]>();

  async loadData(): Promise<void> {
    await this.dataState.execute(async () => {
      return this.dataService.getData();
    });
  }
}
```

**Benefits**: Eliminates 15+ lines of boilerplate, type-safe, consistent

### localStorage

**NEVER use localStorage directly** - use StorageService:

```typescript
// ❌ WRONG
localStorage.setItem('key', JSON.stringify(value));

// ✅ CORRECT
this.storageService.set('key', value);
```

**See**: GitHub Issues #255 (State), #258 (AsyncState), #259 (Storage)

## Services

```typescript
// Use inject() instead of constructor injection
export class MyService {
  private http = inject(HttpClient);
  private router = inject(Router);

  getData() {
    return this.http.get('/api/data');
  }
}
```

## Accessibility (WCAG AA Compliance)

- All implementations MUST pass AXE checks
- Implement proper focus management
- Ensure sufficient color contrast
- Add appropriate ARIA attributes
- Support keyboard navigation

## Workflow

1. **Read** the optimized agent spec: `.claude/agents/frontend.md`
2. **Understand** requirements and acceptance criteria
3. **Research** existing patterns in the codebase
4. **Implement** following all conventions above
5. **Test** locally with ALL checks (lint, format, tests, build)
6. **Only then** commit and push

## Common Patterns

### Creating Components

```bash
# Always use Angular CLI
ng generate component my-component
# Or shorthand:
ng g c my-component
```

### API Integration

```typescript
export class DataService {
  private api = inject(ApiService);

  async fetchData(): Promise<Data[]> {
    return this.api.get<Data[]>('/api/data');
  }
}
```

### Forms

```typescript
export class FormComponent {
  form = new FormGroup({
    name: new FormControl('', [Validators.required]),
    email: new FormControl('', [Validators.required, Validators.email]),
  });

  onSubmit() {
    if (this.form.invalid) return;
    // Process form
  }
}
```

## Reference Files

For detailed patterns and examples:

- `.github/agents/frontend-agent.md` - Complete agent specification with architectural improvements
- `CLAUDE.md` - Project-wide conventions

**Specialized Skills** (use these for specific patterns):

- `.claude/skills/state-management/` - Centralized stores, AsyncState, localStorage abstraction
- `.claude/skills/http-interceptors/` - Auth, error handling, retry logic, caching
- `.claude/skills/testing-infrastructure/` - Fixtures, mocks, component harness
- `.claude/skills/storybook/` - Component development and visual testing

**Architecture Improvement Issues** (reference these for best practices):

- #253: Routing Architecture (layout components)
- #254: Performance Optimizations (pagination, virtual scrolling, caching)
- #255: State Management (centralized store)
- #256: Service Layer Boundaries (single responsibility)
- #257: HTTP Layer Improvements (interceptors)
- #258: Eliminate Code Duplication (AsyncState utility)
- #259: Abstract localStorage (StorageService)
- #260: Component Organization (presentational vs container)
- #261: Testing Infrastructure (shared utilities)

## Success Criteria

Before marking work complete:

- [ ] All local checks pass (lint, format, tests, build)
- [ ] Accessibility verified with AXE
- [ ] Follows Angular 21+ patterns
- [ ] Uses signals for state management
- [ ] camelCase naming throughout
- [ ] No `any` types used
frontend | SkillHub