Loading...
Loading...
Generates complete, branded Auth0 Advanced Custom Universal Login (ACUL) screen implementations using the React or Vanilla JS SDK. Use when a developer asks to create, add, or modify ACUL login screens with custom branding, social login, theming, or specific authentication flows. Triggers on requests like "generate a custom login screen", "add a signup screen to my ACUL project", "customize my Auth0 Universal Login with our brand colors", "apply our theme to all ACUL screens", or any task involving Auth0 Universal Login customization with @auth0/auth0-acul-react or @auth0/auth0-acul-js.
npx skill4agent add auth0/agent-skills acul-screen-generator1. auth0-acul-samples (31 React screens, 3 React-JS screens)
→ Complete modular implementation: index.tsx + components/ + hooks/ + locales/
→ React: https://github.com/auth0-samples/auth0-acul-samples/tree/main/react/src/screens/<screen-name>
→ React-JS: https://github.com/auth0-samples/auth0-acul-samples/tree/main/react-js/src/screens/<screen-name>
2. SDK examples (68 React, 71 JS — all screens)
→ Code snippets showing SDK imports, hooks, and action functions
→ React: https://github.com/auth0/universal-login/blob/master/packages/auth0-acul-react/examples/<screen-name>.md
→ JS: https://github.com/auth0/universal-login/blob/master/packages/auth0-acul-js/examples/<screen-name>.md
3. assets/react-templates/ or assets/js-templates/
→ Structural component pattern only — never use their hooks/actions for other screensreferences/screen-catalog.md<screen-name>/
├── index.tsx thin entry: wires manager hook + applies theme + renders layout
├── components/
│ ├── Header.tsx logo, title, subtitle from screen.texts
│ ├── <ScreenName>Form.tsx form fields, submit, captcha, passkey button
│ ├── Footer.tsx signup link, forgot password, back link
│ └── AlternativeLogins.tsx social login buttons (if screen has social)
├── hooks/
│ └── use<ScreenName>Manager.ts wraps SDK hooks, exposes clean handlers + feature flags
└── locales/
└── en.json fallback text stringsimport { ULThemeCard, ULThemePageLayout } from '@/components'
import { applyAuth0Theme } from '@/utils/theme/themeEngine'
import Header from './components/Header'
import <ScreenName>Form from './components/<ScreenName>Form'
import Footer from './components/Footer'
import { use<ScreenName>Manager } from './hooks/use<ScreenName>Manager'
export const <ScreenName>Screen = () => {
const { sdkInstance, texts, locales } = use<ScreenName>Manager()
applyAuth0Theme(sdkInstance)
document.title = texts?.pageTitle ?? locales.pageTitle
return (
<ULThemePageLayout>
<ULThemeCard>
<Header texts={texts} />
<AlternativeLogins alignment="top" /> {/* conditional */}
<<ScreenName>Form />
<Footer texts={texts} links={links} />
<AlternativeLogins alignment="bottom" /> {/* conditional */}
</ULThemeCard>
</ULThemePageLayout>
)
}import { useLoginId, useScreen, useTransaction } from '@auth0/auth0-acul-react/<screen-name>'
import { executeSafely } from '@/utils/helpers/executeSafely'
import locales from '../locales/en.json'
export const use<ScreenName>Manager = () => {
const sdkInstance = useLoginId() // screen-specific SDK hook
const screen = useScreen()
const { alternateConnections } = useTransaction()
const handleSubmit = async (data) => executeSafely(() => login(data))
const handleFederatedLogin = async (conn) => executeSafely(() => federatedLogin({ connection: conn }))
return {
sdkInstance,
texts: screen.texts,
locales,
alternateConnections,
handleSubmit,
handleFederatedLogin,
isPasskeyEnabled: screen.isPasskeyEnabled,
isCaptchaAvailable: screen.isCaptchaAvailable,
}
}brew install auth0auth0 login
auth0 acul config list --rendering-mode advancedauth0 acul config listreferences/cli-commands.mdreactjsauth0 acul init <app_name> -t react -s login-id,login-password,signup
auth0 acul config generate <screen-name> # repeat per screenacul_config.jsonacul_config.jsonauth0 acul initauth0 acul screen add <screen-name> -d <project-dir>references/screen-catalog.md✅https://github.com/auth0-samples/auth0-acul-samples/tree/main/react/src/screens/<screen-name>https://github.com/auth0-samples/auth0-acul-samples/tree/main/react-js/src/screens/<screen-name>index.tsxhooks/use<ScreenName>Manager.tshttps://github.com/auth0/universal-login/blob/master/packages/auth0-acul-react/examples/<screen-name>.mdhttps://github.com/auth0/universal-login/blob/master/packages/auth0-acul-js/examples/<screen-name>.mdreferences/screen-catalog.mdacul_config.jsonauth0 acul config get <screen-name> -f <screen-name>.json
auth0 acul config list --rendering-mode advancedreferences/screen-catalog.md@auth0/auth0-acul-react@auth0/auth0-acul-jstailwind.config.tsstyles/tokens.csstheme/index.tsreferences/acul-react-sdk.mdreferences/acul-js-sdk.mdreferences/social-providers.mdprimary → button bg, links, focus ring
primary-hover → primary darkened ~10%
primary-text → white if primary is dark, else #111827
background → page background
surface → card/panel background
text-primary → headings (#111827 light / #F1F5F9 dark)
text-secondary → labels, placeholders
border → input borders
error → #EF4444 (unless specified)
success → #22C55E (unless specified)references/theming-patterns.md| Styling library | Template to use | Output file |
|---|---|---|
| Tailwind | | |
| CSS Modules | | |
| styled-components | | |
| Plain CSS | | |
{{TOKEN}}<screen-name>/
├── index.tsx
├── components/
│ ├── Header.tsx
│ ├── <ScreenName>Form.tsx
│ ├── Footer.tsx
│ └── AlternativeLogins.tsx (only if screen has social login)
├── hooks/
│ └── use<ScreenName>Manager.ts
└── locales/
└── en.jsonindex.tsxuse<ScreenName>Manager()applyAuth0Theme()ULThemePageLayoutULThemeCarduse<ScreenName>Manager.tsen.jsonscreen.texts.*<screen-name>.tsx<screen-name>.jsassets/react-templates/assets/js-templates/Outer layout wrapper → Card/panel → Logo slot → Title (screen.texts) →
Error banner (conditional) → Form fields → Captcha (conditional) →
Submit button → Passkey button (conditional) → Social divider + buttons
(conditional on alternateConnections) → Footer links@auth0/auth0-acul-react/mfa-otp-challengeuseScreen()hasErrorsgetErrors()screen.texts.*applyAuth0Theme()# Local preview — no tenant connection needed
auth0 acul dev -p 3000 -d <project-dir>
# Connected mode — syncs assets to tenant (stage/dev only)
auth0 acul dev --connected -s <screen-name> -d <project-dir>Connected mode updates your Auth0 tenant in real time. Only use this on a stage or development tenant — never on production.
| File | Load when |
|---|---|
| Framework is React |
| Framework is JS / Vanilla |
| Selecting screen type or triggering CLI fallback |
| Social login buttons are needed |
| Generating or applying a shared theme file |
| Need full CLI flag details |
| File | Use when |
|---|---|
| Tailwind, all-screens scope |
| CSS Modules, all-screens scope |
| styled-components |
| Plain CSS, all-screens scope |
| React component boilerplate base |
| JS component boilerplate base |