From 8ca19905d44c1125241f588b27232d6f44c8d0c0 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Thu, 7 May 2026 03:02:49 -0600 Subject: [PATCH] feat: add Jobs page and update navigation - Introduced a new Jobs page showcasing open positions at Dokploy, including details for the Founding Engineer role. - Updated the sitemap to include the new Jobs page for better SEO. - Enhanced the header and footer navigation to link to the Jobs page, improving accessibility for potential candidates. --- apps/website/app/jobs/page.tsx | 111 ++++++++++++++++++ apps/website/app/sitemap.ts | 1 + apps/website/components/Footer.tsx | 5 +- apps/website/components/Header.tsx | 25 ++++ .../website/components/ui/navigation-menu.tsx | 2 +- 5 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 apps/website/app/jobs/page.tsx diff --git a/apps/website/app/jobs/page.tsx b/apps/website/app/jobs/page.tsx new file mode 100644 index 0000000..809a94e --- /dev/null +++ b/apps/website/app/jobs/page.tsx @@ -0,0 +1,111 @@ +import { Container } from "@/components/Container"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; +import { MapPin, ArrowRight } from "lucide-react"; +import Link from "next/link"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Dokploy Jobs & Open Positions", + description: + "Join Dokploy and help developers and teams ship faster with open-source and scalable deployment tools built for the modern web.", +}; + +const OPEN_POSITIONS = [ + { + title: "Founding Engineer", + region: "Central America, South America", + description: "Become the first official hire at Dokploy.", + href: "https://app.talenttracker.io/288/founding-engineer", + }, +]; + +export default function JobsPage() { + return ( +
+ + + {/* Hero */} +
+ +
+

+ Join our company and help redefine how the world deploys software. +

+

+ We're a small, focused team building tools that developers + actually love. If you care about open source, developer experience, + and shipping things that matter — you'll fit right in. +

+ +
+
+
+ + {/* Open Positions */} +
+ +

+ Open positions +

+ + {OPEN_POSITIONS.length > 0 ? ( +
+ {OPEN_POSITIONS.map((position) => ( +
+
+
+

+ {position.title} +

+ + + {position.region} + +
+

+ {position.description} +

+
+ +
+ ))} +
+ ) : ( +
+

+ No open positions at the moment. Check back soon. +

+
+ )} +
+
+ +
+ ); +} diff --git a/apps/website/app/sitemap.ts b/apps/website/app/sitemap.ts index ad9ed84..d8dbbfa 100644 --- a/apps/website/app/sitemap.ts +++ b/apps/website/app/sitemap.ts @@ -11,6 +11,7 @@ const corePages: { path: string; priority: number }[] = [ { path: "/contact", priority: 0.7 }, { path: "/partners", priority: 0.6 }, { path: "/changelog", priority: 0.6 }, + { path: "/jobs", priority: 0.7 }, ]; const featurePages = [ diff --git a/apps/website/components/Footer.tsx b/apps/website/components/Footer.tsx index 4633146..c3f149f 100644 --- a/apps/website/components/Footer.tsx +++ b/apps/website/components/Footer.tsx @@ -78,9 +78,10 @@ const footerSections = [ ], }, { - title: "Legal", - ariaLabel: "Legal and policies", + title: "Company", + ariaLabel: "Company", links: [ + { href: "/jobs", label: "Careers" }, { href: "/terms-of-service", label: "Terms of Service" }, { href: "/privacy", label: "Privacy Policy" }, ], diff --git a/apps/website/components/Header.tsx b/apps/website/components/Header.tsx index 0aad97d..dbd62fc 100644 --- a/apps/website/components/Header.tsx +++ b/apps/website/components/Header.tsx @@ -145,7 +145,9 @@ function MobileNavigation() { Dokploy vs. Blog FAQ + Jobs
+ Careers Contact + + + + trackGAEvent({ + action: "Nav Link Clicked", + category: "Navigation", + label: "/jobs", + }) + } + > + Careers + + + + Resources @@ -319,6 +341,9 @@ export function Header() { Frequently asked questions + + See open positions at Dokploy + diff --git a/apps/website/components/ui/navigation-menu.tsx b/apps/website/components/ui/navigation-menu.tsx index c61601b..cc2d916 100644 --- a/apps/website/components/ui/navigation-menu.tsx +++ b/apps/website/components/ui/navigation-menu.tsx @@ -50,7 +50,7 @@ const NavigationMenuItem = React.forwardRef< NavigationMenuItem.displayName = NavigationMenuPrimitive.Item.displayName const navigationMenuTriggerStyle = cva( - "group inline-flex h-8 w-max items-center justify-center rounded-md bg-background px-3.5 py-1.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent" + "group inline-flex h-8 w-max items-center justify-center rounded-md bg-transparent px-3.5 py-1.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent" ) const NavigationMenuTrigger = React.forwardRef<