diff --git a/apps/website/app/deploy-ai/page.tsx b/apps/website/app/deploy-ai/page.tsx new file mode 100644 index 0000000..58a620f --- /dev/null +++ b/apps/website/app/deploy-ai/page.tsx @@ -0,0 +1,323 @@ +import { Container } from "@/components/Container"; +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; +import { Button } from "@/components/ui/button"; +import { + Bot, + Boxes, + Activity, + Users, + MousePointerClick, + Network, + KeyRound, + ShieldCheck, + FlaskConical, + Rocket, + Sparkles, +} from "lucide-react"; +import Link from "next/link"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Deploy AI Apps Securely with Dokploy", + description: + "Empower your team to deploy AI-built apps in a secure, isolated sandbox, with SSO, multitenancy, audit logs, and one-click deploys.", + alternates: { + canonical: "https://dokploy.com/deploy-ai", + }, +}; + +const coreFeatures = [ + { + icon: Bot, + title: "Connect AI agents directly to Dokploy", + description: + "Dokploy's MCP server enables AI agents to interact with your deployment environment through the Model Context Protocol. An AI tool can trigger deployments, query application state, and manage services—without needing a custom integration.", + }, + { + icon: Boxes, + title: "Deploy any app, from any source", + description: + "Whether it's a Git repo, a Docker image, or a Docker Compose file, Dokploy handles it. Non-technical users can go from AI-generated code to a running application without a DevOps team in the loop.", + }, + { + icon: Activity, + title: "Catch issues before they become problems", + description: + "Real-time monitoring, centralized logs, and instant rollback mean that when an AI-built app misbehaves, your team can see why and recover fast—before it touches anything else.", + }, +]; + +const guardrailFeatures = [ + { + icon: Users, + title: "Separate every team's environment", + description: + "Dokploy's multitenancy keeps projects and data isolated at the team level. One team can't see, access, or interfere with another's applications, so AI experimentation stays contained without needing a separate instance per team.", + }, + { + icon: MousePointerClick, + title: "Let anyone deploy without the risk", + description: + "Non-technical users get a clean, simple interface for deploying and managing their apps. There's no CLI to learn and no config file to edit, just a straightforward path from code to running apps that doesn't require an engineer on standby.", + }, + { + icon: Network, + title: "Lock down who can reach your environment", + description: + "Configure IP allowlisting to keep your internal deployment environment off the public internet. Wildcard subdomain support means every app gets its own clean internal URL, with access controlled at the network level.", + }, + { + icon: KeyRound, + title: "Sign in with the identity provider you already use", + description: + "Dokploy supports SSO via Okta, Azure AD, Auth0, and more, with SCIM provisioning and deprovisioning. When someone joins a team, they get access. When they leave, it's revoked automatically—no manual cleanup, no lingering credentials.", + link: { + href: "/features/single-sign-on", + label: "Learn more about SSO", + }, + }, +]; + +const testFreelyPoints = [ + "Deploy AI-built apps without touching production infrastructure", + "Keep all environments fully isolated from live data and services", + "Audit logs record every action across your Dokploy environment", + "Roll back any deployment in seconds if something goes wrong", + "Run experiments that never reach customers until you're ready", +]; + +const empowerTeamPoints = [ + "Sales, design, ops—anyone can deploy an app without IT involvement", + "No infrastructure knowledge required to get from code to URL", + "Subdomain support gives every app a clean, shareable internal link", + "Security and compliance requirements are handled at the platform level", + "Promising projects can graduate to production on your own timeline", +]; + +export default function DeployAIPage() { + return ( +
+ {/* Hero Section */} +
+ + +
+

+ Empower your employees to deploy AI +

+

+ Your teams are building with AI. Talk to an expert to learn how + Dokploy will give them a safe, governed environment to ship those + tools without touching production infrastructure or involving an + engineer. +

+
+ + +
+
+
+
+ + {/* Everything you need to start deploying AI today */} +
+ +
+

+ Everything you need to start deploying AI today +

+

+ Dokploy is built to take an app from an AI coding tool to a live, + internal URL in minutes. +

+
+
+ {coreFeatures.map((feature) => ( +
+
+ +
+

{feature.title}

+

+ {feature.description} +

+
+ ))} +
+
+
+ + {/* Built for teams that need guardrails, not gatekeepers */} +
+ +
+

+ Built for teams that need guardrails, not gatekeepers +

+

+ AI-generated code moves fast. Dokploy's enterprise features + make sure that speed doesn't come at the cost of security or + control. +

+
+
+ {guardrailFeatures.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+ {feature.link ? ( + + {feature.link.label} → + + ) : null} +
+ ))} +
+
+ +
+
+
+ + {/* Test freely. Ship confidently. */} +
+ +
+

+ Test freely. Ship confidently. +

+

+ A dedicated internal sandbox means your teams can move fast + without creating risk for the rest of the business. +

+
+
+
+
+ +
+

Test without the risk

+
    + {testFreelyPoints.map((point) => ( +
  • + + {point} +
  • + ))} +
+
+
+
+ +
+

Empower your team

+
    + {empowerTeamPoints.map((point) => ( +
  • + + {point} +
  • + ))} +
+
+
+
+
+ + {/* Openclaw */} +
+ +
+
+ +
+

+ Get started with Openclaw in one click +

+

+ Openclaw is an open-source AI-powered coding assistant that you + can self-host on Dokploy with a single template deploy. It gives + your team a private, internal AI coding environment, and no data + leaves your infrastructure. +

+
+ +
+
+
+
+ + {/* Dokploy Cloud CTA */} +
+ +
+

+ Unlock Your Deployment Potential with Dokploy Cloud +

+

+ Say goodbye to infrastructure hassles, Dokploy Cloud handles it + all. Effortlessly deploy, manage Docker containers, and secure + your traffic with Traefik. Focus on building, we'll handle + the rest. +

+
+ +
+
+
+
+
+ ); +} diff --git a/apps/website/app/sitemap.ts b/apps/website/app/sitemap.ts index 7d4b9e8..8c42544 100644 --- a/apps/website/app/sitemap.ts +++ b/apps/website/app/sitemap.ts @@ -1,35 +1,80 @@ import { getPosts } from "@/lib/ghost"; import type { MetadataRoute } from "next"; +const BASE_URL = "https://dokploy.com"; + +const corePages: { path: string; priority: number }[] = [ + { path: "/pricing", priority: 0.9 }, + { path: "/enterprise", priority: 0.9 }, + { path: "/deploy-ai", priority: 0.8 }, + { path: "/contact", priority: 0.7 }, + { path: "/partners", priority: 0.6 }, + { path: "/changelog", priority: 0.6 }, +]; + +const featurePages = [ + "/features/application-deployment-platform", + "/features/application-management-software", + "/features/database-management-tool", + "/features/role-based-access-control", + "/features/single-sign-on", + "/features/audit-logs", + "/features/white-labeling", +]; + +const comparisonPages = [ + "/comparison", + "/dokploy-vs-coolify", + "/dokploy-vs-portainer", + "/dokploy-vs-caprover", + "/dokploy-vs-dokku", +]; + +const legalPages = ["/terms-of-service", "/terms", "/privacy"]; + export default async function sitemap(): Promise { const posts = await getPosts(); + const now = new Date(); + return [ { - url: "https://dokploy.com", - lastModified: new Date(), + url: BASE_URL, + lastModified: now, changeFrequency: "monthly", priority: 1, }, { - url: "https://dokploy.com/blog", - lastModified: new Date(), - changeFrequency: "monthly", + url: `${BASE_URL}/blog`, + lastModified: now, + changeFrequency: "weekly", priority: 0.8, }, - { - url: "https://dokploy.com/terms-of-service", - lastModified: new Date(), - changeFrequency: "yearly", - priority: 0.5, - }, - { - url: "https://dokploy.com/privacy", - lastModified: new Date(), - changeFrequency: "yearly", - priority: 0.5, - }, + ...corePages.map(({ path, priority }) => ({ + url: `${BASE_URL}${path}`, + lastModified: now, + changeFrequency: "monthly" as const, + priority, + })), + ...featurePages.map((path) => ({ + url: `${BASE_URL}${path}`, + lastModified: now, + changeFrequency: "monthly" as const, + priority: 0.7, + })), + ...comparisonPages.map((path) => ({ + url: `${BASE_URL}${path}`, + lastModified: now, + changeFrequency: "monthly" as const, + priority: 0.6, + })), + ...legalPages.map((path) => ({ + url: `${BASE_URL}${path}`, + lastModified: now, + changeFrequency: "yearly" as const, + priority: 0.3, + })), ...posts.map((post) => ({ - url: `https://dokploy.com/blog/${post.slug}`, + url: `${BASE_URL}/blog/${post.slug}`, lastModified: new Date(post.published_at), changeFrequency: "monthly" as const, priority: 0.8, diff --git a/apps/website/components/Footer.tsx b/apps/website/components/Footer.tsx index caf0de6..a727545 100644 --- a/apps/website/components/Footer.tsx +++ b/apps/website/components/Footer.tsx @@ -21,6 +21,7 @@ const footerSections = [ href: "/features/database-management-tool", label: "Databases", }, + { href: "/deploy-ai", label: "Deploy AI" }, { href: "/enterprise", label: "Enterprise" }, { href: "/contact", label: "Contact" }, ],