feat: add website

This commit is contained in:
Mauricio Siu
2024-10-27 21:47:19 -06:00
parent e68e208653
commit e35559156a
50 changed files with 4461 additions and 11056 deletions

View File

@@ -0,0 +1,5 @@
import { notFound } from "next/navigation";
export default function CatchAll() {
notFound();
}

106
app/[locale]/layout.tsx Normal file
View File

@@ -0,0 +1,106 @@
import clsx from "clsx";
import { Inter, Lexend } from "next/font/google";
import "@/styles/tailwind.css";
import { NextIntlClientProvider } from "next-intl";
import { getMessages } from "next-intl/server";
import { Footer } from "@/components/Footer";
import { Header } from "@/components/Header";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: {
default: "Dokploy - Effortless Deployment Solutions",
template: "%s | Simplify Your DevOps",
},
alternates: {
canonical: "https://dokploy.com",
languages: {
en: "https://dokploy.com",
},
},
description:
"Streamline your deployment process with Dokploy. Effortlessly manage applications and databases on any VPS using Docker and Traefik for improved performance and security.",
applicationName: "Dokploy",
keywords: [
"Dokploy",
"Docker",
"Traefik",
"deployment",
"VPS",
"application management",
"database management",
"DevOps",
"cloud infrastructure",
"UI Self hosted",
],
referrer: "origin",
robots: "index, follow",
openGraph: {
type: "website",
url: "https://dokploy.com",
title: "Dokploy - Effortless Deployment Solutions",
description:
"Simplify your DevOps with Dokploy. Deploy applications and manage databases efficiently on any VPS.",
siteName: "Dokploy",
images: [
{
url: "http://dokploy.com/og.png",
},
],
},
twitter: {
card: "summary_large_image",
site: "@Dokploy",
creator: "@Dokploy",
title: "Dokploy - Simplify Your DevOps",
description:
"Deploy applications and manage databases with ease using Dokploy. Learn how our platform can elevate your infrastructure management.",
images: "https://dokploy.com/og.png",
},
};
const inter = Inter({
subsets: ["latin"],
display: "swap",
variable: "--font-inter",
});
const lexend = Lexend({
subsets: ["latin"],
display: "swap",
variable: "--font-lexend",
});
export default async function RootLayout({
children,
params,
}: {
children: React.ReactNode;
params: { locale: string };
}) {
const { locale } = params;
const messages = await getMessages();
return (
<html
lang={locale}
className={clsx("h-full scroll-smooth", inter.variable, lexend.variable)}
>
<head>
<script
defer
src="https://umami.dokploy.com/script.js"
data-website-id="7d1422e4-3776-4870-8145-7d7b2075d470"
/>
</head>
{/* <GoogleAnalytics /> */}
<body className="flex h-full flex-col">
<NextIntlClientProvider messages={messages}>
<Header />
{children}
<Footer />
</NextIntlClientProvider>
</body>
</html>
);
}

View File

@@ -0,0 +1,5 @@
import { SlimLayout } from "@/components/SlimLayout";
export default function NotFound() {
return <SlimLayout />;
}

20
app/[locale]/page.tsx Normal file
View File

@@ -0,0 +1,20 @@
import { CallToAction } from "@/components/CallToAction";
import { Faqs } from "@/components/Faqs";
import { Hero } from "@/components/Hero";
import { PrimaryFeatures } from "@/components/PrimaryFeatures";
import { SecondaryFeatures } from "@/components/SecondaryFeatures";
export default function Home() {
return (
<div>
<main>
<Hero />
<PrimaryFeatures />
<SecondaryFeatures />
<CallToAction />
{/* <Testimonials /> */}
<Faqs />
</main>
</div>
);
}

View File

@@ -0,0 +1,9 @@
import { Pricing } from "@/components/pricing";
export default function Home() {
return (
<div className="w-full">
<Pricing />
</div>
);
}

View File

@@ -0,0 +1,111 @@
export default function Home() {
return (
<div className="flex flex-col gap-4 w-full max-w-4xl mx-auto">
<h1 className="text-3xl font-bold text-center mb-6">Privacy</h1>
<section className="flex flex-col gap-2">
<p>
At Dokploy, we are committed to protecting your privacy. This Privacy
Policy explains how we collect, use, and safeguard your personal
information when you use our website and services.
</p>
<p>
By using Dokploy, you agree to the collection and use of information
in accordance with this Privacy Policy. If you do not agree with these
practices, please do not use our services.
</p>
<h2 className="text-2xl font-semibold mb-4">
1. Information We Collect
</h2>
<p className="">
We only collect limited, non-personal data through Umami Analytics, a
privacy-focused analytics tool. No personal identifying information
(PII) is collected. The data we collect includes:
</p>
<ul className="list-disc list-inside mb-4">
<li>Website usage statistics (e.g., page views, session duration)</li>
<li>Anonymized IP addresses</li>
<li>Referring websites</li>
<li>Browser and device type</li>
</ul>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">
2. How We Use the Information
</h2>
<p className="mb-4">
The information we collect is used solely for improving the
functionality and user experience of our platform. Specifically, we
use it to:
</p>
<ul className="list-disc list-inside mb-4">
<li>Monitor traffic and website performance</li>
<li>Optimize the user experience</li>
<li>Understand how users interact with our platform</li>
</ul>
<p>
Additionally, we use a single cookie to manage user sessions, which is
necessary for the proper functioning of the platform.
</p>
</section>
<section className="flex flex-col gap-2">
<h2 className="text-2xl font-semibold mb-4">3. Data Security</h2>
<p className="">
We take reasonable precautions to protect your data. Since we do not
collect personal information, the risk of data misuse is minimized.
Umami Analytics is privacy-friendly and does not rely on cookies or
store PII.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">4. Third-Party Services</h2>
<p>
We do not share your data with any third-party services other than
Umami Analytics. We do not sell, trade, or transfer your data to
outside parties.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">5. Cookies</h2>
<p className="mb-4">
Dokploy does not use cookies to track user activity. Umami Analytics
is cookie-free and does not require any tracking cookies for its
functionality.
</p>
</section>
<section className="flex flex-col gap-2">
<h2 className="text-2xl font-semibold mb-4">
6. Changes to This Privacy Policy
</h2>
<p className="">
We may update this Privacy Policy from time to time. Any changes will
be posted on this page, and it is your responsibility to review this
policy periodically.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">12. Contact Information</h2>
<p className="mb-4">
If you have any questions or concerns regarding these Privacy Policy,
please contact us at:
</p>
<p className="mb-4">
Email:
<a
href="mailto:support@dokploy.com"
className="text-blue-500 hover:underline"
>
support@dokploy.com
</a>
</p>
</section>
</div>
);
}

205
app/[locale]/terms/page.tsx Normal file
View File

@@ -0,0 +1,205 @@
export default function Home() {
return (
<div className="flex flex-col gap-4 w-full max-w-4xl mx-auto">
<h1 className="text-3xl font-bold text-center mb-6">
Terms and Conditions
</h1>
<section className="flex flex-col gap-2">
<p>
Welcome to Dokploy! These Terms and Conditions outline the rules and
regulations for the use of Dokploys website and services.
</p>
<p>
By accessing or using our services, you agree to be bound by the
following terms. If you do not agree with these terms, please do not
use our website or services.
</p>
<h2 className="text-2xl font-semibold mb-4">1. Definitions</h2>
<p className="">
Website: Refers to the website of Dokploy (
<a
href="https://dokploy.com"
className="text-blue-500 hover:underline"
>
https://dokploy.com
</a>
) and its subdomains.
</p>
<p>
Services: The platform and related services offered by Dokploy for
deploying and managing applications using Docker and other related
tools.
</p>
<p>User: Any individual or organization using Dokploy.</p>
<p>
Subscription: The paid plan for using additional features, resources,
or server capacity.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">2. Service Description</h2>
<p className="mb-4">
Dokploy is a platform that allows users to deploy and manage web
applications on their own servers using custom builders and Docker
technology. Dokploy offers both free and paid services, including
subscriptions for adding additional servers, features, or increased
capacity.
</p>
</section>
<section className="flex flex-col gap-2">
<h2 className="text-2xl font-semibold mb-4">
3. User Responsibilities
</h2>
<p className="">
Users are responsible for maintaining the security of their accounts,
servers, and applications deployed through Dokploy.
</p>
<p className="">
Users must not use the platform for illegal activities, including but
not limited to distributing malware, violating intellectual property
rights, or engaging in cyberattacks.
</p>
<p className="">
Users must comply with all local, state, and international laws in
connection with their use of Dokploy.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">
4. Subscription and Payment
</h2>
<ul className="list-disc list-inside mb-4">
<li>
By purchasing a subscription, users agree to the pricing and payment
terms detailed on the website or via Paddle (our payment processor).
</li>
<li>
Subscriptions renew automatically unless canceled by the user before
the renewal date.
</li>
</ul>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">5. Refund Policy</h2>
<p className="mb-4">
Due to the nature of our digital services, Dokploy operates on a
no-refund policy for any paid subscriptions, except where required by
law. We offer a self-hosted version of Dokploy with the same core
functionalities, which users can deploy and use without any cost. We
recommend users try the self-hosted version to evaluate the platform
before committing to a paid subscription.
</p>
</section>
<section className="flex flex-col gap-2">
<h2 className="text-2xl font-semibold mb-4">
6. Limitations of Liability
</h2>
<p className="">
Dokploy is provided "as is" without any warranties, express or
implied, including but not limited to the availability, reliability,
or accuracy of the service.
</p>
<p className="">
Users are fully responsible for any modifications made to their remote
servers or the environment where Dokploy is deployed. Any changes to
the server configuration, system settings, security policies, or other
environments that deviate from the recommended use of Dokploy may
result in compatibility issues, performance degradation, or security
vulnerabilities. Additionally, Dokploy may not function properly on
unsupported operating systems or environments. We do not guarantee the
platform will operate correctly or reliably under modified server
conditions or on unsupported systems, and we will not be held liable
for any disruptions, malfunctions, or damages resulting from such
changes or unsupported configurations.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">
7. Service Modifications and Downtime
</h2>
<p className="mb-4">
While we strive to provide uninterrupted service, there may be periods
of downtime due to scheduled maintenance or upgrades to our
infrastructure, such as server maintenance or system improvements. We
will provide notice to users ahead of any planned maintenance.
</p>
</section>
<section className="flex flex-col gap-2">
<h2 className="text-2xl font-semibold mb-4">
8. Intellectual Property
</h2>
<p className="">
Dokploy retains all intellectual property rights to the platform,
including code, design, and content.
</p>
<p className="">
Users are granted a limited, non-exclusive, and non-transferable
license to use Dokploy in accordance with these terms.
</p>
<p className="">
Users may not modify, reverse-engineer, or distribute any part of the
platform without express permission.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">9. Termination</h2>
<p className="mb-4">
Dokploy reserves the right to suspend or terminate access to the
platform for users who violate these terms or engage in harmful
behavior.
</p>
<p className="mb-4">
Users may terminate their account at any time by contacting support.
Upon termination, access to the platform will be revoked, and any
stored data may be permanently deleted.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">10. Changes to Terms</h2>
<p className="mb-4">
Dokploy reserves the right to update these Terms & Conditions at any
time. Changes will be effective immediately upon posting on the
website. It is the user's responsibility to review these terms
periodically.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">11. Governing Law</h2>
<p className="mb-4">
These Terms & Conditions are governed by applicable laws based on the
user's location. Any disputes arising under these terms will be
resolved in accordance with the legal jurisdiction relevant to the
users location, unless otherwise required by applicable law.
</p>
</section>
<section className="">
<h2 className="text-2xl font-semibold mb-4">12. Contact Information</h2>
<p className="mb-4">
If you have any questions or concerns regarding these Terms, you can
reach us at:
</p>
<p className="mb-4">
Email:
<a
href="mailto:support@dokploy.com"
className="text-blue-500 hover:underline"
>
support@dokploy.com
</a>
</p>
</section>
</div>
);
}

View File

@@ -1,98 +1,11 @@
import { Inter, Lexend } from "next/font/google";
import clsx from "clsx";
import "@/styles/tailwind.css";
import type { Metadata } from "next";
import GoogleAnalytics from "@/components/analitycs/google";
import type { ReactNode } from "react";
export const metadata: Metadata = {
title: {
default: "Dokploy - Effortless Deployment Solutions",
template: "%s | Simplify Your DevOps",
},
alternates: {
canonical: "https://dokploy.com",
languages: {
en: "https://dokploy.com",
},
},
description:
"Streamline your deployment process with Dokploy. Effortlessly manage applications and databases on any VPS using Docker and Traefik for improved performance and security.",
applicationName: "Dokploy",
keywords: [
"Dokploy",
"Docker",
"Traefik",
"deployment",
"VPS",
"application management",
"database management",
"DevOps",
"cloud infrastructure",
"UI Self hosted",
],
referrer: "origin",
robots: "index, follow",
openGraph: {
type: "website",
url: "https://dokploy.com",
title: "Dokploy - Effortless Deployment Solutions",
description:
"Simplify your DevOps with Dokploy. Deploy applications and manage databases efficiently on any VPS.",
siteName: "Dokploy",
images: [
{
url: "http://dokploy.com/og.png",
},
],
},
twitter: {
card: "summary_large_image",
site: "@Dokploy",
creator: "@Dokploy",
title: "Dokploy - Simplify Your DevOps",
description:
"Deploy applications and manage databases with ease using Dokploy. Learn how our platform can elevate your infrastructure management.",
images: "https://dokploy.com/og.png",
},
type Props = {
children: ReactNode;
};
const inter = Inter({
subsets: ["latin"],
display: "swap",
variable: "--font-inter",
});
const lexend = Lexend({
subsets: ["latin"],
display: "swap",
variable: "--font-lexend",
});
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html
lang="en"
className={clsx("h-full scroll-smooth ", inter.variable, lexend.variable)}
>
<GoogleAnalytics />
<body className="flex h-full flex-col">{children}</body>
<a
className="fixed bottom-0 right-0 m-4"
href="https://www.producthunt.com/posts/dokploy?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-dokploy"
target="_blank"
rel="noreferrer"
>
<img
src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=454418&theme=light"
alt="Dokploy - Open&#0045;source&#0032;alternative&#0032;to&#0032;Heroku&#0044;&#0032;Vercel&#0044;&#0032;and&#0032;Netlify&#0046; | Product Hunt"
width="250"
height="54"
/>
</a>
</html>
);
// Since we have a `not-found.tsx` page on the root, a layout file
// is required, even if it's just passing children through.
export default function RootLayout({ children }: Props) {
return children;
}

View File

@@ -1,27 +1,13 @@
import Link from "next/link";
"use client";
// import { Button } from "../components/Button";
import { Logo } from "../components/shared/Logo";
import { SlimLayout } from "../components/SlimLayout";
import NextError from "next/error";
export default function NotFound() {
return (
<SlimLayout>
<div className="flex">
<Link href="/" aria-label="Home">
<Logo className="h-10 w-auto" />
</Link>
</div>
<p className="mt-20 text-sm font-medium text-gray-700">404</p>
<h1 className="mt-3 text-lg font-semibold text-gray-900">
Page not found
</h1>
<p className="mt-3 text-sm text-gray-700">
Sorry, we couldnt find the page youre looking for.
</p>
{/* <Button href="/" className="mt-10">
Go back home
</Button> */}
</SlimLayout>
<html lang="en">
<body>
<NextError statusCode={404} />
</body>
</html>
);
}

View File

@@ -1,25 +0,0 @@
import { CallToAction } from "../components/CallToAction";
import { Faqs } from "../components/Faqs";
import { Footer } from "../components/Footer";
import { Header } from "../components/Header";
import { Hero } from "../components/Hero";
import { PrimaryFeatures } from "../components/PrimaryFeatures";
import { SecondaryFeatures } from "../components/SecondaryFeatures";
import { Testimonials } from "../components/Testimonials";
export default function Home() {
return (
<div>
<Header />
<main>
<Hero />
<PrimaryFeatures />
<SecondaryFeatures />
<CallToAction />
{/* <Testimonials /> */}
<Faqs />
<Footer />
</main>
</div>
);
}