Tailwind CSS configuration template and validation logic for tailwind.config.js or tailwind.config.ts with src/index.css directives. Includes 5 required standards (required content paths for scanning, must extend default theme not replace, required plugins array, file naming convention for .js or .ts, required dependencies). Ensures proper PostCSS integration and Tailwind directive setup. Use when creating or auditing tailwind.config.js or tailwind.config.ts files for consistent Tailwind CSS setup.
Provides Tailwind CSS configuration templates and validation for 5 standards: content paths, theme extension, plugins array, file naming, and dependencies. Used when creating or auditing tailwind.config.js/ts files to ensure consistent setup.
/plugin marketplace add metasaver/claude-marketplace/plugin install core-claude-plugin@metasaver-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
templates/index.css.templatetemplates/tailwind.config.js.templatePurpose: Provides standard Tailwind CSS configuration template and validation logic for tailwind.config.js files
tailwind-agent for build and audit modesexport default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
// ...
};
Validation:
content array property"./index.html" pattern"./src/**/*.{js,ts,jsx,tsx}" patterntheme: {
extend: {
// Custom theme extensions here
}
}
Validation:
theme.extend object is presentplugins: [
// Plugins go here
];
Validation:
plugins array propertyValidation:
tailwind.config.js OR tailwind.config.tssatisfies Config for type safety).mjs, .cjs, or other variants"devDependencies": {
"tailwindcss": "^3.4.0"
}
Validation:
package.json must have tailwindcss in devDependencies/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
theme: {
extend: {},
},
plugins: [],
};
@tailwind base;
@tailwind components;
@tailwind utilities;
Validation for CSS file:
src/index.css (relative to tailwind.config.js)@tailwind base directive@tailwind components directive@tailwind utilities directivefunction checkTailwindConfig(
configPath: string,
packageJson: any,
repoType: string,
) {
const errors: string[] = [];
// Check file exists (Rule 4: accepts .js or .ts)
if (!fileExists(configPath)) {
errors.push("Rule 4: Missing tailwind.config.js or tailwind.config.ts");
return errors;
}
// Validate file naming convention
const fileName = path.basename(configPath);
if (!["tailwind.config.js", "tailwind.config.ts"].includes(fileName)) {
errors.push(
"Rule 4: Config must be named tailwind.config.js or tailwind.config.ts",
);
}
const config = parseTailwindConfig(configPath);
// Rule 1: Check content paths
if (!config.content || !Array.isArray(config.content)) {
errors.push("Rule 1: Missing content array");
} else {
const hasIndexHtml = config.content.some((p) => p.includes("index.html"));
const hasSrcPath = config.content.some((p) => p.includes("src/**/*"));
if (!hasIndexHtml) {
errors.push("Rule 1: content missing './index.html'");
}
if (!hasSrcPath) {
errors.push("Rule 1: content missing './src/**/*.{js,ts,jsx,tsx}'");
}
}
// Rule 2: Check theme.extend exists
if (!config.theme?.extend) {
errors.push(
"Rule 2: ENSURE theme.extend is present - always extend the default theme",
);
}
// Rule 3: Check plugins array exists
if (!config.plugins) {
errors.push("Rule 3: Missing plugins array");
}
// Rule 5: Check dependency
if (!packageJson.devDependencies?.tailwindcss) {
errors.push("Rule 5: Missing tailwindcss in devDependencies");
}
// Check CSS file exists
const cssPath = path.join(path.dirname(configPath), "src/index.css");
if (!fileExists(cssPath)) {
errors.push("Missing src/index.css with Tailwind directives");
} else {
const cssContent = readFileSync(cssPath, "utf-8");
if (!cssContent.includes("@tailwind base")) {
errors.push("src/index.css missing '@tailwind base' directive");
}
if (!cssContent.includes("@tailwind components")) {
errors.push("src/index.css missing '@tailwind components' directive");
}
if (!cssContent.includes("@tailwind utilities")) {
errors.push("src/index.css missing '@tailwind utilities' directive");
}
}
return errors;
}
Check if project is React/Vite compatible:
# Read package.json to check for React dependencies
Use standard template above.
Create CSS file with Tailwind directives if missing.
Add tailwindcss to devDependencies if missing:
"devDependencies": {
"tailwindcss": "^3.4.0"
}
Run audit mode validation to confirm all 5 rules pass.
All 5 rules must pass unless exception is declared in package.json:
{
"metasaver": {
"exceptions": {
"tailwind-config": {
"type": "custom-theme-config",
"reason": "Requires custom Tailwind theme for brand-specific design"
}
}
}
}
May have intentional differences:
Validation: Report differences but recommend "Ignore" option.
.claude/skills/tailwind-config/templates/Templates are stored in:
.claude/skills/tailwind-config/
├── templates/
│ ├── tailwind.config.js.template
│ └── index.css.template
The tailwind-agent uses this skill for: