From ek-craft
Brand-compliance lint for ek-design consumers. Lints .tsx / .jsx / .css / .html / .md against universal anti-AI-slop rules (cyberpunk-web register) + data-driven rules read from the sibling ek-design plugin's design-model.yaml (avoid list, primary axis, invariants). Use when reviewing a cepsra PR, auditing a marketing page, or checking any output for brand drift. Triggers: 'lint this for ek brand', 'is this on-brand', 'ek-craft check', 'audit this tsx', 'ek compliance', '/ek-craft'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ek-craft:ek-craftThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Brand compliance lint. Two layers, one purpose.
Brand compliance lint. Two layers, one purpose.
| Layer | Source | What it catches |
|---|---|---|
| Universal | references/anti-ai-slop.md, color.md, typography.md | Generic AI-template tells in a web/React context: Tailwind-indigo accent, gradient-mesh hero, glassmorphism heavy blur, drop-shadow-as-elevation, emoji-as-icon, lorem ipsum |
| Data-driven | ../../ek-design/skills/ek-design/design-model.yaml avoid: + primary_axis_preserved: + invariants: | Brand-version-specific: forbidden hex codes, forbidden fonts, hex literals where role tokens exist, magenta-CTA monopoly violations, mono-for-identifiers misses, semantic-locked-status leaks |
The data-driven layer is the load-bearing one. When the ek brand evolves (yaml diff + git tag), this skill auto-adapts — no code changes here.
# Lint a single file
python3 scripts/ek-craft.py /path/to/cepsra/src/app/page.tsx
# Lint a glob
python3 scripts/ek-craft.py /path/to/cepsra/src/**/*.tsx
# JSONL output for machine consumption
python3 scripts/ek-craft.py --format jsonl /path/to/files
# Severity filter
python3 scripts/ek-craft.py --severity error /path/to/files
# Point at a specific design-model.yaml
python3 scripts/ek-craft.py --model /path/to/design-model.yaml /path/to/files
Exit code 0 = clean (no errors); 1 = errors present; 2 = lint crashed.
When the user says "lint this for ek brand" without invoking the script:
design-model.yaml. Try in order:
../../ek-design/skills/ek-design/design-model.yaml (sibling plugin in this repo)~/.claude/plugins/ek-design/skills/ek-design/design-model.yamlreferences/anti-ai-slop.md + color.md + typography.md.avoid:, primary_axis_preserved:, invariants:, apply matchers below.file:line · severity · rule · finding · suggestion.| Rule | Source | What it catches | Severity |
|---|---|---|---|
avoid.color | yaml avoid[].color | hex literal anywhere in file (case-insensitive) | error/warning |
avoid.color_family | yaml avoid[].color_family | hex in the named family range | error/warning |
avoid.font_family | yaml avoid[].font_family | font-family: declaration or font-<name> Tailwind class | error/warning |
avoid.pattern | yaml avoid[].pattern | named pattern (emoji-as-icon, gradient-mesh, etc.) | error/warning |
magenta_cta_monopoly | yaml invariants | non-magenta hex used as primary button bg | error |
mono_for_identifiers | yaml invariants | <code> or <pre> without font-mono; identifier-looking text in non-mono | warning |
no_consumer_indigo_purple | yaml invariants | Tailwind classes bg-indigo-*, bg-violet-*, bg-purple-* | error |
prefer_role_tokens | yaml roles keys | hex literal that exactly matches a role-resolved hex (suggest bg-magenta-500 etc.) | info |
reduced_motion_required | yaml invariants | CSS file with @keyframes but no prefers-reduced-motion override | warning |
accent_type_on_light_forbidden | yaml invariants | text-magenta-500 on bg-off-white (AA fail) | warning |
Default (human):
src/app/page.tsx:42 error avoid.color #6366F1 (Tailwind Indigo 500) — forbidden
→ use --color-magenta-500 / bg-magenta-500
src/app/page.tsx:55 warning mono_for_identifiers identifier-looking <span> not in font-mono
→ wrap in font-mono or use <code>
JSONL (--format jsonl):
{"file":"src/app/page.tsx","line":42,"col":18,"severity":"error","rule":"avoid.color","value":"#6366F1","message":"Forbidden color: Tailwind Indigo 500","suggestion":"use --color-magenta-500 / bg-magenta-500"}
ek-review (backlog v0.4).design-model.yaml — read-only consumer.design-model.yaml itself — that's ek-design (the SSoT).references/anti-ai-slop.md — 10 cardinal sins + soft tells, cyberpunk-web registerreferences/color.md — color discipline (magenta monopoly, semantic-locked statuses, no consumer indigo)references/typography.md — Chakra Petch / Inter / JetBrains Mono, mono-for-identifiers invariantSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
npx claudepluginhub ejkaz/ek-design --plugin ek-craft