179 lines
6.8 KiB
TypeScript
179 lines
6.8 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import Link from 'next/link'
|
|
import Image from 'next/image'
|
|
import { auth } from '@/lib/auth'
|
|
import { redirect } from 'next/navigation'
|
|
import type { Route } from 'next'
|
|
|
|
export const metadata: Metadata = { title: 'Monaco Ocean Protection Challenge' }
|
|
|
|
export default async function HomePage() {
|
|
const session = await auth()
|
|
|
|
// Redirect authenticated users to their appropriate dashboard
|
|
if (session?.user) {
|
|
if (
|
|
session.user.role === 'SUPER_ADMIN' ||
|
|
session.user.role === 'PROGRAM_ADMIN'
|
|
) {
|
|
redirect('/admin')
|
|
} else if (session.user.role === 'JURY_MEMBER') {
|
|
redirect('/jury')
|
|
} else if (session.user.role === 'MENTOR') {
|
|
redirect('/mentor' as Route)
|
|
} else if (session.user.role === 'OBSERVER') {
|
|
redirect('/observer')
|
|
} else if (session.user.role === 'APPLICANT') {
|
|
redirect('/applicant' as Route)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div className="flex min-h-screen flex-col">
|
|
{/* Header */}
|
|
<header className="border-b border-border bg-white">
|
|
<div className="container-app flex h-16 items-center justify-between">
|
|
<Image
|
|
src="/images/MOPC-blue-long.png"
|
|
alt="MOPC - Monaco Ocean Protection Challenge"
|
|
width={140}
|
|
height={45}
|
|
className="h-10 w-auto"
|
|
priority
|
|
/>
|
|
<Link
|
|
href="/login"
|
|
className="inline-flex h-10 items-center justify-center rounded-md bg-primary px-6 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90"
|
|
>
|
|
Sign In
|
|
</Link>
|
|
</div>
|
|
</header>
|
|
|
|
{/* Hero Section */}
|
|
<main className="flex flex-1 flex-col">
|
|
<section className="flex flex-1 flex-col items-center justify-center px-4 py-16 text-center">
|
|
<h1 className="text-display-lg text-brand-blue">
|
|
Monaco Ocean Protection Challenge
|
|
</h1>
|
|
<p className="mt-4 max-w-2xl text-lg text-muted-foreground">
|
|
Supporting innovative solutions for ocean conservation through fair
|
|
and transparent project evaluation.
|
|
</p>
|
|
<div className="mt-8 flex gap-4">
|
|
<Link
|
|
href="/login"
|
|
className="inline-flex h-12 items-center justify-center rounded-md bg-primary px-8 text-base font-medium text-primary-foreground transition-colors hover:bg-primary/90"
|
|
>
|
|
Jury Portal
|
|
</Link>
|
|
<a
|
|
href="https://monaco-opc.com"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="inline-flex h-12 items-center justify-center rounded-md border border-border bg-background px-8 text-base font-medium transition-colors hover:bg-muted"
|
|
>
|
|
Learn More
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Features Section */}
|
|
<section className="border-t border-border bg-muted/30 px-4 py-16">
|
|
<div className="container-app">
|
|
<h2 className="text-center text-heading text-brand-blue">
|
|
Platform Features
|
|
</h2>
|
|
<div className="mt-12 grid gap-8 md:grid-cols-3">
|
|
<div className="rounded-lg border border-border bg-white p-6">
|
|
<div className="mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10">
|
|
<svg
|
|
className="h-6 w-6 text-primary"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24"
|
|
>
|
|
<path
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
strokeWidth={2}
|
|
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
<h3 className="text-subheading text-brand-blue">
|
|
Secure Evaluation
|
|
</h3>
|
|
<p className="mt-2 text-small text-muted-foreground">
|
|
Jury members access only their assigned projects with complete
|
|
confidentiality.
|
|
</p>
|
|
</div>
|
|
|
|
<div className="rounded-lg border border-border bg-white p-6">
|
|
<div className="mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-accent/10">
|
|
<svg
|
|
className="h-6 w-6 text-accent"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24"
|
|
>
|
|
<path
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
strokeWidth={2}
|
|
d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
<h3 className="text-subheading text-brand-blue">
|
|
Real-time Progress
|
|
</h3>
|
|
<p className="mt-2 text-small text-muted-foreground">
|
|
Track evaluation progress and manage voting windows with
|
|
comprehensive dashboards.
|
|
</p>
|
|
</div>
|
|
|
|
<div className="rounded-lg border border-border bg-white p-6">
|
|
<div className="mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-brand-teal/10">
|
|
<svg
|
|
className="h-6 w-6 text-brand-teal"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24"
|
|
>
|
|
<path
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
strokeWidth={2}
|
|
d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
<h3 className="text-subheading text-brand-blue">
|
|
Mobile First
|
|
</h3>
|
|
<p className="mt-2 text-small text-muted-foreground">
|
|
Evaluate projects anywhere with a fully responsive design
|
|
optimized for all devices.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
{/* Footer */}
|
|
<footer className="border-t border-border bg-brand-blue py-8 text-white">
|
|
<div className="container-app text-center">
|
|
<p className="text-small">
|
|
© {new Date().getFullYear()} Monaco Ocean Protection Challenge. All
|
|
rights reserved.
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
)
|
|
}
|