Sulu Hub is a small Nuxt application that lists and showcases community bundles for the Sulu CMS.
Bundle metadata is stored as markdown files and automatically enriched (GitHub stars, downloads, Sulu version, etc.) whenever the app starts.
- Discoverability: Provide a browsable, searchable overview of Sulu bundles in one place.
- Up‑to‑date metadata: Keep stars, downloads and repository activity fresh via an automatic updater.
- Simple contribution model: Make it easy to add new bundles via a single markdown file per bundle.
- Nuxt 4 (
nuxt) as the application framework. - Nuxt UI (
@nuxt/ui) for the component library and styling baseline. - Nuxt Content (
@nuxt/content) to source bundle data from markdown files undercontent/bundles. - Tailwind CSS 4 (
tailwindcss) for additional utility styling. - Custom Nuxt module
bundles-metadata-updaterfor keeping bundle metadata in sync with GitHub and Packagist.
Install the dependencies:
npm installCopy .env.example to .env.
Start the development server on http://localhost:3000:
npm run devThis will:
- Launch the Nuxt dev server.
- Run the
bundles-metadata-updatermodule once on startup to refresh bundle metadata if the last update is older than its configured max age (24h by default).
Build the application for production:
npm run generateLocally preview the production build:
npm run previewOn each cold start of the Nuxt app (build or dev), the bundles-metadata-updater module runs once and refreshes bundle markdown frontmatter where needed.
- All bundles live under
content/bundles/*.md. - The bundle collection schema is defined in
content.config.ts. - Each file uses frontmatter with fields like
title,packageName,githubStars,totalDownloads,targetSuluVersion,lastRepositoryUpdate, andcategories.
You normally only need to author the static parts; the updater takes care of dynamic metadata (githubStars, totalDownloads).
There are two ways to add a bundle entry.
If you are using this repository in an AI‑assisted environment (Cursor with the generate-bundle-md skill enabled), you can:
- Provide one or more GitHub repository URLs for Sulu bundles.
- Let the skill:
- Fetch
composer.jsonandREADME.mdfrom GitHub. - Create a new markdown file under
content/bundles/with the correct filename, frontmatter keys and types. - Pre‑fill:
titleandpackageName.shortDescriptionand body text from the README.licenseandgithubMaintainer.githubLinkand initialcategories.
- Fetch
If you prefer to do it by hand:
-
Create a file under
content/bundles/, e.g.sulu-tailwind-theme-bundle.md.- Filenames are typically the bundle name in kebab case, ending with
-bundle.md.
- Filenames are typically the bundle name in kebab case, ending with
-
Add frontmatter matching the schema in
content.config.ts -
Run the app (
npm run devornpm run generate) so that the metadata updater can enrich the new entry.
We are looking forward to reviewing your contributions! Feel free to submit a new issue or pull request.
This project was initiated by the team of https://robole.de.