diff --git a/actions/overview/overview.ts b/actions/overview/overview.ts
new file mode 100644
index 0000000000..8d83ab7088
--- /dev/null
+++ b/actions/overview/overview.ts
@@ -0,0 +1,49 @@
+"use server";
+import { revalidatePath } from "next/cache";
+import { redirect } from "next/navigation";
+
+import { auth } from "@/auth.config";
+import { parseStringify } from "@/lib";
+
+export const getProvidersOverview = async ({
+ page = 1,
+ query = "",
+ sort = "",
+ filters = {},
+}) => {
+ const session = await auth();
+
+ if (isNaN(Number(page)) || page < 1) redirect("/providers-overview");
+
+ const keyServer = process.env.API_BASE_URL;
+ const url = new URL(`${keyServer}/overviews/providers`);
+
+ if (page) url.searchParams.append("page[number]", page.toString());
+ if (query) url.searchParams.append("filter[search]", query);
+ if (sort) url.searchParams.append("sort", sort);
+
+ // Handle multiple filters
+ Object.entries(filters).forEach(([key, value]) => {
+ if (key !== "filter[search]") {
+ url.searchParams.append(key, String(value));
+ }
+ });
+
+ try {
+ const response = await fetch(url.toString(), {
+ headers: {
+ Accept: "application/vnd.api+json",
+ Authorization: `Bearer ${session?.accessToken}`,
+ },
+ });
+
+ const data = await response.json();
+ const parsedData = parseStringify(data);
+ revalidatePath("/providers-overview");
+ return parsedData;
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.error("Error fetching providers overview:", error);
+ return undefined;
+ }
+};
diff --git a/app/(prowler)/page.tsx b/app/(prowler)/page.tsx
index 335b53b4f4..bae0d835c4 100644
--- a/app/(prowler)/page.tsx
+++ b/app/(prowler)/page.tsx
@@ -1,32 +1,42 @@
import { Spacer } from "@nextui-org/react";
+import { Suspense } from "react";
+import { getProvidersOverview } from "@/actions/overview/overview";
+import {
+ ProvidersOverview,
+ SkeletonProvidersOverview,
+} from "@/components/overview";
import { Header } from "@/components/ui";
export default function Home() {
return (
<>
There is no providers overview info available
; + } + + returnNo provider data available
; + } + + const calculatePassingPercentage = (pass: number, total: number) => + total > 0 ? ((pass / total) * 100).toFixed(2) : "0.00"; + + const renderProviderBadge = (providerId: string) => { + switch (providerId) { + case "aws": + return