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 ( +
+ {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'} + + > + ) : ( + <> ++ This link is missing or invalid. Please request a new one. +
+ > + )} ++ © 2026 Northeastern University Student Government Association. All + rights reserved. +
+