diff --git a/attendance-manager/src/app/apple-icon.png b/attendance-manager/src/app/apple-icon.png new file mode 100644 index 00000000..cabd45be Binary files /dev/null and b/attendance-manager/src/app/apple-icon.png differ diff --git a/attendance-manager/src/app/favicon.ico b/attendance-manager/src/app/favicon.ico new file mode 100644 index 00000000..14326b2d Binary files /dev/null and b/attendance-manager/src/app/favicon.ico differ diff --git a/attendance-manager/src/app/icon.png b/attendance-manager/src/app/icon.png new file mode 100644 index 00000000..031f2013 Binary files /dev/null and b/attendance-manager/src/app/icon.png differ diff --git a/attendance-manager/src/app/login/confirm/page.tsx b/attendance-manager/src/app/login/confirm/page.tsx new file mode 100644 index 00000000..bc8c6e9b --- /dev/null +++ b/attendance-manager/src/app/login/confirm/page.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { useSearchParams } from 'next/navigation'; +import { Suspense } from 'react'; +import { CircleAlert, CircleCheck } from 'lucide-react'; + +function ConfirmContent() { + const searchParams = useSearchParams(); + const url = searchParams.get('url'); + + let isValidUrl = false; + let isRecovery = false; + try { + const parsed = new URL(url ?? ''); + isValidUrl = parsed.hostname.endsWith('.supabase.co'); + isRecovery = parsed.searchParams.get('type') === 'recovery'; + } catch { + // invalid or missing URL — leave defaults + } + + return ( +
+
+ {isValidUrl ? ( + <> + +

+ {isRecovery ? 'Reset Your Password' : 'Confirm Your Email'} +

+

+ {isRecovery + ? 'Your password reset link is ready.' + : 'Your verification link is ready.'}{' '} + Press the button below to proceed — do not share this page with + anyone. +

+ + {isRecovery ? 'Reset Password' : 'Confirm Email'} + + + ) : ( + <> + +

+ Invalid confirmation link +

+

+ This link is missing or invalid. Please request a new one. +

+ + )} +

+ © 2026 Northeastern University Student Government Association. All + rights reserved. +

+
+
+ ); +} + +export default function ConfirmPage() { + return ( + Loading...}> + + + ); +}