feat: restructure pricing section and create dedicated pricing page

- Removed the Pricing component from the homepage and created a new dedicated Pricing page.
- Updated navigation links to point to the new Pricing page instead of the homepage section.
- Enhanced the Pricing component with an animated grid pattern for improved visual appeal.
This commit is contained in:
Mauricio Siu
2026-03-10 11:30:09 -06:00
parent 98238483af
commit 4501b700a2
6 changed files with 35 additions and 26 deletions

View File

@@ -13,7 +13,7 @@ UI is installed, which can be a challenge if you don't have the resources to do
Dokploy cloud starts from $4.50 per month per server, the next is 3.50$, and you can deploy as many applications you want to your remote server connected to a dokploy cloud, multi server feature is recommended for HA and scalability projects.
You can start by registering on the [Dokploy Cloud](https://app.dokploy.com) website and follow the steps to deploy your apps, see the [Pricing](https://dokploy.com#pricing) page for more information.
You can start by registering on the [Dokploy Cloud](https://app.dokploy.com) website and follow the steps to deploy your apps, see the [Pricing](https://dokploy.com/pricing) page for more information.

View File

@@ -3,7 +3,6 @@ import { Faqs } from "@/components/Faqs";
import { Hero } from "@/components/Hero";
import { Testimonials } from "@/components/Testimonials";
import { FirstFeaturesSection } from "@/components/first-features";
import { Pricing } from "@/components/pricing";
import { SecondaryFeaturesSections } from "@/components/secondary-features";
import { Sponsors } from "@/components/sponsors";
import { StatsSection } from "@/components/stats";
@@ -26,9 +25,6 @@ export default function Home() {
<SecondaryFeaturesSections />
<StatsSection />
<Testimonials />
<div className="relative w-full">
<Pricing />
</div>
<Faqs />
{/* <Sponsors /> */}
<CallToAction />

View File

@@ -0,0 +1,16 @@
import { Pricing } from "@/components/pricing";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Pricing",
description:
"Simple, affordable pricing for Dokploy. Choose the plan that fits your needs.",
};
export default function PricingPage() {
return (
<div className="relative w-full">
<Pricing />
</div>
);
}

View File

@@ -12,7 +12,7 @@ const footerSections = [
links: [
{ href: "/", label: "Home" },
{ href: "/#features", label: "Features" },
{ href: "/#pricing", label: "Pricing" },
{ href: "/pricing", label: "Pricing" },
{
href: "/features/application-deployment-platform",
label: "Application Deployment Platform",

View File

@@ -118,7 +118,7 @@ function MobileNavigation() {
as="div"
className="absolute inset-x-0 top-full mt-4 flex origin-top flex-col rounded-2xl border border-border bg-background p-4 text-lg tracking-tight text-primary shadow-xl ring-1 ring-border/5"
>
<MobileNavLink href="/#pricing">Pricing</MobileNavLink>
<MobileNavLink href="/pricing">Pricing</MobileNavLink>
<MobileNavLink href="/#faqs">FAQ</MobileNavLink>
<MobileNavLink
href="https://docs.dokploy.com/docs/core"
@@ -162,7 +162,7 @@ export function Header() {
<Logo className="h-10 w-auto" />
</Link>
<div className="hidden md:flex md:gap-x-6">
<NavLink href="/#pricing">Pricing</NavLink>
<NavLink href="/pricing">Pricing</NavLink>
<NavLink href="/#faqs">FAQ</NavLink>
<NavLink
href="https://docs.dokploy.com/docs/core"

View File

@@ -10,6 +10,8 @@ import { Badge } from "./ui/badge";
import { Button, buttonVariants } from "./ui/button";
import { Tabs, TabsList, TabsTrigger } from "./ui/tabs";
import { PricingFeatureTable } from "./pricing/PricingFeatureTable";
import AnimatedGridPattern from "./ui/animated-grid-pattern";
import { cn } from "@/lib/utils";
const CLOUD_APP_URL = "https://app.dokploy.com";
@@ -86,25 +88,20 @@ export function Pricing() {
<section
id="pricing"
aria-label="Pricing"
className="border-t border-border/30 bg-black py-20 sm:py-32"
className="relative border-t border-border/30 bg-black py-20 sm:py-32 overflow-hidden"
>
<div className="absolute inset-0 pointer-events-none">
<svg viewBox="0 0 2000 1000" xmlns="http://www.w3.org/2000/svg">
<mask id="b" x="0" y="0" width="2000" height="1000">
<path fill="url(#a)" d="M0 0h2000v1000H0z" />
</mask>
<path d="M0 0h2000v1000H0z" />
<g stroke="#22222233" strokeWidth=".4" fill="none" mask="url(#b)">
<path d="M0 0h50v50H0z" />
</g>
<defs>
<radialGradient id="a">
<stop offset="50%" stopColor="#fff" stopOpacity="0" />
<stop offset="1" stopColor="#fff" stopOpacity="1" />
</radialGradient>
</defs>
</svg>
</div>
<AnimatedGridPattern
numSquares={30}
maxOpacity={0.1}
height={40}
width={40}
duration={3}
repeatDelay={1}
className={cn(
"[mask-image:radial-gradient(800px_circle_at_center,white,transparent)]",
"absolute inset-x-0 inset-y-[-30%] h-[200%] skew-y-12",
)}
/>
<Container className="relative">
<div className="text-center">
<h2 className="font-display text-3xl tracking-tight text-white sm:text-4xl">