Skip to content

Marketplace storefront (VS Code-style SPA) + stop tracking .orplug binaries - #5

Merged
ClausValcaTD merged 1 commit into
mainfrom
feat/marketplace-storefront
Nov 2, 2026
Merged

ClausValcaTD merged 1 commit into
mainfrom
feat/marketplace-storefront

Conversation

@ClausValcaTD

@ClausValcaTD ClausValcaTD commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

What this changes

Rebuilds the storefront as a VS Code Marketplace–style single-page app, adds the
extension data contract, and stops tracking plugin binaries in Git.

Phase 1 — repository hygiene

  • *.orplug added to .gitignore
  • the three committed bundles (packages/*.orplug, ~21 MB) deleted from the tree

Phase 2 — marketplace

  • public/plugins.json — new data contract + 12 showcase extensions (NKit, Xbox ZAR
    Suite, Saturn Tools, PSX Disc Forge, CHDMan Wrapper, …)
  • public/index.html — rewritten as a client-side SPA (Tailwind + Alpine.js + Lucide)
  • CONTRIBUTING.md — how a community developer submits an extension
  • Cloudflare Pages config: wrangler.toml, public/_headers, public/_redirects
public/
├── index.html        ← SPA: discovery, cards, detail drawer   (43 KB)
├── plugins.json      ← data contract + showcase catalog
├── _headers          ← CSP, nosniff, referrer policy
├── _redirects        ← legacy /plugin.html, /publisher.html → /
├── maker.html        ← manifest generator (kept, links fixed)
├── plugin.html       ← removed (superseded by the drawer)
└── publisher.html    ← removed (superseded by the drawer)

Storefront features

Area Detail
Header branding, live search, GitHub / Discord, Publish an Extension CTA
Discovery category sidebar with counts, platform chips, publisher filter, instant search, 5 sort modes, active-filter pills
Cards icon, verified badge, downloads, rating, category, route preview, 1-click copy-install
Details drawer tabs: Overview (markdown), Supported Routes (ISO ➔ WUA), Installation (CLI + GUI), Manifest (raw JSON)
Theme dark zinc-900/950 with neon cyan/purple accents

Verified in a real browser: 12 cards render, all category filters return correct
counts, searching chd narrows to the 4 CHD extensions in real time, the drawer
opens on all four tabs, and the copy button flips to "Copied!". HTML tag balance
is clean, both inline scripts pass node --check, and the existing security suite
passes (3/3).

⚠️ History rewrite is a separate, maintainer-run step

This PR removes the binaries from the tree only. They remain reachable in
main's history (packages/nintendo-nkit.orplug is an 18 MB blob).

Purging them from history rewrites every commit SHA, so it cannot be delivered as
a normal PR — it requires a force-push to main:

git fetch --unshallow
git filter-repo --invert-paths --path-glob '*.orplug' --force
git remote add origin https://github.com/M5Devs/OpenROM-Plugins-Store.git
git push --force-with-lease origin main

This has been prepared and tested locally (.git went 21 MB → 384 KB, no .orplug
object in any commit), but must be run by a maintainer because it discards
main's existing SHAs and invalidates open PRs.

Follow-ups

  • packages/ is now empty except .gitkeep; scripts/package_plugins.py still
    builds .orplug files into it — they are ignored, which is the intent, but the
    script could be retargeted to a SourceForge upload step.

This pull request was created by an AI agent (OpenHands) on behalf of the repository maintainers.

Summary by CodeRabbit

  • New Features
    • Redesigned the storefront as a marketplace with search, category and platform filters, sorting, catalog statistics, and detailed extension views.
    • Added 12 extensions to the catalog, with metadata, supported platforms, download information, and installation details.
    • Added guidance for publishing extensions and previewing or deploying the marketplace.
  • Improvements
    • Added legacy page redirects and site security and caching settings.
    • Updated navigation to use “Marketplace.”

Storefront (public/index.html) rebuilt as a client-side single-page app:
- Tailwind CSS + Alpine.js + Lucide; dark zinc/neon theme
- category sidebar, platform chips, publisher filter, instant search, sort
- extension cards with verified-publisher badge, downloads, rating and a
  1-click copy-CLI-install button
- VS Code-style details drawer: Overview (markdown), Supported Routes,
  Installation (CLI + GUI), Manifest (raw JSON)

Catalog and data contract:
- add public/plugins.json with the extension schema and 12 showcase entries
- drop legacy plugin.html / publisher.html (superseded by the drawer)

Repository hygiene (binaries belong on SourceForge, not in Git):
- add *.orplug to .gitignore
- delete the three committed .orplug bundles from the tree
  NOTE: this removes them from the tree but NOT from history; history is
  rewritten separately with git-filter-repo and force-pushed by a maintainer.

Deployment:
- Cloudflare Pages config: wrangler.toml, public/_headers, public/_redirects
- CONTRIBUTING.md: how to submit an extension (manifest, SourceForge URL, SHA-256)

Co-authored-by: openhands <openhands@all-hands.dev>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying openrom-store with  Cloudflare Pages  Cloudflare Pages

Latest commit: 916f144
Status: ✅  Deploy successful!
Preview URL: https://3acb4599.openrom-store.pages.dev
Branch Preview URL: https://feat-marketplace-storefront.openrom-store.pages.dev

View logs

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Walkthrough

The pull request replaces the previous store pages with a marketplace that reads extension records from public/plugins.json. It adds Cloudflare Pages settings and documents the catalog structure, extension submission process, and local validation commands.

Changes: Marketplace storefront

Layer / File(s) Summary
Marketplace catalog
public/plugins.json, public/api/catalog.json
Adds 12 extension records with metadata, routes, and platform support. Updates the catalog generation timestamp.
Marketplace interface
public/index.html, public/plugin.html, public/publisher.html, public/maker.html
Replaces the previous store with catalog search, filters, sorting, extension cards, and a detail drawer. Removes the separate plugin and publisher pages and updates navigation links.
Pages hosting and legacy routes
wrangler.toml, public/_headers, public/_redirects
Adds Cloudflare Pages configuration, security and caching headers, and redirects from legacy storefront paths to /index.html.
Extension publishing workflow
README.md, CONTRIBUTING.md, .gitignore
Documents the catalog structure and extension submission process. Adds local validation instructions and excludes .orplug bundles from Git.

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant Storefront as public/index.html
  participant Catalog as public/plugins.json
  Visitor->>Storefront: Open marketplace
  Storefront->>Catalog: Fetch plugin data without caching
  Catalog-->>Storefront: Return extension records
  Storefront-->>Visitor: Render filters and extension cards
  Visitor->>Storefront: Select an extension
  Storefront-->>Visitor: Show the detail drawer
Loading
Merge Risk: Moderate · up to 916f1

The new marketplace works as a showcase, but the listed extension downloads do not exist yet. The contributor guide also gives instructions that fail validation or do not publish to the storefront. Rendering of readme text should be hardened before real third-party content is accepted. Resolve these or explicitly accept them as demo-stage limitations before merging.

- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Copy link
Copy Markdown
Member Author

History purge — ready-to-run branch

To make the destructive step easy, the rewritten history has been pushed as
chore/purge-orplug-history. It is main's content plus the *.orplug purge
already applied, so a maintainer can finish Phase 1 with:

git push --force-with-lease origin chore/purge-orplug-history:main

Before doing so, note:

  • This rewrites main's SHAs. Open PRs (including this one) will need rebasing,
    and any existing forks/clones will need re-cloning.
  • GitHub will keep the old blobs reachable via the PR refs of closed/merged PRs
    (e.g. refs/pull/4/head) and via cached views. Purging those requires a
    GitHub Support request to remove stale
    refs, or is resolved by the garbage collection GitHub runs after they age out.
    The objects are unreachable from main, which is what the task asks for.
  • Verified locally: .git 21 MB → 384 KB, and git rev-list --objects --all
    returns no .orplug object.

This comment was created by an AI agent (OpenHands) on behalf of the repository maintainers.

@ClausValcaTD
ClausValcaTD merged commit 4c923f8 into main Nov 2, 2026
2 of 3 checks passed
@ClausValcaTD
ClausValcaTD deleted the feat/marketplace-storefront branch November 2, 2026 01:34
ClausValcaTD added a commit that referenced this pull request Nov 2, 2026
)

Storefront (public/index.html) rebuilt as a client-side single-page app:
- Tailwind CSS + Alpine.js + Lucide; dark zinc/neon theme
- category sidebar, platform chips, publisher filter, instant search, sort
- extension cards with verified-publisher badge, downloads, rating and a
  1-click copy-CLI-install button
- VS Code-style details drawer: Overview (markdown), Supported Routes,
  Installation (CLI + GUI), Manifest (raw JSON)

Catalog and data contract:
- add public/plugins.json with the extension schema and 12 showcase entries
- drop legacy plugin.html / publisher.html (superseded by the drawer)

Repository hygiene (binaries belong on SourceForge, not in Git):
- add *.orplug to .gitignore
- delete the three committed .orplug bundles from the tree
  NOTE: this removes them from the tree but NOT from history; history is
  rewritten separately with git-filter-repo and force-pushed by a maintainer.

Deployment:
- Cloudflare Pages config: wrangler.toml, public/_headers, public/_redirects
- CONTRIBUTING.md: how to submit an extension (manifest, SourceForge URL, SHA-256)

Co-authored-by: openhands <openhands@all-hands.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants