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.
Limited to specific tools
Additional assets for this skill
This 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 patterns