feat: add community marketplace for custom widgets and CSS

Adds a PocketBase-backed marketplace where users can share custom widgets
and CSS themes. Includes a Docusaurus storefront with GitHub OAuth login,
submission/voting/comments, and a PocketBase SQL view that computes author
names, vote counts, and comment counts without fragile hooks. The Next.js
app gets a modal browser for one-click install from the marketplace plus
clipboard paste-to-import on the custom widgets pages.
This commit is contained in:
Thomas Camlong committed 2026-06-24 15:24:48 +02:00
1 parent b6b7bea1dd
commit 1fb7e16d42
44 files changed
+5897 -1643

No files matched your search

+27 -1
View File
@@ -20,6 +20,10 @@ const config: Config = {
onBrokenAnchors: "throw",
onDuplicateRoutes: "throw",
customFields: {
storeUrl: process.env.STORE_URL ?? "http://localhost:8090",
},
future: {
v4: {
removeLegacyPostBuildHeadAttribute: true,
@@ -105,6 +109,11 @@ const config: Config = {
position: "left",
to: "/blog",
},
{
label: "Marketplace",
position: "left",
to: "/marketplace",
},
{
label: "About us",
position: "left",
@@ -259,7 +268,12 @@ const config: Config = {
return {
name: "resolve-homarr-packages",
configureWebpack() {
return { resolve: { symlinks: false } };
return {
resolve: {
symlinks: false,
alias: { "@": require("path").resolve(__dirname, "src") },
},
};
},
};
},
@@ -290,6 +304,18 @@ const config: Config = {
},
};
},
function marketplaceDetailRoutePlugin() {
return {
name: "marketplace-detail-route",
async contentLoaded({ actions }) {
actions.addRoute({
path: "/marketplace/:id",
component: "@site/src/components/store/DetailPage",
exact: true,
});
},
};
},
"@signalwire/docusaurus-plugin-llms-txt",
async function tailwindCssPlugin() {
return {