- New PortalAuthShell component: blurred Port Nimara overhead background + circular logo + white rounded card, used by /portal/login, /portal/activate, /portal/reset-password - New email/templates/portal-auth.ts: table-based, responsive (max-width 600px / width 100%), matching the existing legacy inquiry templates; replaces the inline templates that lived in portal-auth.service - EMAIL_REDIRECT_TO env override: when set, sendEmail routes every outbound message to that address regardless of recipient and tags the subject with "[redirected from <original>]". Dev/test safety net only; unset in production - Portal password minimum length 12 → 9 (service + both API routes + client-side form) - Dev helper script scripts/dev-trigger-portal-invite.ts: seeds a portal user against the first port-nimara client and uses EMAIL_REDIRECT_TO as the stored email so the tester can sign in with the address that received the activation mail Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
28 lines
921 B
TypeScript
28 lines
921 B
TypeScript
const BG_URL = 'https://s3.portnimara.com/images/Overhead_1_blur.png';
|
|
const LOGO_URL =
|
|
'https://s3.portnimara.com/images/Port%20Nimara%20New%20Logo-Circular%20Frame_250px.png';
|
|
|
|
export function PortalAuthShell({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<div
|
|
className="min-h-screen flex items-center justify-center px-4 py-8"
|
|
style={{
|
|
backgroundImage: `url('${BG_URL}')`,
|
|
backgroundSize: 'cover',
|
|
backgroundPosition: 'center',
|
|
backgroundColor: '#f2f2f2',
|
|
}}
|
|
>
|
|
<div className="w-full max-w-md">
|
|
<div className="bg-white rounded-lg shadow-lg p-8">
|
|
<div className="flex justify-center mb-6">
|
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
<img src={LOGO_URL} alt="Port Nimara" className="w-24 h-auto" />
|
|
</div>
|
|
{children}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|