diff --git a/client/pages/Staff.tsx b/client/pages/Staff.tsx new file mode 100644 index 00000000..86a872a1 --- /dev/null +++ b/client/pages/Staff.tsx @@ -0,0 +1,233 @@ +import Layout from "@/components/Layout"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { + Users, + Briefcase, + BookOpen, + MessageSquare, + Trophy, + Target, + ArrowRight, + Shield, +} from "lucide-react"; +import { useNavigate } from "react-router-dom"; +import { useEffect, useState, useRef } from "react"; +import LoadingScreen from "@/components/LoadingScreen"; +import { aethexToast } from "@/lib/aethex-toast"; + +export default function Staff() { + const navigate = useNavigate(); + const [isLoading, setIsLoading] = useState(true); + const toastShownRef = useRef(false); + + useEffect(() => { + const timer = setTimeout(() => { + setIsLoading(false); + if (!toastShownRef.current) { + aethexToast.system("Staff operations portal initialized"); + toastShownRef.current = true; + } + }, 900); + + return () => clearTimeout(timer); + }, []); + + if (isLoading) { + return ( + + ); + } + + const staffResources = [ + { + icon: Briefcase, + title: "Announcements", + description: "Company updates, news, and important information", + link: "/staff/announcements", + color: "from-rose-500 to-pink-500", + }, + { + icon: BookOpen, + title: "Knowledge Base", + description: "Internal documentation, guides, and best practices", + link: "/staff/knowledge-base", + color: "from-blue-500 to-cyan-500", + }, + { + icon: MessageSquare, + title: "Team Handbook", + description: "Policies, procedures, and team guidelines", + link: "/staff/team-handbook", + color: "from-green-500 to-emerald-500", + }, + { + icon: Trophy, + title: "Performance Reviews", + description: "Career development and performance tracking", + link: "/staff/performance-reviews", + color: "from-amber-500 to-orange-500", + }, + { + icon: Target, + title: "Project Tracking", + description: "Team projects and task management", + link: "/staff/project-tracking", + color: "from-violet-500 to-indigo-500", + }, + { + icon: Users, + title: "Directory", + description: "Staff directory and team contacts", + link: "/staff/knowledge-base", + color: "from-teal-500 to-cyan-500", + }, + ]; + + const statsCards = [ + { label: "Active Team Members", value: "142", color: "text-purple-400" }, + { label: "Departments", value: "8", color: "text-purple-400" }, + { label: "Ongoing Projects", value: "47", color: "text-purple-400" }, + { label: "Completed Q1", value: "23", color: "text-purple-400" }, + ]; + + return ( + + + {/* Animated gradient background */} + + + + + + + + {/* Hero Section */} + + + + + Secure Staff Portal + + + Staff Operations Hub + + + Centralized portal for internal communications, resources, and team collaboration + + + navigate("/staff/announcements")} + className="bg-gradient-to-r from-purple-500 to-violet-500 hover:from-purple-600 hover:to-violet-600 text-white font-semibold group" + > + Access Portal + + + + + + {/* Stats Grid */} + + {statsCards.map((stat) => ( + + + + {stat.value} + + {stat.label} + + + ))} + + + {/* Staff Resources Grid */} + + + Quick Access Resources + + + {staffResources.map((resource) => { + const Icon = resource.icon; + return ( + navigate(resource.link)} + > + + + + + + {resource.title} + + + + + {resource.description} + + + + ); + })} + + + + {/* Features Section */} + + + Staff Portal Features + + + + Communication + + + + Company-wide announcements and updates + + + + Department notifications + + + + Team collaboration tools + + + + + Resources + + + + Internal documentation and guides + + + + Policies and procedures + + + + Learning and development materials + + + + + + + + + + ); +}
+ Centralized portal for internal communications, resources, and team collaboration +
{stat.label}
+ {resource.description} +