Feat/monorepo (#292)

* feat(create-turbo): apply official-starter transform

* refactor: move folder

* wip: monorepo

* feat: add builf

* refactor: add pr

* update

* add .env

* refactor: update build

* refactor: update build docker

* refactor: add progress plain

* refactor: remove node pty

* refactor: remove

* remove

* refactor: update

* refacotr: uopdate

* refactor: add remix app

* add env

* refactor: add pnpm start

* refactor: remove

* refactor: remove folders

* refactor: remove .dockerfile

* chore: update biome

* test

* choe: add husky

* remove .docker folder

* feat: add docs website

* refactor: add husky

* chore(version): bump version

* refactor: add new changes

* refactor: update circle path

* refactor: update

* refactor: update

* refactor: update dockerfile

* refactor: update dockerfile

* refactor: update command

* refactor: update

* refactor: update dockerfile

* refactor: add tsx

* refactor: update dockerfile

* refactor: add deps

* refactor: up[date

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: yuodate

* refactor: remove

* refactor: uncomment

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: updare

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: imprt

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: remove

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: change path

* refactor: update

* refactor: update

* refactor: upoadte

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: add

* refactor: update

* refactor: update

* refactor: add

* refactor: update

* refactor: remove

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: removed

* refactor: update

* refactor: update

* refactor: update

* refactor: add config

* refactor: update

* refactor: add

* refactor: update

* refactor: update

* refactor: remove

* refactor: update

* refactor: remove

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: add docs

* refactor: update

* refactor: add website

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: add ignore builds

* refactor: update

* refactor: update

* refactor: add

* refactor: update

* refactor: update

* refactor: remove needs

* refactor: update

* refactor: update

* refactor: add config

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: remove

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: add

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: upodate

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update

* refactor: update package json

* refactor: add biome

* refactor: add sponsors

* refactor: update

* refactor: update

* refactor: remove

* refactor: update

* refactor: update

* refactor: update

* refactor: update scripts

* refactor: remove

* refactor: update

* refactor: remove

---------

Co-authored-by: Turbobot <turbobot@vercel.com>
This commit is contained in:
Mauricio Siu
2024-07-29 23:08:23 -06:00
committed by GitHub
parent 9eba4f8b84
commit 5280c861e8
942 changed files with 87366 additions and 6709 deletions

View File

@@ -0,0 +1,104 @@
import { getLanguages, getPage } from "@/app/source";
import { url, baseUrl } from "@/utils/metadata";
import { DocsBody, DocsPage } from "fumadocs-ui/page";
import type { Metadata } from "next";
import { notFound, permanentRedirect } from "next/navigation";
export default async function Page({
params,
}: {
params: { lang: string; slug?: string[] };
}) {
const page = getPage(params.slug, params.lang);
if (page == null) {
permanentRedirect("/docs/core/get-started/introduction");
}
const MDX = page.data.exports.default;
return (
<DocsPage toc={page.data.exports.toc}>
<DocsBody>
<h1>{page.data.title}</h1>
<MDX />
</DocsBody>
</DocsPage>
);
}
export async function generateStaticParams() {
return getLanguages().flatMap(({ language, pages }) =>
pages.map((page) => ({
lang: language,
slug: page.slugs,
})),
);
}
export function generateMetadata({
params,
}: {
params: { lang: string; slug?: string[] };
}) {
const page = getPage(params.slug, params.lang);
if (page == null) {
permanentRedirect("/docs/core/get-started/introduction");
}
return {
title: page.data.title,
description: page.data.description,
robots: "index,follow",
alternates: {
canonical: new URL(`${baseUrl}${page.url}`).toString(),
languages: {
zh: `${baseUrl}/cn${page.url.replace("/cn", "")}`,
en: `${baseUrl}/en${page.url.replace("/en", "")}`,
},
},
openGraph: {
title: page.data.title,
description: page.data.description,
url: new URL(`${baseUrl}`).toString(),
images: [
{
url: new URL(
`${baseUrl}/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Flogo.7cfd81d9.png&w=828&q=75`,
).toString(),
width: 1200,
height: 630,
alt: page.data.title,
},
],
},
twitter: {
card: "summary_large_image",
creator: "@siumauricio",
title: page.data.title,
description: page.data.description,
images: [
{
url: new URL(
`${baseUrl}/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Flogo.7cfd81d9.png&w=828&q=75`,
).toString(),
width: 1200,
height: 630,
alt: page.data.title,
},
],
},
applicationName: "Dokploy Docs",
keywords: [
"dokploy",
"vps",
"open source",
"cloud",
"self hosting",
"free",
],
icons: {
icon: "/icon.svg",
},
} satisfies Metadata;
}

View File

@@ -0,0 +1,128 @@
import { RootToggle } from "fumadocs-ui/components/layout/root-toggle";
import { I18nProvider } from "fumadocs-ui/i18n";
import { DocsLayout } from "fumadocs-ui/layout";
import { RootProvider } from "fumadocs-ui/provider";
import { Inter } from "next/font/google";
import type { ReactNode } from "react";
import { baseOptions } from "../layout.config";
import { pageTree } from "../source";
import "../global.css";
import GoogleAnalytics from "@/components/analytics/google";
import {
LibraryIcon,
type LucideIcon,
PlugZapIcon,
TerminalIcon,
} from "lucide-react";
const inter = Inter({
subsets: ["latin"],
});
interface Mode {
param: string;
name: string;
package: string;
description: string;
icon: LucideIcon;
}
const modes: Mode[] = [
{
param: "core/get-started/introduction",
name: "Core",
package: "Dokploy",
description: "The core",
icon: LibraryIcon,
},
{
param: "cli",
name: "CLI",
package: "fumadocs-ui",
description: "Interactive CLI",
icon: TerminalIcon,
},
{
param: "api",
name: "API",
package: "fumadocs-mdx",
description: "API Documentation",
icon: PlugZapIcon,
},
];
export default function Layout({
params,
children,
}: {
params: { lang: string };
children: ReactNode;
}) {
return (
<html
lang={params.lang}
className={inter.className}
suppressHydrationWarning
>
<GoogleAnalytics />
<body>
<I18nProvider
locale={params.lang}
translations={{
en: {
name: "English",
},
cn: {
name: "Chinese",
toc: "目錄",
search: "搜尋文檔",
lastUpdate: "最後更新於",
searchNoResult: "沒有結果",
previousPage: "上一頁",
nextPage: "下一頁",
chooseLanguage: "選擇語言",
},
}}
>
<RootProvider>
<DocsLayout
i18n
tree={pageTree[params.lang]}
nav={{
title: params.lang === "cn" ? "目錄" : "Dokploy",
url: `/${params.lang}`,
transparentMode: "none",
}}
sidebar={{
// defaultOpenLevel: 0,
banner: (
<RootToggle
options={modes.map((mode) => {
return {
url: `/${params.lang}/docs/${mode.param}`,
icon: (
<mode.icon
className="size-9 shrink-0 rounded-md bg-gradient-to-t from-background/80 p-1.5"
style={{
backgroundColor: `hsl(var(--${mode.param}-color)/.3)`,
color: `hsl(var(--${mode.param}-color))`,
}}
/>
),
title: mode.name,
description: mode.description,
};
})}
/>
),
}}
{...baseOptions}
>
{children}
</DocsLayout>
</RootProvider>
</I18nProvider>
</body>
</html>
);
}