From shipshitdev-library
Sets up Biome (default) or ESLint + Prettier, Vitest testing, and Husky pre-commit hooks for JavaScript/TypeScript projects using Bun.
npx claudepluginhub shipshitdev/skillsThis skill uses the workspace's default tool permissions.
Set up comprehensive linting, formatting, and testing for JavaScript/TypeScript projects using **Biome 2.3+** (default), **Vitest**, and **Bun**.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Analyzes competition with Porter's Five Forces, Blue Ocean Strategy, and positioning maps to identify differentiation opportunities and market positioning for startups and pitches.
Set up comprehensive linting, formatting, and testing for JavaScript/TypeScript projects using Biome 2.3+ (default), Vitest, and Bun.
IMPORTANT: Always uses Biome 2.3+ (latest) - never older versions.
This skill automates the setup of:
--vitest flag)--eslint flag)Use this skill when:
# Default setup (Biome) - RECOMMENDED
python3 scripts/setup.py \
--root /path/to/project
# Use ESLint + Prettier instead (legacy)
python3 scripts/setup.py \
--root /path/to/project \
--eslint
# ESLint + Prettier with TypeScript
python3 scripts/setup.py \
--root /path/to/project \
--eslint \
--typescript
# Skip pre-commit hooks
python3 scripts/setup.py \
--root /path/to/project \
--no-hooks
# Add Vitest testing with 80% coverage threshold
python3 scripts/setup.py \
--root /path/to/project \
--vitest
# Full setup: Biome + Vitest + Husky
python3 scripts/setup.py \
--root /path/to/project \
--vitest \
--coverage 80
Biome 2.3+ (default):
Vitest (with --vitest):
ESLint + Prettier (legacy, with --eslint):
Pre-commit hooks:
project/
├── biome.json # Biome config (lint + format)
├── .vscode/
│ └── settings.json # Auto-format on save
├── .husky/
│ └── pre-commit # Pre-commit hook
└── package.json # Updated with scripts + lint-staged
project/
├── .eslintrc.json # ESLint config
├── .prettierrc # Prettier config
├── .prettierignore # Prettier ignore patterns
├── .eslintignore # ESLint ignore patterns
├── .vscode/
│ └── settings.json # Auto-format on save
├── .husky/
│ └── pre-commit # Pre-commit hook
└── package.json # Updated with scripts + lint-staged
{
"scripts": {
"lint": "biome lint .",
"lint:fix": "biome lint --write .",
"format": "biome format --write .",
"format:check": "biome format .",
"check": "biome check .",
"check:fix": "biome check --write ."
}
}
{
"scripts": {
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"test:ui": "vitest --ui"
}
}
{
"scripts": {
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"format": "prettier --write .",
"format:check": "prettier --check ."
}
}
Biome is a fast, all-in-one linter and formatter. The default config includes:
{
"$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
"assist": {
"actions": {
"source": { "organizeImports": "on" }
}
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": { "noForEach": "off" },
"style": { "noNonNullAssertion": "off" },
"suspicious": { "noArrayIndexKey": "off", "noExplicitAny": "warn" }
}
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"trailingCommas": "es5",
"semicolons": "always"
}
}
}
After setup, customize biome.json to adjust:
When you use the --vitest flag, this skill creates a vitest.config.ts:
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globals: true,
environment: "node", // or "jsdom" for frontend
include: ["src/**/*.{test,spec}.{ts,tsx}", "**/*.{test,spec}.{ts,tsx}"],
exclude: ["node_modules", "dist", ".next", "build"],
coverage: {
provider: "v8",
reporter: ["text", "json", "html", "lcov"],
include: ["src/**/*.ts", "src/**/*.tsx"],
exclude: ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"],
thresholds: {
lines: 80,
functions: 80,
branches: 75,
statements: 80,
},
},
mockReset: true,
restoreMocks: true,
},
});
Default threshold is 80%. Customize with:
python3 scripts/setup.py \
--root /path/to/project \
--vitest \
--coverage 90 # Set to 90%
Creates src/test/setup.ts for global test configuration:
import { expect, afterEach } from "vitest";
import { cleanup } from "@testing-library/react"; // For React projects
// Cleanup after each test
afterEach(() => {
cleanup();
});
When enabled (default), lint-staged runs on every commit:
Biome (default):
{
"lint-staged": {
"*.{js,jsx,ts,tsx,json,css}": ["bunx biome check --write"]
}
}
ESLint + Prettier (legacy):
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,md,yml,yaml}": ["prettier --write"]
}
}
This ensures:
The skill creates .vscode/settings.json:
Biome (default):
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "biomejs.biome",
"editor.codeActionsOnSave": {
"source.organizeImports.biome": "explicit",
"quickfix.biome": "explicit"
},
"[typescript]": {
"editor.defaultFormatter": "biomejs.biome"
}
}
ESLint + Prettier (legacy):
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}
For monorepos, run from the root:
python3 scripts/setup.py \
--root /path/to/monorepo \
--monorepo
This adds root-level config that applies to all packages.
# Reinstall husky
bunx husky
chmod +x .husky/pre-commit
When using --eslint, the skill detects common frameworks and adjusts config:
next/core-web-vitals to ESLinteslint-plugin-react and eslint-plugin-react-hooksIf you prefer manual setup over the script:
Biome:
bun add -D @biomejs/biome husky lint-staged
bunx biome init
bunx husky
ESLint + Prettier:
bun add -D eslint prettier eslint-config-prettier eslint-plugin-prettier husky lint-staged
bun add -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
bunx eslint --init
bunx husky
Then copy configs from assets/configs/