PluginBench
Rule

kubestellar console

via PatrickJS/awesome-cursorrules

Multi-cluster Kubernetes dashboard development rules for React/TypeScript frontend and Go/Fiber backend.

What is kubestellar console?

Enforces KubeStellar Console development patterns across React card components, Go backend handlers, and styling conventions. Use this rule when building dashboard features, data-fetching hooks, or backend APIs for the multi-cluster console.

  • Enforces React card component patterns with useCache hooks and proper loading state handling
  • Requires array safety guards to prevent runtime errors on undefined data
  • Mandates Tailwind CSS styling with semantic color tokens and cn() utility for className merging
  • Enforces i18n via react-i18next for all user-facing strings
  • Standardizes Go/Fiber backend handlers with structured logging and proper JSON serialization
  • Requires cluster deduplication when iterating clusters across multi-cluster queries

Applies to

File patterns this rule matches.

**/*.tsx
**/*.ts
**/*.go
web/src/**/*.ts
web/src/**/*.tsx
pkg/**/*.go
cmd/**/*.go
Rule definition (reference)

Source of truth, from the repository.

KubeStellar Console Development Rules

Project Structure

  • Frontend: React + TypeScript in /web/
  • Backend: Go (Fiber v2) in root directory
  • Build: cd web && npm run build && npm run lint before every commit
  • Cards: Dashboard card components in web/src/components/cards/
  • Hooks: Data fetching hooks in web/src/hooks/

Card Development

  • All data fetching MUST go through useCache/useCached* hooks
  • Always destructure and pass isDemoData and isRefreshing to useCardLoadingState()
  • Never use demo data during loading: isDemoFallback && !isLoading
  • Hook ordering: useCardLoadingState AFTER hooks providing isDemoData

Array Safety

  • NEVER call .join(), .map(), .filter(), .forEach(), for...of on values that might be undefined
  • Always guard: (data || []).map(...) or (data || []).join(', ')

No Magic Numbers

  • Numeric literals should be named constants, except trivial literals (0, 1, -1) in clear local contexts
  • Use constants from lib/constants/ (time.ts, network.ts, ui.ts)

Styling

  • Tailwind CSS with cn() utility for merging classNames
  • Never use raw hex colors — use semantic Tailwind classes (text-foreground, bg-primary, bg-card)
  • Status colors: text-green-400/bg-green-500/10 (success), text-yellow-400/bg-yellow-500/10 (warning), text-red-400/bg-red-500/10 (error), text-cyan-400/bg-cyan-500/10 (info) — these map to the design system's semantic status tokens and are the only permitted palette classes

Internationalization

  • All user-facing strings use t() from react-i18next
  • Keys in web/src/locales/en/ JSON files
  • Never use raw strings for UI text

Go Backend

  • Fiber v2 handlers: func(c *fiber.Ctx) error
  • Use fiber.NewError(statusCode, message) for errors
  • Always make([]T, 0) not var x []T (nil → null in JSON)
  • Use log/slog for structured logging
  • Multi-cluster queries use goroutines + sync.WaitGroup

Cluster Deduplication

  • Always use DeduplicatedClusters() when iterating clusters
  • Multiple kubeconfig contexts can point to same physical cluster

Related rules

Senior full-stack TypeScript, React, Node.js guidance with clean architecture, testing, and WHY-oriented reasoning.

**/*
41k
via PatrickJS/awesome-cursorrules

Quantitative factor research skills for designing, evaluating, and mining alpha factors in equities markets.

**/*
41k
via PatrickJS/awesome-cursorrules

Android development with Jetpack Compose, clean architecture, and Material Design 3.

**/*
41k
via PatrickJS/awesome-cursorrules

Angular development with Novo Elements UI library using standalone components.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert Angular 18 + TypeScript development with Jest, emphasizing clean code and performance.

**/*
41k
via PatrickJS/awesome-cursorrules

Manage Kubernetes clusters, add-ons, stacks, and credentials via the Ankra CLI platform.

**/*.sh +5
41k
via PatrickJS/awesome-cursorrules