Help us improve
Share bugs, ideas, or general feedback.
From shipshape-skills
Enforces coding standards for TypeScript, JavaScript, React, and Node.js including naming conventions, immutability patterns, readability, DRY, and refactoring for maintainability during code reviews.
npx claudepluginhub mukiwu/muki-ai-plugins --plugin shipshape-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/shipshape-skills:coding-standardsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Universal coding standards applicable across all projects.
Enforces baseline coding standards for naming, readability, immutability, and code quality in TypeScript/JavaScript projects. Useful for code reviews, refactoring, new projects, and onboarding.
Enforces universal coding standards and best practices for TypeScript, JavaScript, React, and Node.js, including naming conventions, immutability patterns, error handling, and async/await usage. Activates for code reviews, refactoring, and new projects.
Enforces coding standards and best practices for TypeScript, JavaScript, React, and Node.js including naming conventions, immutability patterns, error handling, async/await, and type safety.
Share bugs, ideas, or general feedback.
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.