Angular 20 + NgRx patterns for Vendix frontend. Trigger: When editing files in apps/frontend/, creating components, or working with NgRx store.
Use this skill as a frontend web index. Detailed implementation rules live in specialized frontend skills. Vendix frontend web is Angular 20 with Zoneless + Signals; old examples using OnInit state holders, constructor DI, BehaviorSubject UI state, or async pipe as the default should not be copied into new code.
apps/frontend (Angular 20).apps/mobile (Expo/React Native) and not governed by Angular frontend skills.| Task | Skill |
| --- | --- |
| Any Angular component/template work | vendix-zoneless-signals |
| Component structure/shared components | vendix-frontend-component |
| Admin list screens | vendix-frontend-standard-module |
| Tables/cards/responsive list display | vendix-frontend-data-display |
| Routing | vendix-frontend-routing |
| NgRx/facades/signals state | vendix-frontend-state |
| Forms | vendix-angular-forms |
| Theme/branding tokens | vendix-frontend-theme |
| Mobile-first responsive UX | vendix-ui-ux |
inject() over constructor DI in new Angular code.input(), output(), model(), signal(), and computed() for component state and bindings.@if, @for, and @defer instead of adding new *ngIf/*ngFor patterns.loadComponent or loadChildren.panel_ui) as backend authorization.template: / styles: literals close the stringAngular component files often put HTML and CSS inside TypeScript template literals:
@Component({
template: `
<div class="...">
<!-- comment mentioning a selector, e.g. app-sticky-header -->
</div>
`,
styles: [`
.x { color: var(--c); }
`],
})
A raw backtick (`) anywhere inside that literal — including inside a <!-- comment --> or /* comment */ — closes the template literal early. Everything after that backtick is then parsed as TypeScript. Because the next character is usually ordinary prose, the resulting errors look unrelated to the comment and point far away from the actual mistake:
TS2322: Type 'boolean' is not assignable to type 'string' near the opening backtick on the template: / styles: line.TS2365: Operator '<' cannot be applied to types 'string' and 'number' on the same line.TS2304: Cannot find name 'app' / 'sticky' / 'header' on the line of the comment that contains the offending backtick.The misleading line numbers cause confusion in shared dev environments. The mistake has been misattributed to file-corruption bugs (VirtioFS torn writes, colima mount drift) and to other agents' work; colima restart does NOT cure it. A grep across skills/ and .claude/skills/ confirms this failure mode is not currently documented anywhere else.
Cheap probe before running the full typecheck (the full buildcheck can take minutes when the dev tree is shared):
npx tsc --noEmit --skipLibCheck \
--target es2022 --moduleResolution bundler --module esnext \
apps/frontend/src/app/path/to/changed.component.ts
If the error mentions identifiers that only exist inside a comment, that is the smoking gun.
Rule: inside a comment that lives inside a template: or styles: literal, either escape backticks as \` (the same component may already use this in its styles: block, lines 298-299 of header.component.ts) or avoid them and use single quotes instead.
apps/frontend/src/app/app.routes.ts; route setup is managed dynamically.apps/frontend/src/app/routes/public.apps/frontend/src/app/routes/private.apps/frontend/src/app/private/modules.apps/frontend/src/app/shared/components.vendix-zoneless-signals - Mandatory Angular 20 runtime rulesvendix-frontend-routing - Route/lazy-loading patternsvendix-frontend-component - Component structure and shared componentsvendix-ui-ux - Responsive web UX rulesSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer