kubestellar-console — Cursor rule: what it does, how to install
Rules for KubeStellar Console development across its React/TypeScript frontend and Go backend. Useful for dashboard cards and multi-cluster queries.
.cursor/rules/kubestellar-console.mdcWhat kubestellar-console does
This rule sets conventions for code under web/, pkg/, and cmd/. It routes data access through useCache/useCached*, passes loading state into useCardLoadingState, and guards array operations against undefined. UI text must use t() from react-i18next; styling uses Tailwind CSS with cn().
For Go, it specifies Fiber v2 handlers, fiber.NewError, structured log/slog logging, and empty slices created with make([]T, 0). Multi-cluster work uses goroutines with sync.WaitGroup, while cluster iteration goes through DeduplicatedClusters(). Before each commit, run cd web && npm run build && npm run lint; without that check, the rule does not cover the project’s build and lint step.
What it helps with
- structure React dashboard cards
- fetch data through cache-aware hooks
- guard operations on possibly undefined arrays
- route UI text through
t() - run queries across multiple clusters
Example prompts for the agent
- Review the card component in
web/src/components/cards/and align it with the project rules. - Add data loading through
useCache, includingisDemoDataandisRefreshinghandling for this card. - Review this Go handler for
DeduplicatedClusters(),sync.WaitGroup, and Fiber error handling.
How to install kubestellar-console
Manually: put the files in place
.cursor/rules/kubestellar-console.mdcFrontmatter: description, globs, alwaysApply
Manually: put the files in place
.claude/rules/kubestellar-console.mdThe paths frontmatter field limits the files: move globs from the source into paths
AGENTS.md
Codex reads AGENTS.md: paste the rule text there
Manually: put the files in place
.github/instructions/kubestellar-console.instructions.mdThe applyTo field sets which files it applies to: move globs from the source into applyTo
Manually: put the files in place
.devin/rules/kubestellar-console.mdManually: put the files in place
.clinerules/kubestellar-console.mdStep by step, with commands for each platform: Cursor rules: .mdc files, four modes and what replaced .cursorrules
Questions about kubestellar-console
How do I install kubestellar-console in Cursor?
Save the rule as .cursor/rules/kubestellar-console.mdc.
What does kubestellar-console do?
It guides development of the KubeStellar Console multi-cluster Kubernetes dashboard, covering React, Go, data loading, styling, localization, and cluster iteration.
Which files does the kubestellar-console rule cover?
Its patterns include **/*.tsx, **/*.ts, **/*.go, plus web/src/**/*.ts, web/src/**/*.tsx, pkg/**/*.go, and cmd/**/*.go. The rule is not enabled automatically.
Source text
kubestellar-console.mdc · CC0-1.0
---
description: "KubeStellar Console — Multi-cluster Kubernetes dashboard development rules"
globs: **/*.tsx, **/*.ts, **/*.go, web/src/**/*.ts, web/src/**/*.tsx, pkg/**/*.go, cmd/**/*.go
alwaysApply: false
---
# 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
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules