UAIDE / src /components /LandingPage.jsx
ATS-27's picture
Upload folder using huggingface_hub
af980d7 verified
Raw
History Blame Contribute Delete
10.8 kB
import { motion } from 'framer-motion';
import { ShieldCheck, ScanSearch, BrainCircuit, Workflow, ChevronRight, AlertTriangle, Sparkles, BarChart3, Users, ArrowDown } from 'lucide-react';
import UploadZone from './UploadZone';
import styles from './LandingPage.module.css';
const problemCards = [
{
icon: AlertTriangle,
title: 'Metadata Is Fragile',
text: 'Modern synthetic media can strip or spoof EXIF and provenance fields, making metadata-only screening unreliable in adversarial settings.',
},
{
icon: BrainCircuit,
title: 'Black-Box Detectors Fail Trust',
text: 'Many existing tools output a binary label without revealing why the model reached that conclusion, limiting evaluator confidence and auditability.',
},
{
icon: ScanSearch,
title: 'Explainability Is Essential',
text: 'UAIDE moves beyond opaque predictions with Grad-CAM-style localisation, frequency signals, and confidence reasoning for each forensic verdict.',
},
];
const pipeline = [
'Data Preparation',
'Feature Fusion',
'EfficientNet B2 + FFT',
'Random Forest / XGBoost',
'Explainable Output',
];
const team = [
{ name: 'Aadya', role: 'Research, Documentation and Backend', note: 'Research synthesis, technical documentation, and backend workflow support.' },
{ name: 'Atherva', role: 'UI & UX · Literature Study', note: 'Interface strategy, evaluator flow, and research synthesis.' },
{ name: 'Deshna', role: 'Model Training, System Integration and Analysis', note: 'Model training coordination, system integration, and end-to-end forensic analysis workflow.' },
{ name: 'Ojas', role: 'System Design and Data Collection', note: 'System architecture planning, dataset curation, and structured data collection for experimentation.' },
];
const principles = [
{
title: 'Ethical Flagging',
text: 'AI-generated faces and suspicious artefacts are surfaced with a conservative review-first posture for sensitive academic and investigative contexts.',
},
{
title: 'Transparency Through XAI',
text: 'Heatmaps, frequency cues, and score breakdowns help evaluators understand where the detector found evidence instead of trusting a hidden model state.',
},
{
title: 'Bias Mitigation',
text: 'K-Fold validation and multi-signal fusion reduce overfitting and encourage more stable decisions across varied image conditions and sources.',
},
];
export default function LandingPage({ onFileSelect, error }) {
return (
<div className={styles.page}>
<section className={styles.hero} id="top">
<div className={styles.mesh} />
<div className={styles.heroInner}>
<motion.div
className={styles.heroContent}
initial={{ opacity: 0, y: 24 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.55 }}
>
<div className={styles.eyebrow}>
<Sparkles size={14} />
<span>Restoring Digital Trust Through Explainable AI Forensics</span>
</div>
<h1 className={styles.heroTitle}>UAIDE: Unified AI Origin Detection Engine.</h1>
<p className={styles.heroText}>
A robust computer vision framework for detecting synthetic media and deepfakes via content-level analysis.
Designed for academic evaluation, explainability, and accountable forensic review.
</p>
<div className={styles.heroActions}>
<a href="#analysis" className={styles.primaryCta}>
<span>Start Forensic Scan</span>
<ChevronRight size={16} />
</a>
<a href="#pipeline" className={styles.secondaryCta}>Review Technical Pipeline</a>
</div>
</motion.div>
<motion.div
className={styles.heroPanel}
initial={{ opacity: 0, scale: 0.96 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.55, delay: 0.1 }}
>
<div className={styles.statGrid}>
<div className={styles.statCard}>
<span className={styles.statLabel}>Accuracy</span>
<strong className={styles.statValue}>~95%</strong>
</div>
<div className={styles.statCard}>
<span className={styles.statLabel}>AUC</span>
<strong className={styles.statValue}>0.97</strong>
</div>
<div className={styles.statCard}>
<span className={styles.statLabel}>Core Signals</span>
<strong className={styles.statValue}>RGB + FFT</strong>
</div>
<div className={styles.statCard}>
<span className={styles.statLabel}>Output</span>
<strong className={styles.statValue}>Explainable</strong>
</div>
</div>
<div className={styles.panelDiagram}>
<div className={styles.diagramLine} />
{pipeline.map((item, index) => (
<div key={item} className={styles.diagramNodeWrap}>
<div className={styles.diagramNode}>{index + 1}</div>
<span>{item}</span>
</div>
))}
</div>
</motion.div>
</div>
<a href="#problem" className={styles.scrollCue}>
<ArrowDown size={15} />
<span>Project Defense Walkthrough</span>
</a>
</section>
<section className={styles.section} id="problem">
<div className={styles.sectionHeader}>
<span className={styles.sectionTag}>The Problem</span>
<h2>Why synthetic media detection needs explainable forensics.</h2>
<p>
UAIDE addresses the research gap between raw classification performance and evaluator trust by combining content-level analysis with transparent evidence surfaces.
</p>
</div>
<div className={styles.problemGrid}>
{problemCards.map(({ icon: Icon, title, text }) => (
<motion.article
key={title}
className={styles.problemCard}
initial={{ opacity: 0, y: 16 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.25 }}
transition={{ duration: 0.4 }}
>
<div className={styles.problemIcon}><Icon size={18} /></div>
<h3>{title}</h3>
<p>{text}</p>
</motion.article>
))}
</div>
</section>
<section className={styles.section} id="pipeline">
<div className={styles.pipelineShell}>
<div className={styles.sectionHeaderLeft}>
<span className={styles.sectionTag}>Technical Pipeline</span>
<h2>A layered detection stack built for validity and interpretability.</h2>
<p>
The system fuses spatial and frequency-domain evidence, then combines ensemble reasoning with explainable outputs to support academic scrutiny.
</p>
</div>
<div className={styles.pipelineFlow}>
{pipeline.map((item, index) => (
<div key={item} className={styles.flowItem}>
<div className={styles.flowIndex}>0{index + 1}</div>
<div className={styles.flowBody}>
<h3>{item}</h3>
<p>
{index === 0 && 'Structured data preparation, frame conditioning, and media normalization for stable inference.'}
{index === 1 && 'Spatial and frequency-domain descriptors are fused to retain complementary forensic evidence.'}
{index === 2 && 'EfficientNet B2 and FFT-informed features capture both visual artefacts and spectral anomalies.'}
{index === 3 && 'Random Forest and XGBoost ensemble outputs improve robustness beyond a single-model vote.'}
{index === 4 && 'Final verdicts are paired with heatmap localisation and metadata summaries for evaluator review.'}
</p>
</div>
{index < pipeline.length - 1 && <div className={styles.flowConnector} />}
</div>
))}
</div>
<div className={styles.metricsBar}>
<div className={styles.metricBlock}>
<BarChart3 size={16} />
<div>
<strong>~95% Accuracy</strong>
<span>Validated on benchmark image classification experiments</span>
</div>
</div>
<div className={styles.metricBlock}>
<Workflow size={16} />
<div>
<strong>0.97 AUC</strong>
<span>Strong ranking performance across real vs synthetic classes</span>
</div>
</div>
</div>
</div>
</section>
<section className={styles.section} id="ethics">
<div className={styles.ethicsPanel}>
<div className={styles.ethicsIntro}>
<div className={styles.ethicsBadge}><ShieldCheck size={18} /></div>
<span className={styles.sectionTag}>Ethics & Responsibility</span>
<h2>Built with safeguards, transparency, and evaluator accountability in mind.</h2>
</div>
<div className={styles.principlesGrid}>
{principles.map((principle) => (
<article key={principle.title} className={styles.principleCard}>
<h3>{principle.title}</h3>
<p>{principle.text}</p>
</article>
))}
</div>
</div>
</section>
<section className={styles.section} id="team">
<div className={styles.sectionHeader}>
<span className={styles.sectionTag}>Team</span>
<h2>Accountability through clear ownership.</h2>
<p>
UAIDE is positioned not as a black-box demo, but as a documented academic system with defined roles across research, design, modeling, and integration.
</p>
</div>
<div className={styles.teamGrid}>
{team.map((member) => (
<article key={member.name} className={styles.teamCard}>
<div className={styles.avatar}>{member.name.slice(0, 2).toUpperCase()}</div>
<div className={styles.teamBody}>
<h3>{member.name}</h3>
<p className={styles.teamRole}>{member.role}</p>
<p className={styles.teamNote}>{member.note}</p>
</div>
</article>
))}
</div>
</section>
<section className={styles.actionZone} id="analysis">
<UploadZone onFileSelect={onFileSelect} error={error} />
</section>
</div>
);
}