Education
Admissions Pipeline Card - Student Recruitment
Track admissions pipeline progression through application stages. Monitor application volume, acceptance rates, and enrollment funnel.
Admissions Pipeline Card
The Admissions Pipeline Card displays the progression of student applications through the admissions process, showing applied, reviewed, and accepted counts.
Preview
Installation
npx shadcn@latest add https://vectormotion.vercel.app/registry/admissions-pipeline-card.jsonAdmissions Pipeline Card
'use client'import React from 'react';import { Filter } from 'lucide-react';import { motion } from 'motion/react';import { clsx, type ClassValue } from "clsx";import { twMerge } from "tailwind-merge";import { ResponsiveContainer, BarChart, Bar, XAxis, Tooltip, Cell, YAxis } from 'recharts';function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs));}interface PipelineStage { stage: string; count: number; color: string; [key: string]: any;}interface AdmissionsPipelineCardProps { className?: string; title?: string; subtitle?: string; data?: PipelineStage[];}const DEFAULT_DATA: PipelineStage[] = [ { stage: 'Applied', count: 450, color: '#6366f1' }, { stage: 'Review', count: 280, color: '#8b5cf6' }, { stage: 'Interview', count: 180, color: '#ec4899' }, { stage: 'Accepted', count: 120, color: '#10b981' },];const DEFAULT_TITLE = "Admissions";const DEFAULT_SUBTITLE = "Pipeline Status";export const AdmissionsPipelineCard: React.FC<AdmissionsPipelineCardProps> = ({ className = "", title = DEFAULT_TITLE, subtitle = DEFAULT_SUBTITLE, data = DEFAULT_DATA,}) => { return ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }} className={cn( "relative overflow-hidden rounded-2xl border border-border bg-card text-card-foreground shadow-sm transition-all hover:border-indigo-300 dark:hover:border-indigo-700 hover:shadow-md flex flex-col h-full", className )} > <div className="p-5 flex flex-col h-full relative z-10"> <div className="mb-4 flex items-start justify-between"> <div> <h3 className="font-bold text-lg text-foreground"> {title} </h3> <p className="text-sm text-muted-foreground font-medium"> {subtitle} </p> </div> <div className="rounded-xl bg-indigo-50 dark:bg-indigo-900/20 p-2.5 text-indigo-500 dark:text-indigo-400 flex items-center justify-center ring-1 ring-indigo-100 dark:ring-indigo-800"> <Filter className="h-5 w-5" /> </div> </div> <div className="flex-1 w-full min-h-[120px]"> <ResponsiveContainer width="100%" height="100%"> <BarChart data={data} layout="vertical" margin={{ top: 5, right: 30, left: 20, bottom: 5 }} barSize={16}> <XAxis type="number" hide /> <YAxis type="category" dataKey="stage" tick={{ fontSize: 10, fill: '#71717a' }} width={60} axisLine={false} tickLine={false} /> <Tooltip cursor={false} content={() => null} /> <Bar dataKey="count" radius={[0, 4, 4, 0]}> {data.map((entry, index) => ( <Cell key={`cell-${index}`} fill={entry.color} /> ))} </Bar> </BarChart> </ResponsiveContainer> </div> <div className="absolute -bottom-4 -right-4 z-0 opacity-5 pointer-events-none"> <Filter className="w-32 h-32 text-indigo-500" /> </div> </div> </motion.div> );};Usage
This component displays the admissions pipeline with visual indicators for different stages of the application process, helping track student enrollment progress.
Prop
Type