* clear

* feat: Add everything

* fix: Commenht
This commit is contained in:
Prad Nukala
2025-10-03 14:45:52 -04:00
committed by GitHub
parent 43b4a11c06
commit 13e6c3e84d
1935 changed files with 655061 additions and 40058 deletions
+189
View File
@@ -0,0 +1,189 @@
'use client';
import { useSession } from '@/hooks/useSession';
import { Button, ErrorAlert } from '@sonr.io/ui';
import { useRouter } from 'next/navigation';
import { useEffect } from 'react';
export default function DashboardPage() {
const { user, isAuthenticated, isLoading, error, logout } = useSession();
const router = useRouter();
useEffect(() => {
if (!isLoading && !isAuthenticated) {
router.push('/login');
}
}, [isAuthenticated, isLoading, router]);
const handleLogout = async () => {
await logout();
router.push('/');
};
if (isLoading) {
return (
<div className="min-h-screen flex items-center justify-center bg-gray-50">
<div className="text-center">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto" />
<p className="mt-4 text-gray-600">Loading...</p>
</div>
</div>
);
}
if (!isAuthenticated || !user) {
return null; // Will redirect to login
}
return (
<div className="min-h-screen bg-gray-50">
<div className="bg-white shadow">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center py-6">
<div className="flex items-center">
<h1 className="text-2xl font-bold text-gray-900">Highway Dashboard</h1>
</div>
<div className="flex items-center space-x-4">
<span className="text-sm text-gray-700">
Welcome, {user.displayName || user.username}
</span>
<Button variant="secondary" size="sm" onClick={handleLogout}>
Sign Out
</Button>
</div>
</div>
</div>
</div>
<main className="max-w-7xl mx-auto py-6 sm:px-6 lg:px-8">
<div className="px-4 py-6 sm:px-0">
{error && (
<div className="mb-6">
<ErrorAlert message={error} />
</div>
)}
<div className="bg-white overflow-hidden shadow rounded-lg">
<div className="px-4 py-5 sm:p-6">
<div className="sm:flex sm:items-center">
<div className="sm:flex-auto">
<h2 className="text-xl font-semibold text-gray-900">Account Information</h2>
<p className="mt-2 text-sm text-gray-700">
Your account details and authentication status
</p>
</div>
</div>
<div className="mt-6 border-t border-gray-200 pt-6">
<dl className="grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2">
<div>
<dt className="text-sm font-medium text-gray-500">Username</dt>
<dd className="mt-1 text-sm text-gray-900">{user.username}</dd>
</div>
<div>
<dt className="text-sm font-medium text-gray-500">Display Name</dt>
<dd className="mt-1 text-sm text-gray-900">{user.displayName || 'Not set'}</dd>
</div>
<div>
<dt className="text-sm font-medium text-gray-500">Account Created</dt>
<dd className="mt-1 text-sm text-gray-900">
{new Date(user.createdAt).toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
})}
</dd>
</div>
<div>
<dt className="text-sm font-medium text-gray-500">Authentication Method</dt>
<dd className="mt-1 text-sm text-gray-900">
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">
WebAuthn Passkey
</span>
</dd>
</div>
</dl>
</div>
</div>
</div>
<div className="mt-6 bg-white overflow-hidden shadow rounded-lg">
<div className="px-4 py-5 sm:p-6">
<h3 className="text-lg leading-6 font-medium text-gray-900 mb-4">
Security Features
</h3>
<ul className="space-y-3">
<li className="flex items-center">
<svg
className="h-5 w-5 text-green-500 mr-2"
fill="currentColor"
viewBox="0 0 20 20"
role="img"
aria-label="Check mark"
>
<path
fillRule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clipRule="evenodd"
/>
</svg>
<span className="text-sm text-gray-700">Passwordless Authentication</span>
</li>
<li className="flex items-center">
<svg
className="h-5 w-5 text-green-500 mr-2"
fill="currentColor"
viewBox="0 0 20 20"
role="img"
aria-label="Check mark"
>
<path
fillRule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clipRule="evenodd"
/>
</svg>
<span className="text-sm text-gray-700">Biometric Verification</span>
</li>
<li className="flex items-center">
<svg
className="h-5 w-5 text-green-500 mr-2"
fill="currentColor"
viewBox="0 0 20 20"
role="img"
aria-label="Check mark"
>
<path
fillRule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clipRule="evenodd"
/>
</svg>
<span className="text-sm text-gray-700">Phishing Resistant</span>
</li>
<li className="flex items-center">
<svg
className="h-5 w-5 text-green-500 mr-2"
fill="currentColor"
viewBox="0 0 20 20"
role="img"
aria-label="Check mark"
>
<path
fillRule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clipRule="evenodd"
/>
</svg>
<span className="text-sm text-gray-700">Hardware Security Key Support</span>
</li>
</ul>
</div>
</div>
</div>
</main>
</div>
);
}