diff --git a/apps/web/src/app/dashboard/page.tsx b/apps/web/src/app/dashboard/page.tsx
index 2a230c5..10c9180 100644
--- a/apps/web/src/app/dashboard/page.tsx
+++ b/apps/web/src/app/dashboard/page.tsx
@@ -5,6 +5,7 @@ import { auth } from "@clerk/nextjs/server";
import { eq } from "drizzle-orm";
import { redirect } from "next/navigation";
import Link from "next/link";
+import { HealthBadge } from "@/components/health-badge";
export default async function DashboardPage() {
const { userId } = await auth();
@@ -70,9 +71,14 @@ export default async function DashboardPage() {
{repo.isPrivate ? 'Private' : 'Public'}
-
- {repo.syncStatus}
-
+
+ {repo.healthScore !== null && repo.healthScore !== undefined && (
+
+ )}
+
+ {repo.syncStatus}
+
+
diff --git a/apps/web/src/components/health-badge.tsx b/apps/web/src/components/health-badge.tsx
new file mode 100644
index 0000000..7d5066e
--- /dev/null
+++ b/apps/web/src/components/health-badge.tsx
@@ -0,0 +1,57 @@
+interface HealthBadgeProps {
+ score: number;
+ size?: "sm" | "md" | "lg";
+ showLabel?: boolean;
+}
+
+function getScoreTier(score: number): { label: string; bgColor: string; textColor: string; ringColor: string } {
+ if (score >= 80) {
+ return {
+ label: "Excellent",
+ bgColor: "bg-green-50",
+ textColor: "text-green-700",
+ ringColor: "ring-green-600/20",
+ };
+ }
+ if (score >= 60) {
+ return {
+ label: "Good",
+ bgColor: "bg-blue-50",
+ textColor: "text-blue-700",
+ ringColor: "ring-blue-600/20",
+ };
+ }
+ if (score >= 40) {
+ return {
+ label: "Warning",
+ bgColor: "bg-yellow-50",
+ textColor: "text-yellow-700",
+ ringColor: "ring-yellow-600/20",
+ };
+ }
+ return {
+ label: "Critical",
+ bgColor: "bg-red-50",
+ textColor: "text-red-700",
+ ringColor: "ring-red-600/20",
+ };
+}
+
+const sizeClasses = {
+ sm: "text-xs px-2 py-0.5",
+ md: "text-sm px-2.5 py-1",
+ lg: "text-base px-3 py-1.5",
+};
+
+export function HealthBadge({ score, size = "md", showLabel = true }: HealthBadgeProps) {
+ const tier = getScoreTier(score);
+
+ return (
+
+ {score}
+ {showLabel && {tier.label}}
+
+ );
+}