move docs content to its own repo
Some checks failed
Deploy / deploy (ubuntu-latest, 2.44.0) (push) Failing after 56s
Some checks failed
Deploy / deploy (ubuntu-latest, 2.44.0) (push) Failing after 56s
Took 30 minutes
This commit is contained in:
parent
447da11d71
commit
519b688f13
@ -1,9 +0,0 @@
|
|||||||
---
|
|
||||||
title: '🐋 Docker'
|
|
||||||
updated: '2024-10-07'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
order: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# 🐋 Deploying on Docker
|
|
||||||
...
|
|
@ -1,9 +0,0 @@
|
|||||||
---
|
|
||||||
title: '🧩 Components'
|
|
||||||
updated: '2024-10-07'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
order: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# 🧩 Components
|
|
||||||
...
|
|
@ -1,9 +0,0 @@
|
|||||||
---
|
|
||||||
title: '✔️ Supported Services'
|
|
||||||
updated: '2024-10-07'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
order: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# ✔️ Supported Services
|
|
||||||
Below is a list of all the services that are currently supported by Pulse App. Are we missing a service? Please [open an issue](https://git.rainnny.club/PulseApp/API/issues)!
|
|
@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
title: '🚀 Introduction'
|
|
||||||
updated: '2024-10-06'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
order: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> These docs are currently a work in progress and are subject to change.
|
|
||||||
|
|
||||||
# <span className="flex gap-2.5 items-center"><Activity className="w-6 h-6 text-primary" /> Pulse App</span>
|
|
||||||
A lightweight service monitoring solution for tracking the availability of whatever service your heart desires!
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
Let's get you up and running—this will only take a few minutes! Start by [creating your account](#creating-your-account) and
|
|
||||||
making your first status page. You can do this on our cloud or on your [own instance](/self-hosting). Once done, you can add
|
|
||||||
your services and start monitoring them. See [Next Steps](#next-steps) for more.
|
|
||||||
|
|
||||||
### Creating your Account
|
|
||||||
- First, head to our [Dashboard](https://pulseapp.cc/dashboard) and fill out the form. ![Registering](https://cdn.rainnny.club/auhNOjrcYz6u.png)
|
|
||||||
- Next, complete the onboarding process and set up your first organization, and status page. ![Onboarding](https://cdn.rainnny.club/AfDgjHG5QTpZ.png)
|
|
||||||
- Finally, you can [start monitoring your services](#next-steps)!
|
|
@ -26,12 +26,16 @@ const RootLayout = async ({
|
|||||||
const pages: DocsContentMetadata[] = await getDocsContent();
|
const pages: DocsContentMetadata[] = await getDocsContent();
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem>
|
<body
|
||||||
<body
|
className="scroll-smooth antialiased"
|
||||||
className="scroll-smooth antialiased"
|
style={{
|
||||||
style={{
|
background: "var(--background-gradient)",
|
||||||
background: "var(--background-gradient)",
|
}}
|
||||||
}}
|
>
|
||||||
|
<ThemeProvider
|
||||||
|
attribute="class"
|
||||||
|
defaultTheme="dark"
|
||||||
|
enableSystem
|
||||||
>
|
>
|
||||||
<TooltipProvider delayDuration={100}>
|
<TooltipProvider delayDuration={100}>
|
||||||
<div className="px-3 md:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
<div className="px-3 md:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
||||||
@ -45,8 +49,8 @@ const RootLayout = async ({
|
|||||||
</div>
|
</div>
|
||||||
<Footer />
|
<Footer />
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
</body>
|
</ThemeProvider>
|
||||||
</ThemeProvider>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -2,21 +2,7 @@
|
|||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
:root {
|
|
||||||
--background: 0 0% 100%;
|
|
||||||
--foreground: 240 10% 3.9%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
--background: 240 10% 3.9%;
|
|
||||||
--foreground: 0 0% 98%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
color: var(--foreground);
|
|
||||||
background: var(--background);
|
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,6 +14,8 @@ body {
|
|||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
:root {
|
:root {
|
||||||
|
--background: 0 0% 100%;
|
||||||
|
--foreground: 240 10% 3.9%;
|
||||||
--card: 0 0% 100%;
|
--card: 0 0% 100%;
|
||||||
--card-foreground: 240 10% 3.9%;
|
--card-foreground: 240 10% 3.9%;
|
||||||
--popover: 0 0% 100%;
|
--popover: 0 0% 100%;
|
||||||
@ -56,6 +44,8 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
|
--background: 240 10% 3.9%;
|
||||||
|
--foreground: 0 0% 98%;
|
||||||
--card: 240 10% 3.9%;
|
--card: 240 10% 3.9%;
|
||||||
--card-foreground: 0 0% 98%;
|
--card-foreground: 0 0% 98%;
|
||||||
--popover: 240 10% 3.9%;
|
--popover: 240 10% 3.9%;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { ReactElement } from "react";
|
import { ReactElement } from "react";
|
||||||
import { Separator } from "@/components/ui/separator";
|
|
||||||
import SidebarLinks from "@/components/sidebar/sidebar-links";
|
import SidebarLinks from "@/components/sidebar/sidebar-links";
|
||||||
import ThemeSwitcher from "@/components/theme-switcher";
|
|
||||||
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
|
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
|
||||||
import QuickSearchDialog from "@/components/navbar/search-dialog";
|
import QuickSearchDialog from "@/components/navbar/search-dialog";
|
||||||
import { AlignRightIcon } from "lucide-react";
|
import { AlignRightIcon } from "lucide-react";
|
||||||
|
import { Separator } from "@/components/ui/separator";
|
||||||
|
import ThemeSwitcher from "@/components/theme-switcher";
|
||||||
|
|
||||||
const Sidebar = ({ pages }: { pages: DocsContentMetadata[] }): ReactElement => (
|
const Sidebar = ({ pages }: { pages: DocsContentMetadata[] }): ReactElement => (
|
||||||
<>
|
<>
|
||||||
|
@ -75,18 +75,27 @@ const getMetadata = <T extends MDXMetadata>(
|
|||||||
const extension: string = path.extname(file); // The file extension
|
const extension: string = path.extname(file); // The file extension
|
||||||
return extension === ".md" || extension === ".mdx";
|
return extension === ".md" || extension === ".mdx";
|
||||||
}); // Read the MDX files
|
}); // Read the MDX files
|
||||||
return files.map((file: string): T => {
|
const metadata: T[] = [];
|
||||||
|
for (let i = files.length - 1; i >= 0; i--) {
|
||||||
|
const file: string = files[i];
|
||||||
const filePath: string = path.join(directory, file); // The path of the file
|
const filePath: string = path.join(directory, file); // The path of the file
|
||||||
return {
|
const fileMetadata: T | undefined = parseMetadata<T>(
|
||||||
|
fs.readFileSync(filePath, "utf-8")
|
||||||
|
);
|
||||||
|
if (!fileMetadata) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
metadata.push({
|
||||||
slug: filePath
|
slug: filePath
|
||||||
.replace(parent, "")
|
.replace(parent, "")
|
||||||
.replace(/\\/g, "/") // Normalize the path
|
.replace(/\\/g, "/") // Normalize the path
|
||||||
.replace(/\.mdx?$/, "")
|
.replace(/\.mdx?$/, "")
|
||||||
.substring(1),
|
.substring(1),
|
||||||
extension: path.extname(file),
|
extension: path.extname(file),
|
||||||
...parseMetadata<T>(fs.readFileSync(filePath, "utf-8")),
|
...fileMetadata,
|
||||||
}; // Map each file to its metadata
|
});
|
||||||
});
|
}
|
||||||
|
return metadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,8 +106,15 @@ const getMetadata = <T extends MDXMetadata>(
|
|||||||
* @returns the metadata and content
|
* @returns the metadata and content
|
||||||
* @template T the type of metadata
|
* @template T the type of metadata
|
||||||
*/
|
*/
|
||||||
const parseMetadata = <T extends MDXMetadata>(content: string): T => {
|
const parseMetadata = <T extends MDXMetadata>(
|
||||||
const metadataBlock: string = METADATA_REGEX.exec(content)![1]; // Get the block of metadata
|
content: string
|
||||||
|
): T | undefined => {
|
||||||
|
const extracted = METADATA_REGEX.exec(content);
|
||||||
|
const metadataBlock: string | undefined =
|
||||||
|
extracted && extracted.length > 1 ? extracted[1] : undefined; // Get the block of metadata
|
||||||
|
if (!metadataBlock) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
content = content.replace(METADATA_REGEX, "").trim(); // Remove the metadata block from the content
|
content = content.replace(METADATA_REGEX, "").trim(); // Remove the metadata block from the content
|
||||||
const metadata: Partial<{
|
const metadata: Partial<{
|
||||||
[key: string]: string;
|
[key: string]: string;
|
||||||
|
@ -4,7 +4,9 @@ export function middleware(request: NextRequest): NextResponse {
|
|||||||
const before: number = Date.now();
|
const before: number = Date.now();
|
||||||
const response: NextResponse = NextResponse.next();
|
const response: NextResponse = NextResponse.next();
|
||||||
if (process.env.NODE_ENV === "production") {
|
if (process.env.NODE_ENV === "production") {
|
||||||
const ip: string | null = request.headers.get("CF-Connecting-IP");
|
const ip: string | null =
|
||||||
|
request.headers.get("CF-Connecting-IP") ||
|
||||||
|
request.headers.get("X-Forwarded-For");
|
||||||
console.log(
|
console.log(
|
||||||
`${ip} | ${request.method} ${request.nextUrl.pathname} ${response.status} in ${(Date.now() - before).toFixed(0)}ms`
|
`${ip} | ${request.method} ${request.nextUrl.pathname} ${response.status} in ${(Date.now() - before).toFixed(0)}ms`
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user