From 0aa1d5bb43bf4dda116b773279e429426d00b172 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Mon, 10 Nov 2025 19:29:10 +0000 Subject: [PATCH] Create Staff Project Tracking page for OKRs and initiatives cgen-6c819a80ab054d0ca1dd28b1f7076700 --- client/pages/staff/StaffProjectTracking.tsx | 281 ++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 client/pages/staff/StaffProjectTracking.tsx diff --git a/client/pages/staff/StaffProjectTracking.tsx b/client/pages/staff/StaffProjectTracking.tsx new file mode 100644 index 00000000..c966b21e --- /dev/null +++ b/client/pages/staff/StaffProjectTracking.tsx @@ -0,0 +1,281 @@ +import { useState } from "react"; +import Layout from "@/components/Layout"; +import SEO from "@/components/SEO"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Progress } from "@/components/ui/progress"; +import { + BarChart, + Target, + TrendingUp, + Zap, + Users, + CheckCircle, +} from "lucide-react"; + +interface OKR { + id: string; + title: string; + description: string; + owner: string; + progress: number; + status: "On Track" | "At Risk" | "Completed"; + quarter: string; + team: string; +} + +const okrs: OKR[] = [ + { + id: "1", + title: "Improve Platform Performance by 40%", + description: "Reduce page load time and increase throughput", + owner: "Engineering", + progress: 75, + status: "On Track", + quarter: "Q1 2025", + team: "DevOps", + }, + { + id: "2", + title: "Expand Creator Network to 5K Members", + description: "Grow creator base through partnerships and incentives", + owner: "Community", + progress: 62, + status: "On Track", + quarter: "Q1 2025", + team: "Growth", + }, + { + id: "3", + title: "Launch New Learning Curriculum", + description: "Complete redesign of Foundation learning paths", + owner: "Foundation", + progress: 45, + status: "At Risk", + quarter: "Q1 2025", + team: "Education", + }, + { + id: "4", + title: "Achieve 99.99% Uptime", + description: "Maintain service reliability and reduce downtime", + owner: "Infrastructure", + progress: 88, + status: "On Track", + quarter: "Q1 2025", + team: "Ops", + }, + { + id: "5", + title: "Launch Roblox Game Studio Partnership", + description: "Formalize GameForge partnerships with major studios", + owner: "GameForge", + progress: 30, + status: "On Track", + quarter: "Q1 2025", + team: "Partnerships", + }, +]; + +const getStatusColor = (status: string) => { + switch (status) { + case "On Track": + return "bg-green-500/20 text-green-300 border-green-500/30"; + case "At Risk": + return "bg-amber-500/20 text-amber-300 border-amber-500/30"; + case "Completed": + return "bg-blue-500/20 text-blue-300 border-blue-500/30"; + default: + return "bg-slate-500/20 text-slate-300 border-slate-500/30"; + } +}; + +export default function StaffProjectTracking() { + const [selectedTeam, setSelectedTeam] = useState(null); + + const teams = Array.from(new Set(okrs.map((okr) => okr.team))); + + const filtered = selectedTeam + ? okrs.filter((okr) => okr.team === selectedTeam) + : okrs; + + const avgProgress = + Math.round(filtered.reduce((sum, okr) => sum + okr.progress, 0) / filtered.length) || 0; + + return ( + + + +
+ {/* Background effects */} +
+
+
+
+ +
+ {/* Header */} +
+
+
+ +
+
+

+ Project Tracking +

+

+ OKRs, initiatives, and company-wide roadmap +

+
+
+ + {/* Summary */} +
+ + +
+
+

+ Active OKRs +

+

+ {filtered.length} +

+
+ +
+
+
+ + +
+
+

+ Avg Progress +

+

+ {avgProgress}% +

+
+ +
+
+
+ + +
+
+

On Track

+

+ {filtered.filter((o) => o.status === "On Track").length} +

+
+ +
+
+
+
+ + {/* Team Filter */} +
+

Filter by Team:

+
+ + {teams.map((team) => ( + + ))} +
+
+ + {/* OKRs */} +
+ {filtered.map((okr) => ( + + +
+
+ + {okr.title} + + + {okr.description} + +
+ + {okr.status} + +
+
+ +
+
+ Progress + + {okr.progress}% + +
+ +
+
+
+

Owner

+

{okr.owner}

+
+
+

Quarter

+

{okr.quarter}

+
+
+

Team

+

{okr.team}

+
+
+
+
+ ))} +
+
+
+
+ + ); +}