diff --git a/apps/dokploy/components/layouts/dashboard-layout.tsx b/apps/dokploy/components/layouts/dashboard-layout.tsx
index b4832b4b3..b65e7dbb8 100644
--- a/apps/dokploy/components/layouts/dashboard-layout.tsx
+++ b/apps/dokploy/components/layouts/dashboard-layout.tsx
@@ -11,11 +11,20 @@ interface Props {
export const DashboardLayout = ({ children }: Props) => {
const { data: haveRootAccess } = api.user.haveRootAccess.useQuery();
const { data: isCloud } = api.settings.isCloud.useQuery();
+ const { data: isUserSubscribed } = api.settings.isUserSubscribed.useQuery(
+ undefined,
+ {
+ enabled: isCloud === true,
+ refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ },
+ );
return (
<>
{children}
- {isCloud === true && (
+ {isCloud === true && isUserSubscribed === true && (
)}
diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts
index 7ae0b6e85..e6a15af24 100644
--- a/apps/dokploy/server/api/routers/settings.ts
+++ b/apps/dokploy/server/api/routers/settings.ts
@@ -45,7 +45,7 @@ import {
} from "@dokploy/server";
import { generateOpenApiDocument } from "@dokploy/trpc-openapi";
import { TRPCError } from "@trpc/server";
-import { sql } from "drizzle-orm";
+import { eq, sql } from "drizzle-orm";
import { dump, load } from "js-yaml";
import { scheduledJobs, scheduleJob } from "node-schedule";
import { z } from "zod";
@@ -60,6 +60,8 @@ import {
apiServerSchema,
apiTraefikConfig,
apiUpdateDockerCleanup,
+ projects,
+ server,
} from "@/server/db/schema";
import { removeJob, schedule } from "@/server/utils/backup";
import packageInfo from "../../../package.json";
@@ -706,6 +708,18 @@ export const settingsRouter = createTRPCRouter({
isCloud: publicProcedure.query(async () => {
return IS_CLOUD;
}),
+ isUserSubscribed: publicProcedure.query(async ({ ctx }) => {
+ const haveServers = await db.query.server.findMany({
+ where: eq(server.organizationId, ctx.session?.activeOrganizationId || ""),
+ });
+ const haveProjects = await db.query.projects.findMany({
+ where: eq(
+ projects.organizationId,
+ ctx.session?.activeOrganizationId || "",
+ ),
+ });
+ return haveServers.length > 0 || haveProjects.length > 0;
+ }),
health: publicProcedure.query(async () => {
if (IS_CLOUD) {
try {