diff --git a/apps/dokploy/components/dashboard/swarm/server-card.tsx b/apps/dokploy/components/dashboard/swarm/server-card.tsx
new file mode 100644
index 00000000..10029114
--- /dev/null
+++ b/apps/dokploy/components/dashboard/swarm/server-card.tsx
@@ -0,0 +1,122 @@
+import { Badge } from "@/components/ui/badge";
+import { Button } from "@/components/ui/button";
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
+import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog";
+import { AlertCircle, CheckCircle, HelpCircle, ServerIcon } from "lucide-react";
+import { useState } from "react";
+import { ShowContainers } from "../docker/show/show-containers";
+// import type { Server } from "../types/server";
+// import { ShowServerContainers } from "./ShowServerContainers";
+
+export interface Server {
+ serverId: string;
+ name: string;
+ description: string | null;
+ ipAddress: string;
+ port: number;
+ username: string;
+ appName: string;
+ enableDockerCleanup: boolean;
+ createdAt: string;
+ adminId: string;
+ serverStatus: "active" | "inactive";
+ command: string;
+ sshKeyId: string | null;
+}
+
+interface ServerOverviewCardProps {
+ server: Server;
+}
+
+export function ServerOverviewCard({ server }: ServerOverviewCardProps) {
+ const [showContainers, setShowContainers] = useState(false);
+
+ const getStatusIcon = (status: string) => {
+ switch (status) {
+ case "active":
+ return ;
+ case "inactive":
+ return ;
+ default:
+ return ;
+ }
+ };
+
+ return (
+
+
+
+
+ {getStatusIcon(server.serverStatus)}
+ {server.name}
+
+
+ {server.serverStatus}
+
+
+
+
+
+
+ IP Address:
+ {server.ipAddress}
+
+
+ Port:
+ {server.port}
+
+
+ Username:
+ {server.username}
+
+
+ App Name:
+ {server.appName}
+
+
+ Docker Cleanup:
+ {server.enableDockerCleanup ? "Enabled" : "Disabled"}
+
+
+ Created At:
+ {new Date(server.createdAt).toLocaleString()}
+
+
+
+
+ {/* */}
+
+ {/* {showContainers && (
+
+
+
+ )} */}
+
+
+ );
+}
diff --git a/apps/dokploy/components/dashboard/swarm/servers/servers-overview.tsx b/apps/dokploy/components/dashboard/swarm/servers/servers-overview.tsx
new file mode 100644
index 00000000..8768a88c
--- /dev/null
+++ b/apps/dokploy/components/dashboard/swarm/servers/servers-overview.tsx
@@ -0,0 +1,24 @@
+import { api } from "@/utils/api";
+import { ServerOverviewCard } from "../server-card";
+
+export default function ServersOverview() {
+ const { data: servers, isLoading } = api.server.all.useQuery();
+
+ if (isLoading) {
+ return
Loading...
;
+ }
+
+ if (!servers) {
+ return No servers found
;
+ }
+ return (
+
+
Server Overview
+
+ {servers.map((server) => (
+
+ ))}
+
+
+ );
+}
diff --git a/apps/dokploy/pages/dashboard/swarm.tsx b/apps/dokploy/pages/dashboard/swarm.tsx
index 11035da7..24fa4326 100644
--- a/apps/dokploy/pages/dashboard/swarm.tsx
+++ b/apps/dokploy/pages/dashboard/swarm.tsx
@@ -1,5 +1,7 @@
import { ShowServers } from "@/components/dashboard/settings/servers/show-servers";
import SwarmMonitorCard from "@/components/dashboard/swarm/monitoring-card";
+import { ServerOverviewCard } from "@/components/dashboard/swarm/server-card";
+import ServersOverview from "@/components/dashboard/swarm/servers/servers-overview";
import ShowApplicationServers from "@/components/dashboard/swarm/servers/show-server";
import ShowSwarmNodes from "@/components/dashboard/swarm/show/show-nodes";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
@@ -18,7 +20,8 @@ const Dashboard = () => {
-
+
+ {/* */}
{/* Swarm Nodes