'use client'; import React, { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Upload, Search, Zap, CheckCircle2, AlertCircle, Loader2, BarChart3, Users } from 'lucide-react'; import { uploadCSV, runEvaluation } from '@/lib/api'; import CandidateTable from '@/components/CandidateTable'; import CandidateDetail from '@/components/CandidateDetail'; export default function Dashboard() { const [jd, setJd] = useState(''); const [candidates, setCandidates] = useState([]); const [evaluations, setEvaluations] = useState([]); const [isUploading, setIsUploading] = useState(false); const [isEvaluating, setIsEvaluating] = useState(false); const [selectedCandidate, setSelectedCandidate] = useState(null); const handleFileUpload = async (e) => { const file = e.target.files[0]; if (!file) return; setIsUploading(true); try { const data = await uploadCSV(file); setCandidates(data.candidates); } catch (err) { console.error(err); alert('Failed to upload CSV. Check console for details.'); } finally { setIsUploading(false); } }; const handleEvaluate = async () => { if (!jd || candidates.length === 0) { alert('Please provide a JD and upload candidates.'); return; } setIsEvaluating(true); try { const data = await runEvaluation(jd, candidates); setEvaluations(data.shortlist); // We can also store data.details if needed for immediate access window.evalDetails = data.details; } catch (err) { console.error(err); alert('Evaluation failed. Check backend/Groq keys.'); } finally { setIsEvaluating(false); } }; return (
Intelligent multi-agent assessment for your next top hire.
Click or drag CSV
{candidates.length > 0 ? `${candidates.length} candidates loaded` : 'Supports names, skills, email...'}
> )}Upload a CSV, paste a JD, and hit Run to see the magic happen with Groq LLMs.