Update web

This commit is contained in:
MacRimi
2025-12-13 21:19:08 +01:00
parent cca6e71911
commit 9e3334d75f
39 changed files with 292 additions and 171 deletions

View File

@@ -64,4 +64,4 @@ export default async function CodeOfConductPage() {
</div>
</div>
)
}
}

View File

@@ -206,4 +206,4 @@ export default function FaqPage() {
</div>
);
}
}

View File

@@ -84,7 +84,7 @@ export default function VirtualMachinesPage() {
</div>
<ImageWithCaption
src="/images/design-mode/vm-creation-menu.png"
src="https://macrimi.github.io/ProxMenux/vm/vm-creation-menu.png"
alt="Virtual Machines Creation Menu"
caption="Virtual Machines Creation Menu"
/>

View File

@@ -241,7 +241,7 @@ export default function Page() {
<p>You can upload custom loaders from the local storage options:</p>
<ImageWithCaption
src="/images/design-mode/add_loader.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/add_loader.png"
alt="Add Custom Loader"
caption="Add Custom Loader"
/>
@@ -345,7 +345,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/arc_1_0_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_0_1.png"
alt="Arc Loader Web Interface"
caption="Arc Loader Web Interface"
/>
@@ -355,7 +355,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/arc_1_1_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_1_1.png"
alt="Arc Loader Terminal Interface"
caption="Arc Loader Terminal Interface"
/>
@@ -372,7 +372,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/rr_2_0_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_0_2.png"
alt="RR Command Example"
caption="RR Loader Web Interface"
/>
@@ -382,7 +382,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/rr_2_1_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_1_1.png"
alt="RR Loader Interface"
caption="RR Loader Terminal Interface"
/>
@@ -399,7 +399,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/tinycore_3_0_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_0_1.png"
alt="TinyCore Loader Interface"
caption="TinyCore Loader Web Interface"
/>
@@ -410,7 +410,7 @@ export default function Page() {
</p>
<ImageWithCaption
src="/images/design-mode/tinycore_3_1_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_1_1.png"
alt="TinyCore Loader Interface"
caption="TinyCore Loader Terminal Interface"
/>
@@ -433,7 +433,7 @@ export default function Page() {
{activeLoader === "arc" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/arc_1_2_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_2_1.png"
alt="Arc Model Selection"
caption="Arc Model Selection"
/>
@@ -443,7 +443,7 @@ export default function Page() {
{activeLoader === "rr" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/rr_2_2_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_2_1.png"
alt="RR Model Selection"
caption="RR Model Selection"
/>
@@ -453,7 +453,7 @@ export default function Page() {
{activeLoader === "tinycore" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/tinycore_3_2_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_2_1.png"
alt="TinyCore Model Selection"
caption="TinyCore Model Selection"
/>
@@ -476,12 +476,12 @@ export default function Page() {
{activeLoader === "arc" && (
<div className="flex flex-col space-y-16">
<ImageWithCaption
src="/images/design-mode/arc_1_3_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_1.png"
alt="Arc Version Selection - Step 1"
caption="Arc Version Selection - Step 1"
/>
<ImageWithCaption
src="/images/design-mode/arc_1_3_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_2.png"
alt="Arc Version Selection - Step 2"
caption="Arc Version Selection - Step 2"
/>
@@ -491,17 +491,17 @@ export default function Page() {
{activeLoader === "rr" && (
<div className="flex flex-col space-y-16">
<ImageWithCaption
src="/images/design-mode/rr_2_3_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_1.png"
alt="RR Version Selection - Step 1"
caption="RR Version Selection - Step 1"
/>
<ImageWithCaption
src="/images/design-mode/rr_2_3_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_2.png"
alt="RR Version Selection - Step 2"
caption="RR Version Selection - Step 2"
/>
<ImageWithCaption
src="/images/design-mode/rr_2_3_3.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_3.png"
alt="RR Version Selection - Step 3"
caption="RR Version Selection - Step 3"
/>
@@ -511,12 +511,12 @@ export default function Page() {
{activeLoader === "tinycore" && (
<div className="flex flex-col space-y-16">
<ImageWithCaption
src="/images/design-mode/tinycore_3_3_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_1.png"
alt="TinyCore Version Selection - Step 1"
caption="TinyCore Version Selection - Step 1"
/>
<ImageWithCaption
src="/images/design-mode/tinycore_3_3_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_2.png"
alt="TinyCore Version Selection - Step 2"
caption="TinyCore Version Selection - Step 2"
/>
@@ -541,7 +541,7 @@ export default function Page() {
automatically reboot once the process is complete.
</p>
<ImageWithCaption
src="/images/design-mode/arc_1_4_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_1.png"
alt="Arc Auto Configuration"
caption="Arc Auto Configuration"
/>
@@ -550,22 +550,22 @@ export default function Page() {
the loader:
</p>
<ImageWithCaption
src="/images/design-mode/arc_1_4_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_2.png"
alt="Arc Manual Configuration"
caption="Arc Manual Configuration"
/>
<ImageWithCaption
src="/images/design-mode/arc_1_4_3.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_3.png"
alt="Arc SN/Mac Configuration"
caption="Arc SN/Mac Configuration"
/>
<ImageWithCaption
src="/images/design-mode/arc_1_4_4.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_4.png"
alt="Arc Sata Portmap"
caption="Arc Sata Portmap (use the recommended option)"
/>
<ImageWithCaption
src="/images/design-mode/arc_1_4_5.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_5.png"
alt="Arc Addons Selection"
caption="Arc Addons Selection"
/>
@@ -575,17 +575,17 @@ export default function Page() {
{activeLoader === "rr" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/rr_2_4_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_1.png"
alt="RR Addon Step 1"
caption="RR Addon Step 1"
/>
<ImageWithCaption
src="/images/design-mode/rr_2_4_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_2.png"
alt="RR Addon Step 2"
caption="RR Addon Step 2 - Press to add addons"
/>
<ImageWithCaption
src="/images/design-mode/rr_2_4_3.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_3.png"
alt="RR Addon Step 3"
caption="RR Addon Step 3 - Select the one you want by clicking on it. If you want to add more, repeat the process from images 2.4.2 and 2.4.3"
/>
@@ -595,22 +595,22 @@ export default function Page() {
{activeLoader === "tinycore" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/tinycore_3_4_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_1.png"
alt="TinyCore SN Configuration"
caption="TinyCore SN Configuration"
/>
<ImageWithCaption
src="/images/design-mode/tinycore_3_4_2.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_2.png"
alt="TinyCore Random Option"
caption="TinyCore Random Option - The random option is recommended"
/>
<ImageWithCaption
src="/images/design-mode/tinycore_3_4_3.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_3.png"
alt="TinyCore MAC Configuration"
caption="TinyCore MAC Configuration"
/>
<ImageWithCaption
src="/images/design-mode/tinycore_3_4_4.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_4.png"
alt="TinyCore VM MAC"
caption="TinyCore VM MAC - Choose to use your VM's MAC or a random one"
/>
@@ -634,7 +634,7 @@ export default function Page() {
{activeLoader === "arc" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/arc_1_5_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_5_1.png"
alt="Arc Build Loader"
caption="Arc Build Loader"
/>
@@ -644,7 +644,7 @@ export default function Page() {
{activeLoader === "rr" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/rr_2_5_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_5_1.png"
alt="RR Build Loader"
caption="RR Build Loader"
/>
@@ -654,7 +654,7 @@ export default function Page() {
{activeLoader === "tinycore" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/tinycore_3_5_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_5_1.png"
alt="TinyCore Build Loader"
caption="TinyCore Build Loader"
/>
@@ -677,7 +677,7 @@ export default function Page() {
{activeLoader === "arc" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/arc_1_6_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_6_1.png"
alt="Arc Boot Loader"
caption="Arc Boot Loader"
/>
@@ -687,7 +687,7 @@ export default function Page() {
{activeLoader === "rr" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/rr_2_6_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_6_1.png"
alt="RR Boot Loader"
caption="RR Boot Loader"
/>
@@ -697,7 +697,7 @@ export default function Page() {
{activeLoader === "tinycore" && (
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/tinycore_3_6_1.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_6_1.png"
alt="TinyCore Boot Loader"
caption="TinyCore Boot Loader"
/>
@@ -719,7 +719,7 @@ export default function Page() {
<p className="mb-6">Follow the on-screen steps to complete the DSM installation.</p>
<div className="flex flex-col space-y-8">
<ImageWithCaption
src="/images/design-mode/install_DSM.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/install_DSM.png"
alt="DSM Setup"
caption="DSM Setup Screen"
/>
@@ -729,7 +729,7 @@ export default function Page() {
is nearing completion.
</p>
<ImageWithCaption
src="/images/design-mode/finish_install_DSM.png"
src="https://macrimi.github.io/ProxMenux/vm/synology/finish_install_DSM.png"
alt="Installation Complete"
caption="Installation Complete"
/>
@@ -833,3 +833,4 @@ function StepNumber({ number }: { number: number }) {
</div>
)
}

View File

@@ -49,7 +49,7 @@ export default function LinuxVMContent() {
</div>
<ImageWithCaption
src="/images/design-mode/menu_linux.png"
src="https://macrimi.github.io/ProxMenux/vm/menu_linux.png"
alt="Linux VM Menu"
caption="Linux VM Creation Menu in ProxMenux"
/>
@@ -351,7 +351,7 @@ export default function LinuxVMContent() {
<div className="mt-4">
<ImageWithCaption
src="/images/design-mode/distro_linux.png"
src="https://macrimi.github.io/ProxMenux/vm/distro_linux.png"
alt="Linux Distribution Selection"
caption="Linux Distribution Selection in ProxMenux"
/>
@@ -411,7 +411,7 @@ export default function LinuxVMContent() {
<div className="mt-4">
<ImageWithCaption
src="/images/design-mode/local-store.png"
src="https://macrimi.github.io/ProxMenux/vm/local-store.png"
alt="Local ISO Selection Menu"
caption="Local ISO Selection Menu in ProxMenux"
/>

View File

@@ -164,7 +164,7 @@ export default function SystemNASPage() {
</div>
<ImageWithCaption
src="/images/design-mode/system-nas-menu.png"
src="https://macrimi.github.io/ProxMenux/vm/system-nas-menu.png"
alt="System NAS Menu"
caption="System NAS Menu"
/>

View File

@@ -468,7 +468,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Shell Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/truenas-scale-shell.png"
src="https://macrimi.github.io/ProxMenux/vm/truenas/truenas-scale-shell.png"
alt="TrueNAS SCALE Shell Interface"
width={600}
height={400}
@@ -480,7 +480,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Web Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/truenas-scale-web.png"
src="https://macrimi.github.io/ProxMenux/vm/truenas/truenas-scale-web.png"
alt="TrueNAS SCALE Web Interface"
width={600}
height={400}
@@ -510,7 +510,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Shell Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/truenas-core-shell.png"
src="https://macrimi.github.io/ProxMenux/vm/truenas/truenas-core-shell.png"
alt="TrueNAS CORE Shell Interface"
width={600}
height={400}
@@ -522,7 +522,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Web Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/truenas-core-web.png"
src="https://macrimi.github.io/ProxMenux/vm/truenas/truenas-core-web.png"
alt="TrueNAS CORE Web Interface"
width={600}
height={400}
@@ -552,7 +552,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Shell Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/openmediavault-shell.png"
src="https://macrimi.github.io/ProxMenux/vm/openmediavault/openmediavault-shell.png"
alt="OpenMediaVault Shell Interface"
width={600}
height={400}
@@ -564,7 +564,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Web Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/openmediavault-web.png"
src="https://macrimi.github.io/ProxMenux/vm/openmediavault/openmediavault-web.png"
alt="OpenMediaVault Web Interface"
width={600}
height={400}
@@ -594,7 +594,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Shell Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/rockstor-shell.png"
src="https://macrimi.github.io/ProxMenux/vm/rockstor/rockstor-shell.png"
alt="Rockstor Shell Interface"
width={600}
height={400}
@@ -606,7 +606,7 @@ export default function OtherNASSystemsPage() {
<h4 className="font-medium mb-2">Web Interface</h4>
<div className="border rounded-md overflow-hidden">
<Image
src="/images/design-mode/rockstor-web.png"
src="https://macrimi.github.io/ProxMenux/vm/rockstor/rockstor-web.png"
alt="Rockstor Web Interface"
width={600}
height={400}

View File

@@ -76,7 +76,7 @@ export default function WindowsVMPage() {
</div>
<ImageWithCaption
src="/images/design-mode/menu_windows.png"
src="https://macrimi.github.io/ProxMenux/vm/menu_windows.png"
alt="Windows VM Menu"
caption="Windows VM Creation Menu in ProxMenux"
/>
@@ -412,7 +412,7 @@ export default function WindowsVMPage() {
<div className="mt-4">
<ImageWithCaption
src="/images/design-mode/local-store-windows.png"
src="https://macrimi.github.io/ProxMenux/vm/local-store-windows.png"
alt="Local ISO Selection Menu"
caption="Local ISO Selection Menu in ProxMenux"
/>
@@ -492,7 +492,7 @@ export default function WindowsVMPage() {
During Windows installation, if no disks are shown on the “Where do you want to install Windows?” screen, it means the required storage drivers for your selected disk interface (such as SCSI or VirtIO) are not available. You'll need to load them manually.
</p>
<ImageWithCaption
src="/images/design-mode/virtio-step-1.png"
src="https://macrimi.github.io/ProxMenux/vm/windows/virtio-step-1.png"
alt="Windows installation - No disks shown"
caption="Windows installation screen with no disks available"
/>
@@ -505,7 +505,7 @@ export default function WindowsVMPage() {
Click the Load driver button to browse the mounted VirtIO ISO. This will allow you to load the necessary storage drivers so Windows can detect the virtual disk.
</p>
<ImageWithCaption
src="/images/design-mode/virtio-step-2.png"
src="https://macrimi.github.io/ProxMenux/vm/windows/virtio-step-2.png"
alt="Windows installation - Load driver button"
caption="Click 'Load driver' to browse for VirtIO drivers"
/>
@@ -519,7 +519,7 @@ export default function WindowsVMPage() {
For example, the <code className="bg-gray-100 px-1 py-0.5 rounded">viostor</code> folder contains storage drivers, and you'll find subfolders organized by version (e.g., Windows 10, 11, Server).
</p>
<ImageWithCaption
src="/images/design-mode/virtio-step-3.png"
src="https://macrimi.github.io/ProxMenux/vm/windows/virtio-step-3.png"
alt="Windows installation - Browse for driver"
caption="Browse to the appropriate driver folder on the VirtIO ISO"
/>
@@ -532,7 +532,7 @@ export default function WindowsVMPage() {
After selecting the folder, Windows will list the available drivers. Choose the appropriate one — usually “Red Hat VirtIO SCSI controller” — and click “Next” to proceed with the installation.
</p>
<ImageWithCaption
src="/images/design-mode/virtio-step-4.png"
src="https://macrimi.github.io/ProxMenux/vm/windows/virtio-step-4.png"
alt="Windows installation - Select driver"
caption="Select the appropriate VirtIO driver for your disk interface"
/>
@@ -545,7 +545,7 @@ export default function WindowsVMPage() {
<strong>Pro Tip:</strong> If you selected <strong>VirtIO</strong> as the network interface, Windows will not recognize it by default. To enable internet access during installation, load the VirtIO network driver from the ISO by browsing to the <code className="bg-gray-100 px-1 py-0.5 rounded">NetKVM</code> folder and selecting the correct subfolder for your Windows version.
</p>
<ImageWithCaption
src="/images/design-mode/virtio-step-5.png"
src="https://macrimi.github.io/ProxMenux/vm/windows/virtio-step-5.png"
alt="Windows installation - Network drivers"
caption="Select the appropriate VirtIO network driver to enable internet access"
/>

View File

@@ -31,7 +31,7 @@ export default function IGPUAccelerationLXC() {
<Steps>
<Steps.Step title="Select an LXC Container">
<p>You will be presented with a list of your LXC containers to choose from.</p>
<Image src="/images/design-mode/select-container.png" alt="Select LXC Container" width={800} height={400} className="rounded shadow-lg" />
<Image src="https://macrimi.github.io/ProxMenux/igpu/select-container.png" alt="Select LXC Container" width={800} height={400} className="rounded shadow-lg" />
</Steps.Step>
<Steps.Step title="Modify Container Configuration">
<p>The script applies the following changes to your container:</p>

View File

@@ -97,7 +97,7 @@ export default function HelpAndInfoPage() {
</div>
<ImageWithCaption
src="/images/design-mode/help-info-menu.png"
src="https://macrimi.github.io/ProxMenux/help/help-info-menu.png"
alt="Help and Info Menu"
caption="Help and Info Menu"
/>

View File

@@ -46,7 +46,7 @@ export default function InstallationPage() {
<h2 className="text-xl font-semibold mt-6 mb-2">Installation Progress</h2>
<p className="mb-2">The installation process will look like this:</p>
<div className="w-full mb-4">
<Image src="/images/design-mode/install.png" alt="ProxMenux Installation" width={800} height={400} className="rounded shadow-lg" />
<Image src="https://macrimi.github.io/ProxMenux/install/install.png" alt="ProxMenux Installation" width={800} height={400} className="rounded shadow-lg" />
</div>
<h2 className="text-xl font-semibold mt-6 mb-2">How to Use</h2>
@@ -78,4 +78,4 @@ export default function InstallationPage() {
</p>
</div>
)
}
}

View File

@@ -8,7 +8,7 @@ export default function IntroductionPage() {
{/* Logo + Title Section */}
<div className="flex items-start mb-6">
<Image
src="/images/design-mode/logo.png"
src="https://macrimi.github.io/ProxMenux/logo.png"
alt="ProxMenux Logo"
width={80}
height={80}

View File

@@ -19,3 +19,4 @@ export default function DocsLayout({ children }: { children: React.ReactNode })
</div>
)
}

View File

@@ -63,7 +63,7 @@ export default function BasicSettingsPage() {
<div className="mb-6">
<img
src="/images/design-mode/menu_utilities.png"
src="https://macrimi.github.io/ProxMenux/basic/menu_utilities.png"
alt="System Utilities Selection Menu"
className="rounded shadow-lg border border-gray-200"
/>
@@ -83,7 +83,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">Example usage:</p>
<code className="block bg-gray-100 p-2 rounded">dialog --title "Hello" --msgbox "Hello, World!" 10 20</code>
<img
src="/images/design-mode/dialog.png"
src="https://macrimi.github.io/ProxMenux/basic/dialog.png"
alt="Dialog Example"
className="mt-2 rounded shadow-lg"
/>
@@ -103,7 +103,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">To start htop, simply type:</p>
<code className="block bg-gray-100 p-2 rounded">htop</code>
<img
src="/images/design-mode/htop.png"
src="https://macrimi.github.io/ProxMenux/basic/htop.png"
alt="htop Example"
className="mt-2 rounded shadow-lg"
/>
@@ -113,7 +113,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">To start btop, type:</p>
<code className="block bg-gray-100 p-2 rounded">btop</code>
<img
src="/images/design-mode/btop.png"
src="https://macrimi.github.io/ProxMenux/basic/btop.png"
alt="btop Example"
className="mt-2 rounded shadow-lg"
/>
@@ -123,7 +123,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">To start iftop (requires root):</p>
<code className="block bg-gray-100 p-2 rounded">iftop</code>
<img
src="/images/design-mode/iftop.png"
src="https://macrimi.github.io/ProxMenux/basic/iftop.png"
alt="iftop Example"
className="mt-2 rounded shadow-lg"
/>
@@ -133,7 +133,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">To start iotop (requires root):</p>
<code className="block bg-gray-100 p-2 rounded">siotop</code>
<img
src="/images/design-mode/iotop.png"
src="https://macrimi.github.io/ProxMenux/basic/iotop.png"
alt="iotop Example"
className="mt-2 rounded shadow-lg"
/>
@@ -155,7 +155,7 @@ export default function BasicSettingsPage() {
<p className="mt-2">To start iptraf-ng:</p>
<code className="block bg-gray-100 p-2 rounded">iptraf-ng</code>
<img
src="/images/design-mode/iptraf-ng.png"
src="https://macrimi.github.io/ProxMenux/basic/iptraf-ng.png"
alt="iptraf-ng Example"
className="mt-2 rounded shadow-lg"
/>
@@ -212,7 +212,7 @@ export default function BasicSettingsPage() {
</tbody>
</table>
<img
src="/images/design-mode/tmux.png"
src="https://macrimi.github.io/ProxMenux/basic/tmux.png"
alt="tmux Example"
className="mt-2 rounded shadow-lg"
/>
@@ -383,3 +383,4 @@ sudo apt-get install -y zfsutils-linux proxmox-backup-restore-image chrony
</div>
)
}

View File

@@ -139,3 +139,4 @@ echo "DPkg::Post-Invoke { \\"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxl
</div>
)
}

View File

@@ -95,3 +95,4 @@ fi
</div>
)
}

View File

@@ -304,3 +304,4 @@ sudo sysctl -p /etc/sysctl.d/99-network-performance.conf
</div>
)
}

View File

@@ -244,7 +244,7 @@ systemctl enable --now pve-ha-lrm pve-ha-crm corosync
<div>
<p className="font-semibold text-center">ProxMenux</p>
<img
src="/images/design-mode/proxmenux.png"
src="https://macrimi.github.io/ProxMenux/fastfetch/proxmenux.png"
alt="ProxMenux Logo"
className="rounded shadow-lg"
/>
@@ -252,7 +252,7 @@ systemctl enable --now pve-ha-lrm pve-ha-crm corosync
<div>
<p className="font-semibold text-center">Proxmox</p>
<img
src="/images/design-mode/proxmox.png"
src="https://macrimi.github.io/ProxMenux/fastfetch/proxmox.png"
alt="Proxmox Logo"
className="rounded shadow-lg"
/>
@@ -260,7 +260,7 @@ systemctl enable --now pve-ha-lrm pve-ha-crm corosync
<div>
<p className="font-semibold text-center">Helper-Scripts</p>
<img
src="/images/design-mode/helper-scripts.png"
src="https://macrimi.github.io/ProxMenux/fastfetch/helper-scripts.png"
alt="Helper-Scripts Logo"
className="rounded shadow-lg"
/>
@@ -268,7 +268,7 @@ systemctl enable --now pve-ha-lrm pve-ha-crm corosync
<div>
<p className="font-semibold text-center">Home-Labs-Club</p>
<img
src="/images/design-mode/home-labs-club.png"
src="https://macrimi.github.io/ProxMenux/fastfetch/home-labs-club.png"
alt="Home-Labs-Club Logo"
className="rounded shadow-lg"
/>
@@ -276,7 +276,7 @@ systemctl enable --now pve-ha-lrm pve-ha-crm corosync
<div>
<p className="font-semibold text-center">Proxmology</p>
<img
src="/images/design-mode/proxmology.png"
src="https://macrimi.github.io/ProxMenux/fastfetch/proxmology.png"
alt="Proxmology Logo"
className="rounded shadow-lg"
/>
@@ -336,7 +336,7 @@ echo "clear && fastfetch" >> ~/.bashrc
<div className="mb-6 flex justify-center">
<img
src="/images/design-mode/figurine.png"
src="https://macrimi.github.io/ProxMenux/figurine/figurine.png"
alt="Figurine Example Output"
className="rounded-md shadow-lg border border-gray-200"
style={{ maxWidth: "100%" }}
@@ -384,3 +384,4 @@ chmod +x "/etc/profile.d/figurine.sh"
</div>
)
}

View File

@@ -139,3 +139,4 @@ export default function PerformanceSettingsPage() {
</div>
)
}

View File

@@ -164,3 +164,4 @@ EOF
</div>
)
}

View File

@@ -337,3 +337,4 @@ sudo systemctl restart systemd-journald
</div>
)
}

View File

@@ -145,3 +145,4 @@ sudo systemctl start ksm
</div>
)
}

View File

@@ -1,69 +1,163 @@
import { Steps } from "@/components/ui/steps"
import CopyableCode from "@/components/CopyableCode"
import { HardDrive, ArrowRight } from "lucide-react"
import { ImageWithCaption } from "@/components/ui/image-with-caption"
import type { Metadata } from "next"
export const metadata = {
title: "Disk Passthrough to a VM | ProxMenux Documentation",
description: "Step-by-step guide to configure disk passthrough to a virtual machine in Proxmox VE using ProxMenux.",
export const metadata: Metadata = {
title: "Disk Passthrough to a CT | ProxMenux Documentation",
description: "Step-by-step guide to configure disk passthrough to a container (CT) in Proxmox VE using ProxMenux.",
openGraph: {
title: "Disk Passthrough to a CT | ProxMenux Documentation",
description: "Step-by-step guide to configure disk passthrough to a container (CT) in Proxmox VE using ProxMenux.",
type: "article",
url: "https://macrimi.github.io/ProxMenux/docs/disk-ct",
images: [
{
url: "https://macrimi.github.io/ProxMenux/disk-ct/disk-selection.png",
width: 1200,
height: 630,
alt: "Disk Passthrough to a CT",
},
],
},
twitter: {
card: "summary_large_image",
title: "Disk Passthrough to a CT | ProxMenux Documentation",
description: "Step-by-step guide to configure disk passthrough to a container (CT) in Proxmox VE using ProxMenux.",
images: ["https://macrimi.github.io/ProxMenux/disk-ct/disk-selection.png"],
},
}
export default function DiskPassthroughVM() {
export default function DiskPassthroughCT() {
return (
<div className="max-w-3xl mx-auto">
<h1 className="text-3xl font-bold mb-6">Disk Passthrough to a VM</h1>
<div className="flex items-center mb-6">
<HardDrive className="h-8 w-8 mr-2 text-blue-500" />
<ArrowRight className="h-5 w-5 mr-2 text-gray-500" />
<h1 className="text-3xl font-bold">
Disk Passthrough to a <span className="text-blue-500">CT</span>
</h1>
</div>
<p className="mb-4">
This guide explains how to assign physical disks to virtual machines (VMs) in <strong>Proxmox VE</strong> using <strong>ProxMenux</strong>.
Disk passthrough allows a VM to have direct access to a physical disk, providing improved performance and compatibility for certain applications.
This guide explains how to assign a <strong>dedicated physical disk</strong> to a container (CT) in{" "}
<strong>Proxmox VE</strong> using <strong>ProxMenux</strong>. Assigning a full disk to a container is useful
when you need isolation, ease of access, or the ability to move the disk between systems, especially for
services handling large volumes of data such as Samba, Nextcloud, or video surveillance software, among others.
</p>
<h2 className="text-2xl font-semibold mt-8 mb-4">Overview</h2>
<p className="mb-4">The script automates the following steps:</p>
<p className="mb-4">
While it's more common to passthrough entire disks to virtual machines (VMs), there are scenarios where giving
full disk access to an LXC container can be very useful.
</p>
<ul className="list-disc pl-6 mb-4 space-y-1">
<li>
A user running a video surveillance system like <strong>Frigate</strong> or <strong>Agent DVR</strong> might
want recordings saved on a dedicated disk, so they can easily transfer it to another system for review.
</li>
<li>
A <strong>Nextcloud</strong> container might need full disk access to manage user files and take advantage of
the entire disk capacity.
</li>
<li>
A container may be used for downloads, storing files on a dedicated disk and sharing them over the local
network.
</li>
<li>Another use case could be writing backups to an isolated disk.</li>
</ul>
<p className="mb-6">
As you can see, there are many different use cases where assigning a physical disk directly to a CT is the ideal
solution.
</p>
<h2 className="text-2xl font-semibold mt-8 mb-4">Description</h2>
<ol className="list-decimal pl-6 space-y-2 mb-6">
<li>Lists available physical disks on the Proxmox host, excluding the system disk.</li>
<li>Displays a list of available virtual machines (VMs) for selection.</li>
<li>Allows the user to select multiple disks to assign to a VM.</li>
<li>Ensures selected disks are not already in use by another VM.</li>
<li>Configures the selected disks for passthrough to the chosen VM.</li>
<li>Lists physical disks on the Proxmox host, excluding the system disk and mounted system disks.</li>
<li>Displays all existing LXC containers (CTs) for user selection.</li>
<li>
Allows the user to select <strong>one physical disk</strong> per execution.
</li>
<li>
Formats the disk (with user confirmation) or reuses it, then assigns it as a mount point in the selected CT.
</li>
</ol>
<h2 className="text-2xl font-semibold mt-8 mb-4">Implementation Steps</h2>
<h2 className="text-2xl font-semibold mt-8 mb-4">Step-by-Step Instructions</h2>
<Steps>
<Steps.Step title="Disk Selection">
<img src="/images/design-mode/disk-selection.png" alt="Disk Selection Menu" className="mt-4 rounded shadow-lg" />
<p>The script scans the system and displays a list of available physical disks, excluding the system disk.</p>
<Steps.Step title="CT Selection">
<ImageWithCaption
src="https://macrimi.github.io/ProxMenux/disk/select-container.png"
alt="Select CT"
caption="CT Selection Menu."
/>
<p>The user selects the destination LXC container (CT) to which the disk will be assigned.</p>
</Steps.Step>
<Steps.Step title="VM Selection">
<p>The user selects the virtual machine (VM) to which the disk(s) will be assigned.</p>
<Steps.Step title="Disk Detection">
<ImageWithCaption
src="https://macrimi.github.io/ProxMenux/disk/disk-selection-ct.png"
alt="Disk Selection Menu"
caption="Disk Selection Menu"
/>
<p>
The script lists all physical disks, excluding those used by the system. It also displays metadata like ZFS,
LVM, and RAID, and shows warnings if the disk is already in use.
</p>
</Steps.Step>
<Steps.Step title="Disk Assignment">
<img src="/images/design-mode/disk-assigment.png" alt="Disk Assigment Menu" className="mt-4 rounded shadow-lg" />
<Steps.Step title="Disk Preparation">
<p>The script performs the following actions:</p>
<ul className="list-disc pl-6 space-y-1 mt-2">
<li>Ensures the selected disk is not in use by another VM.</li>
<li>Provides an interface choice (SATA, SCSI, VirtIO, or IDE).</li>
<li>Automatically configures the disk passthrough and assigns it to the VM.</li>
<li>Detects whether the disk has a supported filesystem (ext4, xfs, btrfs).</li>
<li>Offers to format the disk if no valid filesystem is found.</li>
<li>
Prompts the user to define the mount point (e.g. <code>/mnt/disk_passthrough</code>).
</li>
</ul>
</Steps.Step>
<Steps.Step title="Confirmation & Finalization">
<p>The script verifies the operation and confirms the successful disk passthrough.</p>
<Steps.Step title="Assignment to CT">
<ImageWithCaption
src="https://macrimi.github.io/ProxMenux/disk/assignment-ct.png"
alt="Assignment to CT"
caption="Assignment to CT"
/>
<p>
The selected disk is mounted inside the container at the specified path, and permissions are set
automatically.
</p>
</Steps.Step>
</Steps>
<h2 className="text-2xl font-semibold mt-8 mb-4">Expected Results</h2>
<ul className="list-disc pl-6 space-y-2 mb-6">
<li>The selected physical disk(s) are successfully assigned to the specified VM.</li>
<li>Users are provided with a confirmation of the disk assignment.</li>
<li>The VM is configured to recognize the disk(s) upon startup.</li>
<li>The selected disk is successfully mounted and accessible within the specified container.</li>
<li>The script shows a summary of the operation, including any warnings or errors.</li>
<li>The container can use the assigned storage immediately.</li>
<ImageWithCaption
src="https://macrimi.github.io/ProxMenux/disk/result-point.png"
alt="Mount point created successfully"
caption="Mount point created successfully"
/>
</ul>
<h2 className="text-2xl font-semibold mt-8 mb-4">Important Considerations</h2>
<ul className="list-disc pl-6 space-y-2 mb-6">
<li>Ensure the selected disk is not already in use by another VM.</li>
<li>VMs must be powered off before adding disks to prevent data corruption.</li>
<li>Using disk passthrough limits certain VM features, such as live migration.</li>
</ul>
<h2 className="text-2xl font-semibold mt-8 mb-4">Important Considerations</h2>
<div className="bg-yellow-100 border-l-4 border-yellow-500 text-yellow-700 p-4 mb-4">
<p className="font-semibold">Important:</p>
<p>
The container must be <strong>privileged</strong> to allow direct read/write access to the physical disk.
</p>
</div>
<ul className="list-disc pl-6 space-y-2 mb-6">
<li>
Only <strong>one disk</strong> can be assigned per script execution.
</li>
<li>Avoid assigning the same disk to multiple VMs or CTs that may run at the same time, as this can lead to data corruption or file loss.</li>
<li>
Clean any RAID, ZFS, or LVM metadata <strong>manually</strong> before assigning the disk.
</li>
</ul>
</div>
)
}

View File

@@ -29,14 +29,14 @@ export default function DiskPassthroughVM() {
<h2 className="text-2xl font-semibold mt-8 mb-4">Implementation Steps</h2>
<Steps>
<Steps.Step title="Disk Selection">
<img src="/images/design-mode/disk-selection.png" alt="Disk Selection Menu" className="mt-4 rounded shadow-lg" />
<img src="https://macrimi.github.io/ProxMenux/disk/disk-selection.png" alt="Disk Selection Menu" className="mt-4 rounded shadow-lg" />
<p>The script scans the system and displays a list of available physical disks, excluding the system disk.</p>
</Steps.Step>
<Steps.Step title="VM Selection">
<p>The user selects the virtual machine (VM) to which the disk(s) will be assigned.</p>
</Steps.Step>
<Steps.Step title="Disk Assignment">
<img src="/images/design-mode/disk-assigment.png" alt="Disk Assigment Menu" className="mt-4 rounded shadow-lg" />
<img src="https://macrimi.github.io/ProxMenux/disk/disk-assigment.png" alt="Disk Assigment Menu" className="mt-4 rounded shadow-lg" />
<p>The script performs the following actions:</p>
<ul className="list-disc pl-6 space-y-1 mt-2">
<li>Ensures the selected disk is not in use by another VM.</li>

View File

@@ -76,7 +76,7 @@ export default function UUPDumpISOCreatorPage() {
</div>
<ImageWithCaption
src="/images/design-mode/uup-dump-iso-creator.png"
src="https://macrimi.github.io/ProxMenux/utils/uup-dump-iso-creator.png"
alt="UUP Dump ISO Creator"
caption="UUP Dump ISO Creator in ProxMenux"
/>
@@ -240,7 +240,7 @@ export default function UUPDumpISOCreatorPage() {
) and select the Windows version you want to download.
</p>
<ImageWithCaption
src="/images/design-mode/step-1-select-version-windows.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/step-1-select-version-windows.png"
alt="Select Windows Version"
caption="UUP Dump main page for selecting Windows version"
/>
@@ -258,7 +258,7 @@ export default function UUPDumpISOCreatorPage() {
Preview builds, or specific versions.
</p>
<ImageWithCaption
src="/images/design-mode/step-2-select-version-windows.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/step-2-select-version-windows.png"
alt="Select Specific Build"
caption="Selection of the specific Windows build"
/>
@@ -275,7 +275,7 @@ export default function UUPDumpISOCreatorPage() {
Choose the language for the Windows image. You can select any language available for that specific build.
</p>
<ImageWithCaption
src="/images/design-mode/step-3-select-version-windows.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/step-3-select-version-windows.png"
alt="Select Language"
caption="Selection of the language for the Windows image"
/>
@@ -293,7 +293,7 @@ export default function UUPDumpISOCreatorPage() {
(Home, Pro, Enterprise, etc.).
</p>
<ImageWithCaption
src="/images/design-mode/step-4-select-version-windows.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/step-4-select-version-windows.png"
alt="Select Editions"
caption="Selection of Windows editions to include"
/>
@@ -313,7 +313,7 @@ export default function UUPDumpISOCreatorPage() {
<code className="bg-gray-100 px-1 py-0.5 rounded">edition</code>.
</p>
<ImageWithCaption
src="/images/design-mode/step-5-select-version-windows.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/step-5-select-version-windows.png"
alt="Get Download URL"
caption="Final page with the URL containing the necessary parameters"
/>
@@ -341,7 +341,7 @@ export default function UUPDumpISOCreatorPage() {
that the URL contains all the necessary parameters.
</p>
<ImageWithCaption
src="/images/design-mode/add-url-iso-creator.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/add-url-iso-creator.png"
alt="Paste UUP Dump URL"
caption="Window for pasting the UUP Dump URL"
/>
@@ -356,7 +356,7 @@ export default function UUPDumpISOCreatorPage() {
</h3>
<p className="mb-4">Access the Utilities section in ProxMenux and select "UUP Dump ISO Creator".</p>
<ImageWithCaption
src="/images/design-mode/start-uupdump-iso-creator.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/start-uupdump-iso-creator.png"
alt="Start UUP Dump ISO Creator"
caption="Starting the UUP Dump ISO Creator script in ProxMenux"
/>
@@ -374,7 +374,7 @@ export default function UUPDumpISOCreatorPage() {
ISO image. The ISO will be immediately available for use in creating virtual machines in Proxmox.
</p>
<ImageWithCaption
src="/images/design-mode/end-uupdump-iso-creator.png"
src="https://macrimi.github.io/ProxMenux/iso-creator/end-uupdump-iso-creator.png"
alt="Process Completion"
caption="Successful completion message of the ISO creation process"
/>

View File

@@ -22,16 +22,16 @@ export const metadata = {
address: false,
telephone: false,
},
metadataBase: new URL(`https://proxmenux.com`),
metadataBase: new URL(`https://macrimi.github.io/ProxMenux/`),
openGraph: {
title: "ProxMenux",
description:
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
url: "https://proxmenux.com",
url: "https://macrimi.github.io/ProxMenux/",
siteName: "ProxMenux",
images: [
{
url: "https://proxmenux.com/main.png",
url: "https://macrimi.github.io/ProxMenux/main.png",
width: 1363,
height: 735,
alt: "ProxMenux",
@@ -45,14 +45,14 @@ export const metadata = {
title: "ProxMenux",
description:
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks.",
images: ["https://proxmenux.com/main.png"],
images: ["https://macrimi.github.io/ProxMenux/main.png"],
},
icons: {
icon: [
{ url: "https://proxmenux.com/favicon.ico", sizes: "any" },
{ url: "https://proxmenux.com/icon.svg", type: "image/svg+xml" },
{ url: "https://macrimi.github.io/ProxMenux/favicon.ico", sizes: "any" },
{ url: "https://macrimi.github.io/ProxMenux/icon.svg", type: "image/svg+xml" },
],
apple: [{ url: "https://proxmenux.com/apple-touch-icon.png", sizes: "180x180" } as const],
apple: [{ url: "https://macrimi.github.io/ProxMenux/apple-touch-icon.png", sizes: "180x180" } as const],
},
}

View File

@@ -1,9 +1,11 @@
import type { Metadata } from "next"
import type { Metadata } from 'next'
const description =
"A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks."
const description = "A menu-driven script for Proxmox VE management, designed to simplify and streamline the execution of commands and tasks."
export const metadata: Metadata = {
title: "ProxMenux",
description,
generator: "Next.js",
@@ -18,11 +20,11 @@ export const metadata: Metadata = {
address: false,
telephone: false,
},
metadataBase: new URL(`https://proxmenux.com`),
metadataBase: new URL(`https://macrimi.github.io/ProxMenux/`),
openGraph: {
title: "ProxMenux",
description,
url: `https://proxmenux.com`,
url: `https://macrimi.github.io/ProxMenux/`,
siteName: "ProxMenux",
images: [
{
@@ -47,4 +49,4 @@ export const metadata: Metadata = {
],
apple: [{ url: "https://raw.githubusercontent.com/MacRimi/ProxMenux/main/web/public//apple-touch-icon.png" }],
},
}
}

View File

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

View File

@@ -22,7 +22,7 @@ export default function Footer() {
className="hover:opacity-90 transition-opacity flex items-center"
>
<Image
src="/images/design-mode/kofi.png"
src="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/kofi.png"
alt="Support me on Ko-fi"
width={140}
height={40}
@@ -68,3 +68,4 @@ export default function Footer() {
</footer>
)
}

View File

@@ -19,7 +19,7 @@ export default function Footer() {
className="hover:opacity-90 transition-opacity"
>
<Image
src="/images/design-mode/kofi.png"
src="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/kofi.png"
alt="Support me on Ko-fi"
width={140}
height={40}

View File

@@ -29,3 +29,4 @@ export default function Hero() {
</section>
)
}

View File

@@ -36,7 +36,7 @@ export default function Hero() {
<div className="flex items-center">
<div className="w-40 h-40 lg:w-48 lg:h-48 xl:w-56 xl:h-56 relative">
<Image
src="/images/design-mode/logo.png"
src="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/logo.png"
alt="ProxMenux Logo"
fill
className="object-contain"
@@ -68,3 +68,4 @@ export default function Hero() {
</div>
)
}

View File

@@ -26,3 +26,4 @@ export default function MouseMoveEffect() {
/>
)
}

View File

@@ -20,7 +20,13 @@ export default function Navbar() {
<div className="container mx-auto px-4">
<div className="flex items-center justify-between h-16">
<Link href="/" className="flex items-center space-x-2">
<Image src="/images/design-mode/logo.png" alt="ProxMenux Logo" width={32} height={32} className="w-8 h-8" />
<Image
src="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/logo.png"
alt="ProxMenux Logo"
width={32}
height={32}
className="w-8 h-8"
/>
<span className="text-xl font-bold">ProxMenux</span>
</Link>
@@ -40,7 +46,7 @@ export default function Navbar() {
{/* RSS Feed Link */}
<Link
href="https://proxmenux.com/rss.xml"
href="https://macrimi.github.io/ProxMenux/rss.xml"
className="flex items-center space-x-2 transition-colors hover:text-primary text-orange-600 hover:text-orange-700"
target="_blank"
rel="noopener noreferrer"
@@ -75,7 +81,7 @@ export default function Navbar() {
{/* RSS Feed Link - Mobile */}
<Link
href="https://proxmenux.com/rss.xml"
href="https://macrimi.github.io/ProxMenux/rss.xml"
className="flex items-center space-x-2 py-2 transition-colors hover:text-primary text-orange-600 hover:text-orange-700"
onClick={() => setIsMenuOpen(false)}
target="_blank"

View File

@@ -6,7 +6,7 @@ import { useState } from "react"
export default function RSSLink() {
const [copied, setCopied] = useState(false)
const rssUrl = "https://proxmenux.com/rss.xml"
const rssUrl = "https://macrimi.github.io/ProxMenux/rss.xml"
const copyToClipboard = async () => {
try {

View File

@@ -26,3 +26,4 @@ export default function SupportProject() {
</section>
)
}

View File

@@ -32,3 +32,4 @@ export default function Testimonials() {
</section>
)
}

View File

@@ -23,4 +23,4 @@ export function ImageWithCaption({ src, alt, caption, width = 800, height = 450
<figcaption className="text-center text-sm text-gray-600 mt-2">{caption}</figcaption>
</figure>
)
}
}

View File

@@ -32,3 +32,4 @@ const Steps: React.FC<StepsProps> & { Step: typeof Step } = ({ children }) => (
Steps.Step = Step
export { Steps }