feat(marketplace): rebuild as static git-sourced browser in the docs site#218
Open
siracusa5 wants to merge 3 commits into
Open
feat(marketplace): rebuild as static git-sourced browser in the docs site#218siracusa5 wants to merge 3 commits into
siracusa5 wants to merge 3 commits into
Conversation
…site Collapse the two-app/two-design-system split into one. The marketplace is now real pages in the website, generated from git at build time, with trust signals from the existing security scanner. Retire the dormant Supabase app; preserve its schema as the seed of future community/team publishing. - packages/marketplace-data: build-time generator (marketplace.json + plugin.json + SKILL.md → static JSON), runs the core security scanner, --strict mode, tests - website/app/marketplace: browse + per-plugin detail pages, in-memory search and category/tag/trust filters (no useSearchParams — clean static export) - MarketplaceSource seam: one StaticSource today; a future dynamic source merges into the same UI with no rewrite - trust signals: scanner output baked in at build time, rendered as badges/panel, with a new concepts/trust-signals doc - docs search: Fumadocs static index (staticGET + provider type: 'static') - rewire SiteNav, explore tile, and DesktopMock to real data - retire apps/marketplace; archive its 7 Supabase migrations + seed to docs/archive/marketplace-supabase/; scrub references - CI: deploy-docs generates data via a filtered root install before the website build; broaden paths to redeploy on plugin/manifest edits Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
A declared sensitive env var is info-level, not a warning — the Caution badge is driven by warning-level findings (external URLs, network, broad filesystem writes). Clarify the badge table and add an informational-note explanation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The website imports a gitignored static JSON generated from git. Only deploy-docs ran the generator; the validate test-all + docs-build jobs and the build.yml turbo build failed on the missing module. Add the generate step to each: a direct call in the full-workspace jobs (test-all, build) and the filtered-install pattern in the isolated docs-build job. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rebuilds the plugin marketplace to collapse two Next.js apps (and two design systems) into one. The marketplace is now real, browsable pages inside the documentation site, generated from git at build time, with trust signals produced by the existing security scanner. The dormant Supabase marketplace app is retired and its schema archived as the seed of future community/team self-service publishing.
This is the foundation chosen deliberately for where the project is today (16 first-party plugins, no community yet): static-from-git needs no infra and never drifts, while a
MarketplaceSourceabstraction keeps the door open for a dynamic backend later with no UI rewrite.Changes
packages/marketplace-data/(new) — build-time generator: readsmarketplace.json+ eachplugin.json+SKILL.md, runs the@harness-kit/coresecurity scanner, derives trust tiers, emits a typed static JSON. Supports--strict(fails the build on a failed scan). Includes vitest coverage asserting the 16-plugin invariant.website/app/marketplace/— browse page + per-plugin detail pages (generateStaticParams). Client-side search and category/tag/trust filters held in memory (nouseSearchParams, so static export stays clean). Detail pages show install command (copy), env requirements, MCP info, a security panel, and inline SKILL.md source.MarketplaceSourceseam — the browse layer reads through a source abstraction (oneStaticSourcetoday); a future remote source merges into the same UI unchanged.concepts/trust-signalspage.staticGETroute +RootProvidertype: 'static'), no backend.SiteNav(Marketplace link), the explore tile, and the homepageDesktopMockto use real plugin data instead of hardcoded lists.apps/marketplace/— deleted the dormant Supabase app; archived its 7 migrations + seed todocs/archive/marketplace-supabase/(history-preserving move); scrubbed references inSECURITY.md,.gitignore,dependabot.yml,CLAUDE.md, and rootpackage.json.deploy-docs.yml) — generates the marketplace data via a filtered root install before the (isolated) website build;paths:broadened so plugin/manifest edits trigger a redeploy. Generated JSON is treated as build output (gitignored).Test Plan
pnpm -F @harness-kit/marketplace-data test— 12/12)--strictexits 0/marketplace, 16/marketplace/[slug],/api/search, and the trust-signals doc all emitNotes
MarketplaceSourceabstraction make adding them later additive rather than a rewrite.compile()playground —compile()usesnode:crypto; making it isomorphic (Web Crypto) is an easy follow-up.