Auth — Split-Screen Login/Sign-Up Pattern

One component (Auth, app/frontend/src/app/features/auth/auth.ts) serves both /login and /signup — a split-screen layout with a form pane on the left and a stylized visual panel on the right.

Structure

Mode + state

readonly isLogin = signal(true);        // set false when route data.mode === 'signup'
readonly useMagicLink = signal(false);
readonly submitLabel = computed(() => useMagicLink() ? 'Send Magic Link' : isLogin() ? 'Sign In' : 'Create Account');

route.snapshot.data['mode'] drives the initial mode (so /login and /signup can route to the same component with different initial state); toggleMode() flips it in-page without a navigation. Submit runs through AuthService (a stub seam — signIn/signUp/sendMagicLink/signInWithProvider) and always lands on /home.

Composing