How to Integrate Custom CSS with the Clone-Website Skill
You integrate custom CSS with the clone-website skill by extending src/app/globals.css or creating sibling stylesheets, leveraging the Tailwind CSS v4 and shadcn/ui pipeline already configured in the generated Next.js 16 project.
The clone-website skill in the JCodesMore/ai-website-cloner-template repository automates the creation of production-ready Next.js applications. When you integrate custom CSS with the clone-website skill, you work within a Tailwind CSS v4 environment where src/app/globals.css serves as the central stylesheet for both extracted design tokens and your custom extensions.
Architectural Flow for Custom CSS Integration
Following this five-step workflow ensures your styles compile correctly alongside the skill's generated code:
-
Run the skill – Execute the clone operation to extract the target site's design tokens (colors, fonts, spacing) into
src/app/globals.css(see the Colors and Global UI patterns steps in.github/skills/clone-website/SKILL.md). -
Append custom rules – Edit
src/app/globals.cssor create a sibling CSS file, adding your selectors. Because Tailwind processes this file, any utility classes you reference will be available throughout the application. -
Extend Tailwind configuration – If you need new utility classes (bespoke animations or design-system tokens), add them to
tailwind.config.tsin the repository root. -
Rebuild the application – Run
npm run buildornpm run devto recompile the CSS, integrating your custom rules into the final stylesheet. -
Reference in components – Import your new classes using
className="my-custom-class"or thecn()helper fromsrc/lib/utils.tsto merge Tailwind classes safely.
Critical File Locations for Styling
The skill expects style modifications in specific locations to maintain compatibility with the Next.js 16 and shadcn/ui architecture:
-
src/app/globals.css– The central stylesheet where the skill inserts extracted:rootand.darkvariable blocks (lines 51-88 in the source). This is your primary entry point for site-wide custom CSS. -
src/app/layout.tsx– Loadsglobals.cssand configures the<html>element, ensuring any CSS changes apply globally across the application. -
postcss.config.mjs– Configures Tailwind's processor; you can safely add custom PostCSS plugins here without breaking the skill's pipeline. -
tailwind.config.ts– Located at the repository root, this file allows you to extend Tailwind's design system with custom colors, spacing, or animations. -
src/lib/utils.ts– Provides thecn()helper function for composing class names in a type-safe manner.
Common Integration Patterns
| Goal | Implementation | Why It Works |
|---|---|---|
| Add a brand-specific color | Append :root { --brand-primary: #0044ff; } to globals.css, then reference via bg-[var(--brand-primary)] or create a Tailwind token in tailwind.config.ts |
Variables are defined before Tailwind processes the file, allowing utility generation. |
| Create a reusable animation | Define @keyframes spin-slow and .animate-spin-slow in globals.css |
Tailwind's @layer base preserves the rule, making the class available anywhere via className="animate-spin-slow". |
| Override shadcn component styles | Append [data-theme='dark'] .btn-primary { background-color: var(--brand-primary); } to globals.css |
The skill already scopes dark mode with @custom-variant dark; your selector respects this paradigm. |
Code Examples
Adding a Brand Color and Using It in Components
First, define the CSS variable and utility class in src/app/globals.css:
/* src/app/globals.css - append at the bottom */
:root {
--brand-primary: #0066ff;
}
/* Tailwind can now generate a utility */
.bg-brand-primary {
background-color: var(--brand-primary);
}
Then reference it in a component using the cn() helper:
// src/components/ui/button.tsx
import { cn } from '@/lib/utils';
export default function BrandButton({ children }: { children: React.ReactNode }) {
return (
<button
className={cn(
'px-4 py-2 rounded-md text-white',
'bg-brand-primary hover:bg-brand-primary/90',
)}
>
{children}
</button>
);
}
The cn() function merges Tailwind classes and handles conditional logic while maintaining type safety (see src/lib/utils.ts).
Defining Custom Keyframe Animations
Add the animation definition to your global stylesheet:
/* src/app/globals.css - after the :root block */
@keyframes fade-in-up {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.animate-fade-in-up {
animation: fade-in-up 0.4s ease-out forwards;
}
Apply it to any component:
// src/components/ui/hero.tsx
export function Hero() {
return (
<section className="animate-fade-in-up">
<h1 className="text-4xl font-bold">Welcome</h1>
<p className="mt-2 text-lg">Your custom-styled hero.</p>
</section>
);
}
Extending Tailwind with Custom Utilities
For systematic design tokens, extend the Tailwind configuration:
// tailwind.config.ts - add to the theme.extend section
module.exports = {
theme: {
extend: {
spacing: {
'9/16': '56.25%', // 16:9 aspect ratio
},
colors: {
brand: 'var(--brand-primary)',
},
},
},
};
This enables usage like className="bg-brand" or className="aspect-w-16 aspect-h-9" throughout the application.
Summary
- Edit
src/app/globals.cssto add custom CSS variables, animations, or utility classes alongside the skill's generated design tokens. - Use
tailwind.config.tsto extend the design system with new utilities when you need consistent, reusable tokens. - Leverage
cn()fromsrc/lib/utils.tsto safely compose Tailwind classes in your components. - Rebuild with
npm run buildto compile your custom styles into the production bundle. - Maintain compatibility by respecting the existing
@custom-variant darkrules and shadcn/ui variable structures.
Frequently Asked Questions
Where does the clone-website skill write extracted CSS variables?
The skill writes extracted color tokens and design variables to src/app/globals.css within the :root and .dark selector blocks, specifically following the Colors and Global UI patterns steps defined in .github/skills/clone-website/SKILL.md.
Can I use CSS modules instead of the global stylesheet?
Yes. While the skill populates src/app/globals.css for site-wide tokens, you can create component-scoped CSS modules (e.g., Component.module.css) in the Next.js 16 project. Tailwind CSS v4 processes these alongside the global styles without conflicts.
Do I need to install additional PostCSS plugins for custom CSS?
No. The postcss.config.mjs file already configures Tailwind CSS v4 processing. You can safely add custom PostCSS plugins to this configuration if your project requires specific transformations, but the default setup handles standard CSS imports and Tailwind utilities without modification.
How do I ensure my custom CSS overrides shadcn/ui component styles?
Append your override rules to src/app/globals.css using the [data-theme='dark'] selector or higher-specificity class names. The skill initializes dark mode via @custom-variant dark, so respecting this scoping ensures your overrides apply correctly in both light and dark themes.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →