From 3f44adc8bc47f975f7f9bd0d73ea503dcf7042e2 Mon Sep 17 00:00:00 2001 From: lorentz Date: Mon, 13 Apr 2026 01:55:47 +0000 Subject: [PATCH] Signin: modern split-panel with Seubert logo, MS SSO primary, remove dev accounts, local login collapsed --- ondeck/public/seubert-logo.webp | Bin 0 -> 5738 bytes ondeck/src/app/auth/signin/page.tsx | 57 ++++++-- ondeck/src/components/auth/signin-form.tsx | 143 ++++++++++----------- 3 files changed, 117 insertions(+), 83 deletions(-) create mode 100644 ondeck/public/seubert-logo.webp diff --git a/ondeck/public/seubert-logo.webp b/ondeck/public/seubert-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..b56a4bf0d8af50a0285913d8790d06faf5b442a3 GIT binary patch literal 5738 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 -
-
-
-

Horizon

-

Policy Renewal Workflow Management

+
+ {/* Left panel — brand */} +
+
+ Seubert +
+
+

+ Policy Renewal
Workflow Management +

+

+ Horizon keeps your team on top of every renewal, every client, every deadline. +

+
+

+ © {new Date().getFullYear()} Seubert Enterprises, Inc. +

+
+ + {/* Right panel — form */} +
+
+ {/* Mobile logo */} +
+ Seubert
- + +
+

Welcome back

+

Sign in to your Horizon account

+
+
- -

- Sign in with your local account or Microsoft account -

) diff --git a/ondeck/src/components/auth/signin-form.tsx b/ondeck/src/components/auth/signin-form.tsx index 1b951a3..fb4328a 100644 --- a/ondeck/src/components/auth/signin-form.tsx +++ b/ondeck/src/components/auth/signin-form.tsx @@ -4,26 +4,21 @@ import { useState } from 'react' import { signIn } from 'next-auth/react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Building2, User } from 'lucide-react' +import { Loader2 } from 'lucide-react' export function SignInForm() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [loading, setLoading] = useState(false) + const [msLoading, setMsLoading] = useState(false) const [error, setError] = useState('') + const [showLocal, setShowLocal] = useState(false) const handleLocalSignIn = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) setError('') - - const result = await signIn('credentials', { - username, - password, - redirect: false, - }) - + const result = await signIn('credentials', { username, password, redirect: false }) if (result?.error) { setError('Invalid username or password') setLoading(false) @@ -33,76 +28,80 @@ export function SignInForm() { } const handleMicrosoftSignIn = async () => { + setMsLoading(true) await signIn('azure-ad', { callbackUrl: '/dashboard' }) } return (
- {/* Local Account Login */} - - - - - Local Account - - - -
-
- setUsername(e.target.value)} - disabled={loading} - required - /> -
-
- setPassword(e.target.value)} - disabled={loading} - required - /> -
- {error && ( -

{error}

- )} - -
- -
-

Development Accounts:

-

• admin / admin123 (Admin)

-

• manager / manager123 (Manager)

-

• ae / ae123 (Account Executive)

-
-
-
+ {/* Microsoft SSO — primary */} + - {/* Microsoft Login (if configured) */} - - - + ) : ( +
+ setUsername(e.target.value)} + disabled={loading} + required + autoFocus + className="h-10" + /> + setPassword(e.target.value)} + disabled={loading} + required + className="h-10" + /> + {error &&

{error}

} + - - +
+ )}
) }