Update web

This commit is contained in:
MacRimi
2025-12-14 01:38:07 +01:00
parent 9e3334d75f
commit a8dcf5e8f5
2 changed files with 91 additions and 54 deletions

View File

@@ -7,34 +7,52 @@ import type React from "react"
const inter = Inter({ subsets: ["latin"] })
export const metadata = {
title: "ProxMenux",
title: "ProxMenux - Menu-Driven Script for Proxmox VE Management",
generator: "Next.js",
applicationName: "ProxMenux",
referrer: "origin-when-cross-origin",
keywords: ["Proxmox VE", "VE", "ProxMenux", "MacRimi", "menu-driven", "menu", "scripts", "virtualization"],
authors: [{ name: "MacRimi" }],
keywords: [
"Proxmox VE",
"Proxmox",
"PVE",
"ProxMenux",
"MacRimi",
"menu-driven",
"menu script",
"scripts",
"virtualization",
"automation",
"server management",
"VM management",
"container management",
"LXC",
],
authors: [{ name: "MacRimi", url: "https://github.com/MacRimi" }],
creator: "MacRimi",
publisher: "MacRimi",
description:
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
"ProxMenux is a powerful menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks. Manage VMs, containers, networking, storage, and more with an intuitive interface.",
formatDetection: {
email: false,
address: false,
telephone: false,
},
metadataBase: new URL(`https://macrimi.github.io/ProxMenux/`),
metadataBase: new URL("https://proxmenux.com"),
alternates: {
canonical: "https://proxmenux.com",
},
openGraph: {
title: "ProxMenux",
title: "ProxMenux - Menu-Driven Script for Proxmox VE Management",
description:
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
url: "https://macrimi.github.io/ProxMenux/",
"ProxMenux is a powerful menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks. Manage VMs, containers, networking, storage, and more.",
url: "https://proxmenux.com",
siteName: "ProxMenux",
images: [
{
url: "https://macrimi.github.io/ProxMenux/main.png",
url: "https://proxmenux.com/main.png",
width: 1363,
height: 735,
alt: "ProxMenux",
alt: "ProxMenux - Proxmox VE Management Interface",
},
],
locale: "en_US",
@@ -42,17 +60,29 @@ export const metadata = {
},
twitter: {
card: "summary_large_image",
title: "ProxMenux",
title: "ProxMenux - Menu-Driven Script for Proxmox VE",
description:
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
images: ["https://macrimi.github.io/ProxMenux/main.png"],
"Powerful menu-driven script for Proxmox VE management. Simplify VM, container, networking, and storage management with an intuitive interface.",
images: ["https://proxmenux.com/main.png"],
creator: "@MacRimi",
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
icons: {
icon: [
{ url: "https://macrimi.github.io/ProxMenux/favicon.ico", sizes: "any" },
{ url: "https://macrimi.github.io/ProxMenux/icon.svg", type: "image/svg+xml" },
{ url: "/favicon.ico", sizes: "any" },
{ url: "/icon.svg", type: "image/svg+xml" },
],
apple: [{ url: "https://macrimi.github.io/ProxMenux/apple-touch-icon.png", sizes: "180x180" } as const],
apple: [{ url: "/apple-touch-icon.png", sizes: "180x180" }],
},
}
@@ -60,24 +90,32 @@ export default function RootLayout({ children }: { children: React.ReactNode })
return (
<html lang="en" className="dark">
<head>
<meta name="description" content={metadata.description} />
<meta property="og:title" content={metadata.openGraph?.title} />
<meta property="og:description" content={metadata.openGraph?.description} />
<meta property="og:image" content={metadata.openGraph?.images?.[0]?.url} />
<meta property="og:url" content={metadata.openGraph?.url} />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={metadata.twitter?.title} />
<meta name="twitter:description" content={metadata.twitter?.description} />
<meta name="twitter:image" content={metadata.twitter?.images?.[0]} />
<link rel="canonical" href={metadata.metadataBase.href} />
{/* Favicon y Apple Icons */}
{metadata.icons.icon.map((icon, index) => (
<link key={index} rel="icon" type={icon.type} sizes={icon.sizes} href={icon.url} />
))}
{metadata.icons.apple.map((icon, index) => (
<link key={index} rel="apple-touch-icon" sizes={icon.sizes} href={icon.url} />
))}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "ProxMenux",
description:
"A powerful menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
applicationCategory: "DeveloperApplication",
operatingSystem: "Linux",
offers: {
"@type": "Offer",
price: "0",
priceCurrency: "USD",
},
author: {
"@type": "Person",
name: "MacRimi",
url: "https://github.com/MacRimi",
},
url: "https://proxmenux.com",
image: "https://proxmenux.com/main.png",
}),
}}
/>
</head>
<body className={`${inter.className} bg-background text-foreground antialiased`}>
<Navbar />

View File

@@ -10,25 +10,24 @@ interface ChangelogEntry {
title: string
}
// Function to clean and format markdown content for RSS
function formatContentForRSS(content: string): string {
return (
content
// Convert ### headers to bold text
.replace(/^### (.+)$/gm, "**$1**")
// Convert ** bold ** to simple bold
.replace(/\*\*(.*?)\*\*/g, "$1")
// Clean code blocks - remove ``` and format nicely
// Convert ### headers to <h3> tags
.replace(/^### (.+)$/gm, "<h3>$1</h3>")
// Convert ** bold ** to <strong> tags
.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
// Convert code blocks to <pre><code> tags
.replace(/```[\s\S]*?```/g, (match) => {
const code = match.replace(/```/g, "").trim()
return `\n${code}\n`
return `<pre><code>${code}</code></pre>`
})
// Convert - bullet points to
.replace(/^- /gm, "")
// Clean up multiple newlines
.replace(/\n{3,}/g, "\n\n")
// Remove backslashes used for line breaks
.replace(/\\\s*$/gm, "")
// Convert - bullet points to <ul><li> tags
.replace(/^- (.+)$/gm, "<li>$1</li>")
// Wrap consecutive <li> tags in <ul>
.replace(/(<li>.*?<\/li>\s*)+/g, (match) => `<ul>${match}</ul>`)
// Convert double newlines to <br><br> for paragraphs
.replace(/\n\n/g, "<br><br>")
// Clean up extra spaces
.replace(/\s+/g, " ")
.trim()
@@ -75,7 +74,7 @@ async function parseChangelog(): Promise<ChangelogEntry[]> {
currentEntry = {
version,
date,
url: `https://macrimi.github.io/ProxMenux/changelog#${version}`,
url: `https://proxmenux.com/changelog#${version}`,
title: `ProxMenux ${version}`,
}
} else if (dateMatch) {
@@ -83,7 +82,7 @@ async function parseChangelog(): Promise<ChangelogEntry[]> {
currentEntry = {
version: date,
date,
url: `https://macrimi.github.io/ProxMenux/changelog#${date}`,
url: `https://proxmenux.com/changelog#${date}`,
title: `ProxMenux Update ${date}`,
}
}
@@ -115,13 +114,13 @@ async function parseChangelog(): Promise<ChangelogEntry[]> {
export async function GET() {
const entries = await parseChangelog()
const siteUrl = "https://macrimi.github.io/ProxMenux"
const siteUrl = "https://proxmenux.com"
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>ProxMenux Changelog</title>
<description>Latest updates and changes in ProxMenux</description>
<description>Latest updates and changes in ProxMenux - An Interactive Menu for Proxmox VE Management</description>
<link>${siteUrl}/changelog</link>
<atom:link href="${siteUrl}/rss.xml" rel="self" type="application/rss+xml"/>
<language>en-US</language>
@@ -134,7 +133,7 @@ export async function GET() {
(entry) => `
<item>
<title>${entry.title}</title>
<description><![CDATA[${entry.content.length > 1000 ? entry.content.substring(0, 1000) + "..." : entry.content}]]></description>
<description><![CDATA[${entry.content}]]></description>
<link>${entry.url}</link>
<guid isPermaLink="true">${entry.url}</guid>
<pubDate>${new Date(entry.date).toUTCString()}</pubDate>
@@ -151,4 +150,4 @@ export async function GET() {
"Cache-Control": "public, max-age=3600, s-maxage=3600",
},
})
}
}