From c14b84d66c95fea5d2916b509f68484393d7064b Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Thu, 4 Dec 2025 16:40:47 +0100 Subject: [PATCH 01/43] add: star-half-fill icon --- .vitepress/theme/components/icons/star-half-fill.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .vitepress/theme/components/icons/star-half-fill.vue diff --git a/.vitepress/theme/components/icons/star-half-fill.vue b/.vitepress/theme/components/icons/star-half-fill.vue new file mode 100644 index 0000000..8e6ffb0 --- /dev/null +++ b/.vitepress/theme/components/icons/star-half-fill.vue @@ -0,0 +1,11 @@ + From ba2e66d650fa9f14f4289f1ce62db60d96eac572 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Thu, 4 Dec 2025 16:41:28 +0100 Subject: [PATCH 02/43] feat: change marketplace item links to internal detail pages --- .vitepress/theme/components/Marketplace.vue | 603 ++++++++++++-------- 1 file changed, 364 insertions(+), 239 deletions(-) diff --git a/.vitepress/theme/components/Marketplace.vue b/.vitepress/theme/components/Marketplace.vue index 698e7d5..62c55fa 100644 --- a/.vitepress/theme/components/Marketplace.vue +++ b/.vitepress/theme/components/Marketplace.vue @@ -1,312 +1,437 @@ \ No newline at end of file + From 2ff6e05d1745fa9a89c9351cf71d57dc5d18bb93 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Thu, 4 Dec 2025 16:45:42 +0100 Subject: [PATCH 03/43] feat: marketplace item detail page --- marketplace/[id].md | 140 ++++++++++++++++++++++++++++++++++++++ marketplace/[id].paths.js | 48 +++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 marketplace/[id].md create mode 100644 marketplace/[id].paths.js diff --git a/marketplace/[id].md b/marketplace/[id].md new file mode 100644 index 0000000..46ec8d6 --- /dev/null +++ b/marketplace/[id].md @@ -0,0 +1,140 @@ +--- +layout: page +--- + + + +
+ + + +
+ +
+{{ params.type }} +

+ {{ params.name }} +

+
+ +
+
+ +
+ +
+

{{ params.description }}

+ +
+
+ + +By: {{ params.author }} + + + + +Official + + +
+ +
+ + +Last Updated: {{ formatDate(params.last_update) }} + +
+
+ + +
+
+ +
+ +
+
+ +
{{ formatPrice(params.price) }}
+
Price
+
+ +
+ +
+ +{{ formatDownloads(params.downloads) }} +
+ +
Downloads
+
+ +
+ +
+ + + +
+ +
{{ params.rating }} out of 5
+
{{ params.review_count }} Reviews
+
+ +
+ +
+ +{{ params.purchase_count }} +
+ +
Purchases
+
+
+ +
+

About this {{ params.type }}

+
+

{{ params.description }}

+
+
+ +
diff --git a/marketplace/[id].paths.js b/marketplace/[id].paths.js new file mode 100644 index 0000000..4067a29 --- /dev/null +++ b/marketplace/[id].paths.js @@ -0,0 +1,48 @@ +export default { + async paths() { + try { + const response = await fetch( + "https://api.paymenter.org/extensions?limit=999", + ); + + if (!response.ok) { + throw new Error("Failed to fetch marketplace items"); + } + + const data = await response.json(); + + if (!data || !Array.isArray(data.extensions)) { + throw new Error("Invalid API response structure"); + } + + return data.extensions.map((item) => { + const slug = `${item.resource_id}-${item.name + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, "")}`; + + return { + params: { + id: slug, + resource_id: item.resource_id, + name: item.name, + author: item.author === "CorwinDev" ? "Paymenter" : item.author, + image: item.image_url, + url: item.url, + description: item.tag_line, + type: item.type, + rating: item.review_average, + downloads: item.download_count, + last_update: item.last_update_date, + review_count: item.review_count, + purchase_count: item.purchase_count, + price: item.price, + }, + }; + }); + } catch (error) { + console.error("Error fetching marketplace items:", error); + return []; + } + }, +}; From 37ae9b7b6707415c929cfc4ffc224aff97087bbc Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Mon, 15 Dec 2025 03:53:38 +0100 Subject: [PATCH 04/43] feat: brand page index --- brand/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 brand/index.md diff --git a/brand/index.md b/brand/index.md new file mode 100644 index 0000000..f164fcc --- /dev/null +++ b/brand/index.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Paymenter Media assets +description: +--- + + From 103cad26ad146d78fa8a13f6ddcc5946408e6651 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:05:39 +0100 Subject: [PATCH 05/43] Delete CustomFooter.vue --- .vitepress/theme/components/CustomFooter.vue | 101 ------------------- 1 file changed, 101 deletions(-) delete mode 100644 .vitepress/theme/components/CustomFooter.vue diff --git a/.vitepress/theme/components/CustomFooter.vue b/.vitepress/theme/components/CustomFooter.vue deleted file mode 100644 index b97f58a..0000000 --- a/.vitepress/theme/components/CustomFooter.vue +++ /dev/null @@ -1,101 +0,0 @@ - \ No newline at end of file From ffe93286e550053621c65cc5c5974f9a9d1730b2 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:10:29 +0100 Subject: [PATCH 06/43] feat: update config --- .vitepress/config.mjs | 409 +++++++++++++++++++++++------------------- 1 file changed, 222 insertions(+), 187 deletions(-) diff --git a/.vitepress/config.mjs b/.vitepress/config.mjs index baaea73..4fe9fe7 100644 --- a/.vitepress/config.mjs +++ b/.vitepress/config.mjs @@ -1,6 +1,6 @@ -import fs, { link } from 'fs' -import path from 'path' -import tailwindcss from '@tailwindcss/vite' +import fs, { link } from "fs"; +import path from "path"; +import tailwindcss from "@tailwindcss/vite"; export default { ignoreDeadLinks: true, @@ -8,320 +8,355 @@ export default { plugins: [tailwindcss()], resolve: { alias: { - '@components': path.resolve(__dirname, './theme/components') - } - } - /* Use only in development - server: { - proxy: { - '/api': { - target: 'https://api.paymenter.org', - changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, ''), - }, + "@components": path.resolve(__dirname, "./theme/components"), }, }, - */ }, - title: 'Paymenter', + title: "Paymenter", - description: 'Paymenter is an open source payment gateway for your hosting.', + description: "Paymenter is an open source payment gateway for your hosting.", cleanUrls: true, versioning: { - latestVersion: '1.0.0' + latestVersion: "1.0.0", }, transformHead: ({ pageData }) => { - const head = [] + const head = []; - head.push(['meta', { property: 'og:title', content: pageData.frontmatter.title && pageData.frontmatter.title !== 'Paymenter' ? pageData.frontmatter.title + " | Paymenter" : 'Paymenter' }]) - head.push(['meta', { property: 'og:description', content: pageData.frontmatter.description ? pageData.frontmatter.description : 'Paymenter is an open source payment gateway for your hosting.' }]) + head.push([ + "meta", + { + property: "og:title", + content: + pageData.frontmatter.title && + pageData.frontmatter.title !== "Paymenter" + ? pageData.frontmatter.title + " | Paymenter" + : "Paymenter", + }, + ]); + head.push([ + "meta", + { + property: "og:description", + content: pageData.frontmatter.description + ? pageData.frontmatter.description + : "Paymenter is an open source payment gateway for your hosting.", + }, + ]); // If path is / use textlogo, else use generated image - if (pageData.relativePath && pageData.relativePath !== 'index.md') { - head.push(['meta', { property: 'image:title', content: pageData.frontmatter.title ? pageData.frontmatter.title : 'Paymenter' }]) - head.push(['meta', { property: 'image:description', content: pageData.frontmatter.description ? pageData.frontmatter.description : 'Paymenter is an open source payment gateway for your hosting.' }]) + if (pageData.relativePath && pageData.relativePath !== "index.md") { + head.push([ + "meta", + { + property: "image:title", + content: pageData.frontmatter.title + ? pageData.frontmatter.title + : "Paymenter", + }, + ]); + head.push([ + "meta", + { + property: "image:description", + content: pageData.frontmatter.description + ? pageData.frontmatter.description + : "Paymenter is an open source payment gateway for your hosting.", + }, + ]); - head.push(['meta', { property: 'og:image', content: `/${pageData.relativePath.replace('.md', '')}/og-image.png` }]) - head.push(['meta', { property: 'twitter:image', content: `/${pageData.relativePath.replace('.md', '')}/og-image.png` }]) + head.push([ + "meta", + { + property: "og:image", + content: `/${pageData.relativePath.replace(".md", "")}/og-image.png`, + }, + ]); + head.push([ + "meta", + { + property: "twitter:image", + content: `/${pageData.relativePath.replace(".md", "")}/og-image.png`, + }, + ]); } else { - head.push(['meta', { property: 'og:image', content: '/textlogo.png' }]) - head.push(['meta', { property: 'twitter:image', content: '/textlogo.png' }]) + head.push(["meta", { property: "og:image", content: "/textlogo.png" }]); + head.push([ + "meta", + { property: "twitter:image", content: "/textlogo.png" }, + ]); } - return head + return head; }, themeConfig: { search: { - provider: 'local' + provider: "local", }, returnToTop: true, // Mobile only - appearance: 'dark', + appearance: "dark", nav: [ - { text: 'Home', link: '/' }, - { text: 'Docs', link: '/docs/installation/install' }, - { text: 'Releases', link: '/release/v1.4-release' }, - { text: 'Development', link: '/development/extensions/index.md' }, - { text: 'Marketplace', link: '/marketplace' } + { text: "Home", link: "/" }, + { text: "Docs", link: "/docs/installation/install" }, + { text: "Releases", link: "/release/v1.4-release" }, + { text: "Development", link: "/development/extensions/index.md" }, + { text: "Marketplace", link: "/marketplace" }, ], logo: { - light: '/logo-light.svg', - dark: '/logo-dark.svg', - alt: 'Paymenter Logo' + light: "/logo-light.svg", + dark: "/logo-dark.svg", + alt: "Paymenter Logo", }, siteTitle: false, sidebar: { - '/docs/': [ + "/docs/": [ { - text: 'Getting Started', + text: "Getting Started", items: [ - { text: 'Introduction', link: '/docs/getting-started/introduction' } - ] + { + text: "Introduction", + link: "/docs/getting-started/introduction", + }, + ], }, { - text: 'Setting Up', + text: "Setting Up", items: [ { - text: 'Installation', - link: '/docs/installation/install', + text: "Installation", + link: "/docs/installation/install", collapsed: true, items: [ - { text: 'Using Docker', link: '/docs/installation/docker' } - ] + { text: "Using Docker", link: "/docs/installation/docker" }, + ], }, { - text: 'Webserver Setup', - link: '/docs/installation/webserver', + text: "Webserver Setup", + link: "/docs/installation/webserver", collapsed: true, items: [ { - text: 'Creating SSL Certificates', - link: '/docs/installation/ssl' - } - ] + text: "Creating SSL Certificates", + link: "/docs/installation/ssl", + }, + ], }, - { text: 'Updating', link: '/docs/installation/updating' } - ] + { text: "Updating", link: "/docs/installation/updating" }, + ], }, { - text: 'Guides', + text: "Guides", items: [ { - text: 'Products', - link: '/docs/guides/products/', + text: "Products", + link: "/docs/guides/products/", collapsed: true, items: [ { - text: 'Config Options', - link: '/docs/guides/products/config-options' - } - ] + text: "Config Options", + link: "/docs/guides/products/config-options", + }, + ], }, { - text: 'Servers', - link: '/docs/guides/servers/', + text: "Servers", + link: "/docs/guides/servers/", collapsed: false, items: [ - { text: 'CPanel', link: '/docs/extensions/cpanel' }, - { text: 'Convoy', link: '/docs/extensions/convoy' }, - { text: 'DirectAdmin', link: '/docs/extensions/directadmin' }, - { text: 'Enhance', link: '/docs/extensions/enhance' }, - { text: 'Plesk', link: '/docs/extensions/plesk' }, - { text: 'Proxmox', link: '/docs/extensions/proxmox' }, - { text: 'Pterodactyl', link: '/docs/extensions/pterodactyl' }, - { text: 'VirtFusion', link: '/docs/extensions/virtfusion' }, - { text: 'Virtualizor', link: '/docs/extensions/virtualizor' } - ] + { text: "CPanel", link: "/docs/extensions/cpanel" }, + { text: "Convoy", link: "/docs/extensions/convoy" }, + { text: "DirectAdmin", link: "/docs/extensions/directadmin" }, + { text: "Enhance", link: "/docs/extensions/enhance" }, + { text: "Plesk", link: "/docs/extensions/plesk" }, + { text: "Proxmox", link: "/docs/extensions/proxmox" }, + { text: "Pterodactyl", link: "/docs/extensions/pterodactyl" }, + { text: "VirtFusion", link: "/docs/extensions/virtfusion" }, + { text: "Virtualizor", link: "/docs/extensions/virtualizor" }, + ], }, { - text: 'Gateways', - link: '/docs/guides/gateways/', + text: "Gateways", + link: "/docs/guides/gateways/", collapsed: false, items: [ - { text: 'Mollie', link: '/docs/extensions/mollie' }, - { text: 'PayPal', link: '/docs/extensions/paypal' }, - { text: 'Stripe', link: '/docs/extensions/stripe' } - ] + { text: "Mollie", link: "/docs/extensions/mollie" }, + { text: "PayPal", link: "/docs/extensions/paypal" }, + { text: "Stripe", link: "/docs/extensions/stripe" }, + ], }, { - text: 'Tickets', - link: '/docs/guides/tickets/' + text: "Tickets", + link: "/docs/guides/tickets/", }, - { text: 'Single Sign On', link: '/docs/guides/OAuth.md' }, - { text: 'WHMCS Importer', link: '/docs/guides/whmcs-importer' }, - { text: 'Migrate Paymenter', link: '/docs/guides/migrate' }, - { text: 'CLI', link: '/docs/guides/cli' }, - { text: 'FAQ', link: '/docs/guides/FAQ.md' } - ] + { text: "Single Sign On", link: "/docs/guides/OAuth.md" }, + { text: "WHMCS Importer", link: "/docs/guides/whmcs-importer" }, + { text: "Migrate Paymenter", link: "/docs/guides/migrate" }, + { text: "CLI", link: "/docs/guides/cli" }, + { text: "FAQ", link: "/docs/guides/FAQ.md" }, + ], }, { - text: 'Contribute', + text: "Contribute", items: [ { - text: 'Help Build Paymenter', - link: '/docs/contribute/how-to-help' + text: "Help Build Paymenter", + link: "/docs/contribute/how-to-help", }, { - text: 'Docs and Translation', - link: '/docs/contribute/docs-translations' - } - ] - } + text: "Docs and Translation", + link: "/docs/contribute/docs-translations", + }, + ], + }, ], - '/release/': [ + "/release/": [ { - text: 'Index', + text: "Index", items: [ - { text: 'V1.4 Release', link: '/release/v1.4-release' }, - { text: 'V1.3 Release', link: '/release/v1.3-release' }, - { text: 'V1.2 Release', link: '/release/v1.2-release' }, - { text: 'V1.1 Release', link: '/release/v1.1-release' }, - { text: 'V1 Release', link: '/release/v1-release' } - ] - } + { text: "V1.4 Release", link: "/release/v1.4-release" }, + { text: "V1.3 Release", link: "/release/v1.3-release" }, + { text: "V1.2 Release", link: "/release/v1.2-release" }, + { text: "V1.1 Release", link: "/release/v1.1-release" }, + { text: "V1 Release", link: "/release/v1-release" }, + ], + }, ], - '/api/': [ + "/api/": [ { - text: 'API Reference', - link: '/api/' - } + text: "API Reference", + link: "/api/", + }, ], - '/development/': [ + "/development/": [ { - text: 'Extensions', + text: "Extensions", items: [ - { text: 'Extensions', link: '/development/extensions/index.md' }, + { text: "Extensions", link: "/development/extensions/index.md" }, { - text: 'Configuration', - link: '/development/extensions/configuration.md' + text: "Configuration", + link: "/development/extensions/configuration.md", }, - { text: 'Event list', link: '/development/event-list.md' } - ] + { text: "Event list", link: "/development/event-list.md" }, + ], }, { - text: 'Types of Extensions', + text: "Types of Extensions", items: [ { - text: 'Server Extension', - link: '/development/extensions/server.md' + text: "Server Extension", + link: "/development/extensions/server.md", }, { - text: 'Gateway Extension', - link: '/development/extensions/gateway.md' - } - ] + text: "Gateway Extension", + link: "/development/extensions/gateway.md", + }, + ], }, { - text: 'Themes', + text: "Themes", items: [ - { text: 'Create a Theme', link: '/development/theme/index.md' }, - { text: 'Building assets', link: '/development/theme/assets.md' } - ] + { text: "Create a Theme", link: "/development/theme/index.md" }, + { text: "Building assets", link: "/development/theme/assets.md" }, + ], }, { - text: 'OAuth', - items: [{ text: 'OAuth', link: '/development/OAuth.md' }] + text: "OAuth", + items: [{ text: "OAuth", link: "/development/OAuth.md" }], }, { - text: 'API Reference', - link: '/api/', - } - ] + text: "API Reference", + link: "/api/", + }, + ], }, markdown: { image: { - lazyLoading: false - } - }, - - footer: { - message: - 'Released under the MIT License.', - copyright: 'Copyright © 2026 Paymenter. All Rights Reserved.' + lazyLoading: false, + }, }, socialLinks: [ { - icon: 'discord', - link: 'https://discord.gg/paymenter-882318291014651924' + icon: "discord", + link: "https://discord.gg/paymenter-882318291014651924", }, - { icon: 'github', link: 'https://github.com/Paymenter' } - ] + { icon: "github", link: "https://github.com/Paymenter" }, + ], }, head: [ [ - 'link', + "link", { - rel: 'alternate', - type: 'application/json+oembed', - href: 'https://paymenter.org/home.json' - } + rel: "alternate", + type: "application/json+oembed", + href: "https://paymenter.org/home.json", + }, ], [ - 'link', + "link", { - rel: 'icon', - href: '/favicon.ico' - } + rel: "icon", + href: "/favicon.ico", + }, ], [ - 'link', + "link", { - rel: 'apple-touch-icon', - sizes: '180x180', - href: '/apple-touch-icon.png' - } + rel: "apple-touch-icon", + sizes: "180x180", + href: "/apple-touch-icon.png", + }, ], [ - 'link', + "link", { - rel: 'icon', - type: 'image/png', - sizes: '32x32', - href: '/favicon-32x32.png' - } + rel: "icon", + type: "image/png", + sizes: "32x32", + href: "/favicon-32x32.png", + }, ], [ - 'link', + "link", { - rel: 'icon', - type: 'image/png', - sizes: '16x16', - href: '/favicon-16x16.png' - } + rel: "icon", + type: "image/png", + sizes: "16x16", + href: "/favicon-16x16.png", + }, ], [ - 'link', + "link", { - rel: 'manifest', - href: '/manifest.json' - } + rel: "manifest", + href: "/manifest.json", + }, ], [ - 'meta', + "meta", { - property: 'twitter:card', - content: 'summary_large_image' - } + property: "twitter:card", + content: "summary_large_image", + }, ], [ - 'meta', + "meta", // theme color { - name: 'theme-color', - content: '#4060ff' - } - ] - ] -} + name: "theme-color", + content: "#4060ff", + }, + ], + ], +}; From 3cf8454b39aaaea90f8d91ff68795d51022a8f67 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:11:15 +0100 Subject: [PATCH 07/43] feat: use custom Layout component --- .vitepress/theme/index.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js index f2f5c68..a3f31d9 100644 --- a/.vitepress/theme/index.js +++ b/.vitepress/theme/index.js @@ -1,10 +1,12 @@ -import DefaultTheme from 'vitepress/theme' -import './custom.css' -import { registerIcons } from './components/icons' +import DefaultTheme from "vitepress/theme"; +import Layout from "./Layout.vue"; +import "./custom.css"; +import { registerIcons } from "./components/icons"; export default { extends: DefaultTheme, + Layout, enhanceApp({ app }) { - registerIcons(app) + registerIcons(app); }, -} +}; From 57dbe2b0452574ae093b8b7a2ca6a33f5706fac6 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:11:44 +0100 Subject: [PATCH 08/43] remove: unused CustomFooter import --- index.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/index.md b/index.md index e7f74f9..98c2859 100644 --- a/index.md +++ b/index.md @@ -78,7 +78,6 @@ supportbanner: import Slider from '@theme/components/landing/Slider.vue' import Features from '@theme/components/landing/Features.vue' import SupportBanner from '@theme/components/landing/SupportBanner.vue' - import CustomFooter from '@theme/components/CustomFooter.vue'
@@ -91,7 +90,3 @@ supportbanner:
- -
- -
From 7d7cda2fb8d68970dfa90d4383d211e14eba3946 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:12:10 +0100 Subject: [PATCH 09/43] feat: add custom layout footer --- .vitepress/theme/Layout.vue | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .vitepress/theme/Layout.vue diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue new file mode 100644 index 0000000..43b2a51 --- /dev/null +++ b/.vitepress/theme/Layout.vue @@ -0,0 +1,21 @@ + + + From 91e8a585a1be97912e4937d5f0e0c8ca3ad78029 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:13:11 +0100 Subject: [PATCH 10/43] feat: LayoutFooter component --- .vitepress/theme/components/LayoutFooter.vue | 217 +++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 .vitepress/theme/components/LayoutFooter.vue diff --git a/.vitepress/theme/components/LayoutFooter.vue b/.vitepress/theme/components/LayoutFooter.vue new file mode 100644 index 0000000..c98ae63 --- /dev/null +++ b/.vitepress/theme/components/LayoutFooter.vue @@ -0,0 +1,217 @@ + + + From 86161d694c25d75750e2c9df1c0bc4b53a8b8c2d Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:13:27 +0100 Subject: [PATCH 11/43] add: Blesta icon component --- .../theme/components/icons/blesta-icon.vue | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .vitepress/theme/components/icons/blesta-icon.vue diff --git a/.vitepress/theme/components/icons/blesta-icon.vue b/.vitepress/theme/components/icons/blesta-icon.vue new file mode 100644 index 0000000..762888d --- /dev/null +++ b/.vitepress/theme/components/icons/blesta-icon.vue @@ -0,0 +1,16 @@ + From 96e575bdf21b9e5254cfbfb6340f18bde4f29bef Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:13:34 +0100 Subject: [PATCH 12/43] add: Paymenter icon component --- .../theme/components/icons/paymenter-icon.vue | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .vitepress/theme/components/icons/paymenter-icon.vue diff --git a/.vitepress/theme/components/icons/paymenter-icon.vue b/.vitepress/theme/components/icons/paymenter-icon.vue new file mode 100644 index 0000000..f617fab --- /dev/null +++ b/.vitepress/theme/components/icons/paymenter-icon.vue @@ -0,0 +1,47 @@ + From 2b3c87d3d85abe4e56847f525dffa0c178d2de58 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:13:41 +0100 Subject: [PATCH 13/43] add: WHMCS icon component --- .vitepress/theme/components/icons/whmcs-icon.vue | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .vitepress/theme/components/icons/whmcs-icon.vue diff --git a/.vitepress/theme/components/icons/whmcs-icon.vue b/.vitepress/theme/components/icons/whmcs-icon.vue new file mode 100644 index 0000000..42f879b --- /dev/null +++ b/.vitepress/theme/components/icons/whmcs-icon.vue @@ -0,0 +1,12 @@ + From 7d228a501e91fef8adcfc15bac125adb21b9a93b Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 00:17:21 +0100 Subject: [PATCH 14/43] refactor: improve structure + migration section --- .../theme/components/landing/Features.vue | 1073 ++++++++++++----- 1 file changed, 778 insertions(+), 295 deletions(-) diff --git a/.vitepress/theme/components/landing/Features.vue b/.vitepress/theme/components/landing/Features.vue index 4582a75..f3feffd 100644 --- a/.vitepress/theme/components/landing/Features.vue +++ b/.vitepress/theme/components/landing/Features.vue @@ -1,290 +1,444 @@ - From fb8c844509586d87371ee102c9df7f5d8dbfd5d4 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 20 Dec 2025 02:54:42 +0100 Subject: [PATCH 15/43] refactor: update tailwind styles --- .vitepress/theme/components/Anniversary.vue | 1577 +++++++++++------ .vitepress/theme/components/LayoutFooter.vue | 68 +- .vitepress/theme/components/Marketplace.vue | 57 +- .../theme/components/landing/FeatureItem.vue | 36 +- .../theme/components/landing/Features.vue | 139 +- .vitepress/theme/components/landing/Hero.vue | 151 +- .../theme/components/landing/SectionBlock.vue | 26 +- .../theme/components/landing/Slider.vue | 217 ++- .../components/landing/SupportBanner.vue | 66 +- .vitepress/theme/custom.css | 770 ++++---- marketplace/[id].md | 44 +- 11 files changed, 1847 insertions(+), 1304 deletions(-) diff --git a/.vitepress/theme/components/Anniversary.vue b/.vitepress/theme/components/Anniversary.vue index dc3769c..8edb2bd 100644 --- a/.vitepress/theme/components/Anniversary.vue +++ b/.vitepress/theme/components/Anniversary.vue @@ -1,662 +1,1099 @@ diff --git a/.vitepress/theme/components/LayoutFooter.vue b/.vitepress/theme/components/LayoutFooter.vue index c98ae63..2e8bee8 100644 --- a/.vitepress/theme/components/LayoutFooter.vue +++ b/.vitepress/theme/components/LayoutFooter.vue @@ -7,19 +7,19 @@ const year = new Date().getFullYear();
@@ -47,36 +47,34 @@ const year = new Date().getFullYear();
-

- Product -

+

Product

-

+

Developers

-

- About -

-
-

- Other -

+

Other

@@ -371,13 +371,13 @@ const createSlug = (id, name) => {

You've reached the end!

@@ -386,13 +386,6 @@ const createSlug = (id, name) => { From 4494cab110a3d4636c76e8c961a27000ae049acd Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 3 Jan 2026 03:34:30 +0100 Subject: [PATCH 24/43] refactor: move release notes to releases --- {release => releases}/v1-release.md | 0 {release => releases}/v1.1-release.md | 0 {release => releases}/v1.2-release.md | 0 {release => releases}/v1.3-release.md | 0 {release => releases}/v1.4-release.md | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {release => releases}/v1-release.md (100%) rename {release => releases}/v1.1-release.md (100%) rename {release => releases}/v1.2-release.md (100%) rename {release => releases}/v1.3-release.md (100%) rename {release => releases}/v1.4-release.md (100%) diff --git a/release/v1-release.md b/releases/v1-release.md similarity index 100% rename from release/v1-release.md rename to releases/v1-release.md diff --git a/release/v1.1-release.md b/releases/v1.1-release.md similarity index 100% rename from release/v1.1-release.md rename to releases/v1.1-release.md diff --git a/release/v1.2-release.md b/releases/v1.2-release.md similarity index 100% rename from release/v1.2-release.md rename to releases/v1.2-release.md diff --git a/release/v1.3-release.md b/releases/v1.3-release.md similarity index 100% rename from release/v1.3-release.md rename to releases/v1.3-release.md diff --git a/release/v1.4-release.md b/releases/v1.4-release.md similarity index 100% rename from release/v1.4-release.md rename to releases/v1.4-release.md From 99ba3b8d77891f45b6e8c464e3f563baca05ad44 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 3 Jan 2026 03:35:24 +0100 Subject: [PATCH 25/43] feat: add new icons --- .../components/icons/account-circle-fill.vue | 11 ++++++++++ .../components/icons/arrow-left-fill.vue | 9 ++++++++ .../theme/components/icons/builtbybit.vue | 22 +++++++++++++++++++ .../theme/components/icons/check-fill.vue | 11 ++++++++++ .../components/icons/checkbox-circle-fill.vue | 11 ++++++++++ .../theme/components/icons/code-fill.vue | 11 ++++++++++ .vitepress/theme/components/icons/link-m.vue | 11 ++++++++++ .../components/icons/price-tag-3-fill.vue | 11 ++++++++++ .../theme/components/icons/share-2-fill.vue | 11 ++++++++++ 9 files changed, 108 insertions(+) create mode 100644 .vitepress/theme/components/icons/account-circle-fill.vue create mode 100644 .vitepress/theme/components/icons/arrow-left-fill.vue create mode 100644 .vitepress/theme/components/icons/builtbybit.vue create mode 100644 .vitepress/theme/components/icons/check-fill.vue create mode 100644 .vitepress/theme/components/icons/checkbox-circle-fill.vue create mode 100644 .vitepress/theme/components/icons/code-fill.vue create mode 100644 .vitepress/theme/components/icons/link-m.vue create mode 100644 .vitepress/theme/components/icons/price-tag-3-fill.vue create mode 100644 .vitepress/theme/components/icons/share-2-fill.vue diff --git a/.vitepress/theme/components/icons/account-circle-fill.vue b/.vitepress/theme/components/icons/account-circle-fill.vue new file mode 100644 index 0000000..1e9f836 --- /dev/null +++ b/.vitepress/theme/components/icons/account-circle-fill.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/arrow-left-fill.vue b/.vitepress/theme/components/icons/arrow-left-fill.vue new file mode 100644 index 0000000..c6d1de4 --- /dev/null +++ b/.vitepress/theme/components/icons/arrow-left-fill.vue @@ -0,0 +1,9 @@ + diff --git a/.vitepress/theme/components/icons/builtbybit.vue b/.vitepress/theme/components/icons/builtbybit.vue new file mode 100644 index 0000000..2630b82 --- /dev/null +++ b/.vitepress/theme/components/icons/builtbybit.vue @@ -0,0 +1,22 @@ + diff --git a/.vitepress/theme/components/icons/check-fill.vue b/.vitepress/theme/components/icons/check-fill.vue new file mode 100644 index 0000000..eebb80f --- /dev/null +++ b/.vitepress/theme/components/icons/check-fill.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/checkbox-circle-fill.vue b/.vitepress/theme/components/icons/checkbox-circle-fill.vue new file mode 100644 index 0000000..15b1c01 --- /dev/null +++ b/.vitepress/theme/components/icons/checkbox-circle-fill.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/code-fill.vue b/.vitepress/theme/components/icons/code-fill.vue new file mode 100644 index 0000000..cc57d17 --- /dev/null +++ b/.vitepress/theme/components/icons/code-fill.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/link-m.vue b/.vitepress/theme/components/icons/link-m.vue new file mode 100644 index 0000000..68e1da0 --- /dev/null +++ b/.vitepress/theme/components/icons/link-m.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/price-tag-3-fill.vue b/.vitepress/theme/components/icons/price-tag-3-fill.vue new file mode 100644 index 0000000..4503fce --- /dev/null +++ b/.vitepress/theme/components/icons/price-tag-3-fill.vue @@ -0,0 +1,11 @@ + diff --git a/.vitepress/theme/components/icons/share-2-fill.vue b/.vitepress/theme/components/icons/share-2-fill.vue new file mode 100644 index 0000000..1c29133 --- /dev/null +++ b/.vitepress/theme/components/icons/share-2-fill.vue @@ -0,0 +1,11 @@ + From edaeb405e26e5d566ae358e537bcb4a5d9091b85 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 3 Jan 2026 03:36:53 +0100 Subject: [PATCH 26/43] refactor: rename custom.css to global.css --- .vitepress/theme/{custom.css => global.css} | 14 ++++---------- .vitepress/theme/index.js | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) rename .vitepress/theme/{custom.css => global.css} (98%) mode change 100644 => 100755 .vitepress/theme/index.js diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/global.css similarity index 98% rename from .vitepress/theme/custom.css rename to .vitepress/theme/global.css index 3bbd4b5..fa3fbf7 100644 --- a/.vitepress/theme/custom.css +++ b/.vitepress/theme/global.css @@ -58,18 +58,12 @@ } } -/* Sponsors button animation, greyscale on default, color on hover */ -.sponsor-logo { - filter: grayscale(100%); - transition: filter 0.3s; -} -.sponsor-logo:hover { - filter: grayscale(0%); +@utility card { + @apply bg-(--vp-c-bg-soft) backdrop-blur-sm rounded-xl overflow-hidden border border-(--vp-c-border); } -/* Group hover version for sponsor logos */ -.group:hover .sponsor-logo { - filter: grayscale(0%); +@utility card-hover { + @apply transition-all duration-300 hover:border-(--vp-c-brand-1)/50; } /* /////////////////// */ diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js old mode 100644 new mode 100755 index a3f31d9..4397d17 --- a/.vitepress/theme/index.js +++ b/.vitepress/theme/index.js @@ -1,6 +1,6 @@ import DefaultTheme from "vitepress/theme"; import Layout from "./Layout.vue"; -import "./custom.css"; +import "./global.css"; import { registerIcons } from "./components/icons"; export default { From d2333d84941cbfd332e44999163a249a71a666e0 Mon Sep 17 00:00:00 2001 From: iamdarkle Date: Sat, 3 Jan 2026 03:38:41 +0100 Subject: [PATCH 27/43] fix: adjust support banner min-height --- .vitepress/theme/components/landing/SupportBanner.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vitepress/theme/components/landing/SupportBanner.vue b/.vitepress/theme/components/landing/SupportBanner.vue index 670f4d0..b02bfd5 100644 --- a/.vitepress/theme/components/landing/SupportBanner.vue +++ b/.vitepress/theme/components/landing/SupportBanner.vue @@ -5,7 +5,7 @@ const { frontmatter } = useData();