From datum-platform
Covers patterns for building Kubernetes aggregated API servers including REST handlers, storage interfaces, scheme registration, and type definitions. Use when implementing API types, storage backends, or server configuration.
npx claudepluginhub datum-cloud/claude-code-plugins --plugin datum-platformThis skill uses the workspace's default tool permissions.
This skill covers patterns for building Kubernetes aggregated API servers and understanding when to choose this approach over CRD-based controllers.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
This skill covers patterns for building Kubernetes aggregated API servers and understanding when to choose this approach over CRD-based controllers.
Datum Cloud services are Kubernetes aggregated API servers, not CRD-based controllers. This means:
Important: Before implementing a new service, read architecture-decision.md to understand why aggregated API servers were chosen and when CRD-based controllers might be appropriate.
| File | Purpose |
|---|---|
architecture-decision.md | Start here — When to use aggregated servers vs CRDs |
types.md | API type definitions and conventions |
storage.md | Storage backend implementation |
validation.md | Validation patterns |
server-config.md | Server configuration |
feature-gates.md | Feature lifecycle management |
type REST struct {
store storage.Interface
TableConvertor
*genericregistry.Store
}
func NewREST(store storage.Interface) (*REST, *StatusREST) {
r := &REST{store: store}
statusStore := &StatusREST{store: store}
return r, statusStore
}
Use rest.Storage, NOT rest.StandardStorage:
var _ rest.Storage = &REST{}
var _ rest.Creater = &REST{}
var _ rest.Updater = &REST{}
var _ rest.GracefulDeleter = &REST{}
var _ rest.Lister = &REST{}
var _ rest.Getter = &REST{}
var _ rest.Watcher = &REST{}
Explicit Install() not init():
func Install(scheme *runtime.Scheme) {
utilruntime.Must(v1alpha1.AddToScheme(scheme))
utilruntime.Must(scheme.SetVersionPriority(v1alpha1.SchemeGroupVersion))
}
| Script | Purpose |
|---|---|
scripts/scaffold-resource.sh | Generate type + list + deepcopy |
scripts/scaffold-storage.sh | Generate storage skeleton |
scripts/validate-types.sh | Validate type conventions |
Run scripts/validate-types.sh to check:
types.md — Type definitionsstorage.md — Storage patternsvalidation.md — Validation patternsserver-config.md — Server setupfeature-gates.md — Feature lifecycle patterns