Pre-built and custom Clerk authentication component templates with theming and customization patterns. Use when building authentication UI, creating sign-in/sign-up pages, customizing Clerk components, implementing user buttons, theming auth flows, or when user mentions Clerk components, SignIn, SignUp, UserButton, auth UI, appearance customization, or authentication theming.
/plugin marketplace add vanman2024/ai-dev-marketplace/plugin install clerk@ai-dev-marketplaceThis skill is limited to using the following tools:
README.mdexamples/custom-sign-in-guide.mdexamples/custom-sign-in.tsxexamples/social-authentication-guide.mdexamples/social-buttons.tsxexamples/theme-config.tsxexamples/theming-guide.mdscripts/customize-appearance.shscripts/generate-auth-ui.shscripts/validate-components.shtemplates/protected-wrapper.tsxtemplates/sign-in-page.tsxtemplates/sign-up-page.tsxtemplates/user-button-custom.tsxThis skill provides comprehensive templates and patterns for implementing and customizing Clerk authentication components including pre-built components, Clerk Elements for custom flows, and appearance theming.
Clerk offers two approaches for authentication UI:
<SignIn />, <SignUp />, <UserButton /> with minimal configurationThis skill covers both approaches with practical templates and customization patterns.
Script: scripts/generate-auth-ui.sh <output-dir> <component-type>
Purpose: Generates complete authentication page templates
Component Types:
signin - SignIn page with routingsignup - SignUp page with routingboth - Both SignIn and SignUp pagesprofile - User profile pageall - Complete auth UI setUsage:
# Generate sign-in page
./scripts/generate-auth-ui.sh ./app/sign-in signin
# Generate both sign-in and sign-up
./scripts/generate-auth-ui.sh ./app signup
# Generate complete auth UI
./scripts/generate-auth-ui.sh ./app all
Generated Files:
app/sign-in/[[...sign-in]]/page.tsxapp/sign-up/[[...sign-up]]/page.tsxapp/profile/[[...profile]]/page.tsxcomponents/auth/protected-wrapper.tsxScript: scripts/customize-appearance.sh <config-file> <theme-preset>
Purpose: Generates appearance configuration for Clerk components
Theme Presets:
default - Clerk default themedark - Dark mode themeneobrutalist - Neobrutalist themeshadesOfPurple - Shades of Purple themecustom - Custom theme templateUsage:
# Generate dark theme config
./scripts/customize-appearance.sh ./lib/clerk-config.ts dark
# Generate custom theme template
./scripts/customize-appearance.sh ./lib/clerk-config.ts custom
# Generate theme with custom variables
BRAND_COLOR="#6366f1" ./scripts/customize-appearance.sh ./lib/clerk-config.ts custom
Environment Variables:
BRAND_COLOR - Primary brand color (hex)BACKGROUND - Background color (hex)TEXT_COLOR - Text color (hex)Script: scripts/validate-components.sh <project-dir>
Purpose: Validates Clerk component setup and configuration
Checks:
Usage:
# Validate current project
./scripts/validate-components.sh .
# Validate specific directory
./scripts/validate-components.sh /path/to/project
Exit Codes:
0: Validation passed1: Validation failed (must fix issues)Template: templates/sign-in-page.tsx
Features:
[[...sign-in]]Usage:
// app/sign-in/[[...sign-in]]/page.tsx
import { SignIn } from '@clerk/nextjs'
export default function SignInPage() {
return (
<div className="flex min-h-screen items-center justify-center">
<SignIn
appearance={{
elements: {
rootBox: "mx-auto",
card: "shadow-lg"
}
}}
afterSignInUrl="/dashboard"
/>
</div>
)
}
Template: templates/sign-up-page.tsx
Features:
[[...sign-up]]Template: templates/user-button-custom.tsx
Features:
Customization Example:
<UserButton
appearance={{
elements: {
userButtonAvatarBox: "w-10 h-10",
userButtonPopoverCard: "shadow-xl"
}
}}
>
<UserButton.MenuItems>
<UserButton.Link
label="Dashboard"
labelIcon={<LayoutDashboard size={16} />}
href="/dashboard"
/>
<UserButton.Action
label="Settings"
labelIcon={<Settings size={16} />}
onClick={() => router.push('/settings')}
/>
</UserButton.MenuItems>
</UserButton>
Template: templates/protected-wrapper.tsx
Features:
Usage:
// app/dashboard/page.tsx
import { ProtectedRoute } from '@/components/auth/protected-wrapper'
export default function DashboardPage() {
return (
<ProtectedRoute>
<div>Protected Dashboard Content</div>
</ProtectedRoute>
)
}
Example: examples/custom-sign-in-guide.md (code: examples/custom-sign-in.tsx)
Demonstrates:
Key Components:
<SignIn.Root>
<SignIn.Step name="start">
{/* Email/username input */}
<SignIn.Strategy name="password">
{/* Password input */}
</SignIn.Strategy>
<SignIn.Strategy name="email_code">
{/* Email verification */}
</SignIn.Strategy>
</SignIn.Step>
</SignIn.Root>
Example: examples/social-authentication-guide.md (code: examples/social-buttons.tsx)
Demonstrates:
Supported Providers:
Example: examples/theming-guide.md (code: examples/theme-config.tsx)
Demonstrates:
The appearance prop accepts:
appearance={{
baseTheme: dark, // Base theme
layout: { // Layout options
shimmer: true,
logoPlacement: 'inside'
},
variables: { // CSS variables
colorPrimary: '#6366f1',
colorBackground: '#ffffff',
colorText: '#1f2937',
borderRadius: '0.5rem'
},
elements: { // Element overrides
card: 'shadow-lg',
formButtonPrimary: 'bg-blue-500',
footerActionLink: 'text-blue-600'
}
}}
Global (ClerkProvider):
<ClerkProvider appearance={{
baseTheme: dark,
variables: { colorPrimary: '#6366f1' }
}}>
{children}
</ClerkProvider>
Component-Level:
<SignIn appearance={{
elements: {
card: 'shadow-xl',
rootBox: 'mx-auto'
}
}} />
For Tailwind CSS v4 support:
<ClerkProvider
appearance={{
cssLayerName: 'clerk' // Ensures Tailwind utilities override
}}
>
Common element selectors:
rootBox - Root containercard - Main card containerheaderTitle - Header textformButtonPrimary - Submit buttonsformFieldInput - Input fieldsfooterActionLink - Footer linksuserButtonAvatarBox - User avataruserButtonPopoverCard - Dropdown menuThis skill follows strict security rules:
.gitignore protection documented<SignIn />, <SignUp /> before custom Elements<ClerkProvider> level for consistencyvariables prop for brand colors, spacing, and typographyelements prop for specific component stylingafterSignInUrl and afterSignUpUrl for better UXNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY@clerk/themes for pre-built themesFor advanced customization patterns, see:
examples/custom-sign-in.tsx - Complete Clerk Elements implementationexamples/social-buttons.tsx - OAuth provider integrationexamples/theme-config.tsx - Advanced theming patternsBuild comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.