Universal coding standards for TypeScript, JavaScript, React, and Node.js. Use when reviewing code quality, enforcing naming and structural conventions, refactoring for maintainability, or setting up a new module. Also triggers when code smells like deep nesting, magic numbers, or unclear naming are detected.
From shipshape-skillsnpx claudepluginhub mukiwu/muki-ai-plugins --plugin shipshape-skillsThis skill uses the workspace's default tool permissions.
references/api-design.mdreferences/testing.mdSearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Universal coding standards applicable across all projects.
If the task involves a specific framework, use the dedicated skill instead of this file:
| Framework | Skill | Covers |
|---|---|---|
| React | skill: react-patterns | Components, Hooks, Zustand, performance, anti-patterns |
| Vue 3 | skill: vue-patterns | Composition API, Pinia, composables, performance, anti-patterns |
This skill focuses on framework-agnostic standards: naming, types, error handling, file organization, API design.
| Topic | File | When to read |
|---|---|---|
| API Design | references/api-design.md | Designing REST APIs, response formats, validation |
| Testing & Code Smells | references/testing.md | Writing tests, detecting anti-patterns |
// ✅ GOOD: Descriptive names
const marketSearchQuery = 'election'
const isUserAuthenticated = true
const totalRevenue = 1000
// ❌ BAD: Unclear names
const q = 'election'
const flag = true
const x = 1000
// ✅ GOOD: Verb-noun pattern
async function fetchMarketData(marketId: string) { }
function calculateSimilarity(a: number[], b: number[]) { }
function isValidEmail(email: string): boolean { }
// ❌ BAD: Unclear or noun-only
async function market(id: string) { }
function similarity(a, b) { }
function email(e) { }
// ✅ ALWAYS use spread operator
const updatedUser = { ...user, name: 'New Name' }
const updatedArray = [...items, newItem]
// ❌ NEVER mutate directly
user.name = 'New Name' // BAD
items.push(newItem) // BAD
// ✅ GOOD: Comprehensive error handling
async function fetchData(url: string) {
try {
const response = await fetch(url)
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`)
}
return await response.json()
} catch (error) {
console.error('Fetch failed:', error)
throw new Error('Failed to fetch data')
}
}
// ✅ GOOD: Parallel execution when possible
const [users, markets, stats] = await Promise.all([
fetchUsers(),
fetchMarkets(),
fetchStats()
])
// ❌ BAD: Sequential when unnecessary
const users = await fetchUsers()
const markets = await fetchMarkets()
const stats = await fetchStats()
// ✅ GOOD: Proper types
interface Market {
id: string
name: string
status: 'active' | 'resolved' | 'closed'
created_at: Date
}
function getMarket(id: string): Promise<Market> { }
// ❌ BAD: Using 'any'
function getMarket(id: any): Promise<any> { }
src/
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ └── (auth)/ # Auth pages (route groups)
├── components/ # React components
│ ├── ui/ # Generic UI components
│ ├── forms/ # Form components
│ └── layouts/ # Layout components
├── hooks/ # Custom React hooks
├── lib/ # Utilities and configs
├── types/ # TypeScript types
└── styles/ # Global styles
components/Button.tsx # PascalCase for components
hooks/useAuth.ts # camelCase with 'use' prefix
lib/formatDate.ts # camelCase for utilities
types/market.types.ts # camelCase with .types suffix
// ✅ GOOD: Explain WHY, not WHAT
// Use exponential backoff to avoid overwhelming the API during outages
const delay = Math.min(1000 * Math.pow(2, retryCount), 30000)
// ❌ BAD: Stating the obvious
// Increment counter by 1
count++
Remember: Code quality is not negotiable. Clear, maintainable code enables rapid development and confident refactoring.