| name | auth-components |
| description | 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. |
| allowed-tools | Bash, Read, Write, Edit |
Clerk Auth Components Skill
This 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.
Overview
Clerk offers two approaches for authentication UI:
- Pre-built Components - Ready-to-use
<SignIn />,<SignUp />,<UserButton />with minimal configuration - Clerk Elements - Custom components with granular control for advanced use-cases
This skill covers both approaches with practical templates and customization patterns.
Available Scripts
1. Generate Authentication UI Pages
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 set
Usage:
# 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.tsx
2. Customize Appearance and Theming
Script: 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 template
Usage:
# 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)
3. Validate Component Implementation
Script: scripts/validate-components.sh <project-dir>
Purpose: Validates Clerk component setup and configuration
Checks:
- Clerk dependencies installed (@clerk/nextjs)
- Environment variables configured
- ClerkProvider setup in layout
- Authentication pages exist
- Middleware configured
- No hardcoded secrets
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)
Available Templates
1. Sign-In Page Template
Template: templates/sign-in-page.tsx
Features:
- Next.js App Router integration
- Catch-all routing
[[...sign-in]] - After sign-in redirect configuration
- Centered layout with responsive design
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>
)
}
2. Sign-Up Page Template
Template: templates/sign-up-page.tsx
Features:
- Next.js App Router integration
- Catch-all routing
[[...sign-up]] - After sign-up redirect configuration
- Custom appearance configuration
3. Custom User Button Template
Template: templates/user-button-custom.tsx
Features:
- Custom menu items
- Appearance customization
- Avatar size control
- Dropdown actions
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>
4. Protected Route Wrapper
Template: templates/protected-wrapper.tsx
Features:
- Authentication guard for routes
- Loading states
- Redirect configuration
- Reusable HOC pattern
Usage:
// app/dashboard/page.tsx
import { ProtectedRoute } from '@/components/auth/protected-wrapper'
export default function DashboardPage() {
return (
<ProtectedRoute>
<div>Protected Dashboard Content</div>
</ProtectedRoute>
)
}
Available Examples
1. Custom Sign-In with Clerk Elements
Example: examples/custom-sign-in-guide.md (code: examples/custom-sign-in.tsx)
Demonstrates:
- Clerk Elements for custom sign-in flow
- Step-based authentication
- Strategy selection (password, OAuth)
- Form validation
- Error handling
- Custom styling
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>
2. Social Authentication Buttons
Example: examples/social-authentication-guide.md (code: examples/social-buttons.tsx)
Demonstrates:
- OAuth provider buttons
- Custom social button styling
- Loading states
- Error handling
- Multiple providers (Google, GitHub, Discord)
Supported Providers:
- GitHub
- Discord
- Microsoft
- Apple
3. Complete Theme Configuration
Example: examples/theming-guide.md (code: examples/theme-config.tsx)
Demonstrates:
- Complete appearance configuration
- CSS variables customization
- Layout configuration
- Element-specific styling
- Dark mode support
- Responsive design
Appearance Customization Guide
1. Appearance Prop Structure
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'
}
}}
2. Global vs Component-Level Theming
Global (ClerkProvider):
<ClerkProvider appearance={{
baseTheme: dark,
variables: { colorPrimary: '#6366f1' }
}}>
{children}
</ClerkProvider>
Component-Level:
<SignIn appearance={{
elements: {
card: 'shadow-xl',
rootBox: 'mx-auto'
}
}} />
3. Tailwind CSS v4 Integration
For Tailwind CSS v4 support:
<ClerkProvider
appearance={{
cssLayerName: 'clerk' // Ensures Tailwind utilities override
}}
>
4. Element Targeting
Common element selectors:
rootBox- Root containercard- Main card containerheaderTitle- Header textformButtonPrimary- Submit buttonsformFieldInput- Input fieldsfooterActionLink- Footer linksuserButtonAvatarBox- User avataruserButtonPopoverCard- Dropdown menu
Security Compliance
This skill follows strict security rules:
- All code examples use placeholder values only
- No real API keys, passwords, or secrets
- Environment variable references in all code
.gitignoreprotection documented- CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY read from environment
Best Practices
- Use Pre-built Components First - Start with
<SignIn />,<SignUp />before custom Elements - Apply Global Themes - Configure appearance at
<ClerkProvider>level for consistency - Leverage CSS Variables - Use
variablesprop for brand colors, spacing, and typography - Element Overrides for Fine-Tuning - Use
elementsprop for specific component styling - Protect Routes - Always wrap protected content in authentication checks
- Handle Loading States - Show loading indicators during authentication state checks
- Configure Redirects - Set
afterSignInUrlandafterSignUpUrlfor better UX - Responsive Design - Test auth components on mobile and desktop viewports
Requirements
- Clerk account with API keys
- Next.js 13+ with App Router (for examples)
- React 18+
- Environment variables:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY
- Optional:
@clerk/themesfor pre-built themes - Optional: Tailwind CSS for styling examples
Progressive Disclosure
For 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