Back to list
aiskillstore

ui-style-guide

by aiskillstore

Security-audited skills for Claude, Codex & Claude Code. One-click install, quality verified.

102🍴 3📅 Jan 23, 2026

SKILL.md


name: ui-style-guide description: Frontend coding standards, component patterns, and design system for the Guessimate Angular UI. Reference when writing or reviewing frontend code.

Frontend Style Guide & Coding Conventions

This document defines the coding standards, architectural patterns, and design system for the Guessimate Angular frontend.

1. Technology Stack

  • Framework: Angular 20+
  • Styling: Tailwind CSS 4
  • State Management: Angular Signals & RxJS
  • Build System: Angular CLI (Esbuild)

2. Project Structure

We follow a Feature-Based directory structure. Code is organized by domain feature rather than technical type.

src/app/
├── core/            # Global singletons (Guards, Interceptors, Global Services)
├── layout/          # Layout components (Navigation, Footer, Shell)
├── features/        # Feature modules (Domain logic)
│   ├── home/
│   ├── session/
│   │   ├── components/  # Dumb/Presentational components
│   │   ├── pages/       # Smart/Container components (Routed)
│   │   ├── services/    # Feature-specific state/logic
│   │   └── models/      # Feature-specific types
│   └── ...
├── websocket/       # WebSocket infrastructure
└── shared/          # Shared utilities (Pipes, Directives, Generic UI)

Naming Conventions

  • Files: Kebab-case (e.g., session-page.component.ts, auth.service.ts).
  • Classes: PascalCase (e.g., SessionPageComponent, AuthService).
  • Selectors: app- prefix, kebab-case (e.g., app-user-profile).
  • Signals: No suffix, descriptive noun/verb (e.g., user(), isLoading()).
  • Observables: $ suffix (e.g., user$).

3. Component Standards

Definition

  • Use Standalone Components (standalone: true is default in v19+).
  • Prefer Inline Templates for most components to keep logic and view co-located.
  • Avoid external CSS files; use Tailwind CSS utility classes directly in the template.

@Component({
    selector: 'app-example',
    imports: [CommonModule, RouterLink], // Explicit imports
    template: `
    <div class="p-4 bg-surface-100 rounded-lg">
      <h1 class="text-2xl font-bold text-gray-900">{{ title() }}</h1>
    </div>
  `
})
export class ExampleComponent {
    title = signal('Hello World');
}

Control Flow

Use the new built-in Angular Control Flow syntax.

<!-- Good -->
@if (isLoading()) {
<app-spinner/>
} @else {
@for (item of items(); track item.id) {
<app-item [data]="item"/>
}
}

Dependency Injection

Prefer the inject() function over constructor injection for better type inference and cleaner code.

// Good
private readonly
route = inject(ActivatedRoute);
private readonly
store = inject(SessionStore);

// Avoid if possible
constructor(private
route: ActivatedRoute
)
{
}

4. State Management

  • Local State: Use signal() for primitive state.
  • Shared State: Use Signal Stores (Services using Signals) provided at the appropriate level (Root or Component).
  • Reactive Data: Use computed() for derived state and effect() sparingly for side effects.

@Injectable()
export class SessionStore {
    // State
    private readonly _state = signal<SessionState>(initialState);

    // Selectors
    readonly lobby = computed(() => this._state().lobby);
    readonly connection = computed(() => this._state().connection);

    // Actions
    setLobby(lobby: Lobby) {
        this._state.update(s => ({...s, lobby}));
    }
}

5. Styling & Design System

We use Tailwind CSS 4 with a semantic color palette defined in styles.css.

Usage Rules

  1. Utility-First: Write classes directly in HTML.
  2. No Magic Numbers: Use theme values (e.g., p-4 not p-[16px]).
  3. Dark Mode: Use the dark: modifier for all color-related classes.

Color Palette

The application uses a semantic naming convention mapped to Tailwind colors.

Core Colors

CategorySemantic NameLight ModeDark ModeUsage
Backgroundbackgroundgray-50gray-950Main application background
Surfacesurfacewhitegray-900Cards, modals, sections
Surface Altsurface-altgray-100gray-800Secondary backgrounds, input fields
Primarybrandblue-600blue-600Primary actions, buttons, highlights
Primary Mutedbrand-mutedblue-50blue-900/30Selected states, light highlights
Successsuccessemerald-500emerald-600Success states, confirmation
Success Mutedsuccess-mutedemerald-50emerald-900/30Success backgrounds
Dangerdangerred-600red-600Errors, destructive actions
Danger Muteddanger-mutedred-50red-900/30Error backgrounds
Warningwarningamber-500amber-600Warnings, pending states
Warning Mutedwarning-mutedamber-50amber-900/30Warning backgrounds

Typography & Borders

CategoryLight ModeDark ModeUsage
Primarygray-900whiteMain headings and body text
Secondarygray-500gray-400Subtitles, labels, secondary info
Mutedgray-400gray-500Disabled text, placeholders
Bordergray-200gray-800Standard dividers and card borders

Implementation in styles.css

Colors are defined using CSS variables in the @theme block:

@theme {
    --color-brand-600: var(--color-blue-600);
    --color-surface-100: var(--color-stone-100);
    /* ... */
}

6. Common Component Patterns

Cards & Containers

Standard styling for content containers (like estimation cards, lists):


<div class="flex flex-col bg-surface-100/60 border border-surface-200 dark:bg-gray-900/40 dark:border-gray-800/60 rounded-md shadow-sm">
    <!-- Content -->
</div>
  • Background: bg-surface-100/60 (Light) / dark:bg-gray-900/40 (Dark)
  • Border: border border-surface-200 (Light) / dark:border-gray-800/60 (Dark)
  • Rounding: rounded-md (Standard)
  • Dividers: divide-y divide-surface-300 dark:divide-gray-800

Typography Headers


<div class="flex flex-col gap-1">
    <h2 class="text-2xl font-semibold leading-none text-gray-900 dark:text-white">Title</h2>
    <span class="text-sm font-normal text-gray-600 dark:text-gray-400">Subtitle description</span>
</div>

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon