Skip to content

web: serve raw SKILL.md downloads instead of per-skill ZIPs#18

Merged
konowrockis merged 1 commit into
mainfrom
feat/web-skills-direct-md-download
May 22, 2026
Merged

web: serve raw SKILL.md downloads instead of per-skill ZIPs#18
konowrockis merged 1 commit into
mainfrom
feat/web-skills-direct-md-download

Conversation

@konowrockis
Copy link
Copy Markdown
Member

Summary

  • The per-skill button on /plugins/<slug> now downloads the raw SKILL.md directly instead of a one-file ZIP, with download=\"<name>.md\" so browsers save it with the skill name.
  • web/scripts/generate-catalog.mjs copies each SKILL.md to public/generated/downloads/skills/<name>.md (no JSZip per skill) and the catalog's skill.downloadUrl points at the .md.
  • SkillBulkPanel keeps the multi-select archive flow, but the inner entries are now <name>.md files rather than nested .zips.
  • Section copy and button label updated ("Download the raw SKILL.md file" / Download button).

Test plan

  • cd web && npm run generate:catalog produces public/generated/downloads/skills/*.md (36 files) and no per-skill .zips.
  • Visit /plugins/flutter-analytics: "Download" button on each skill card saves e.g. flutter-analytics-usage.md with valid frontmatter + body.
  • Bulk panel: select two skills, download "selected skills" archive, confirm it contains <name>.md entries.
  • npx tsc --noEmit passes in web/.

Made with Cursor

Switch the per-skill download button on plugin pages to fetch the raw
markdown file directly. The catalog generator now copies each
SKILL.md to public/generated/downloads/skills/<name>.md instead of
zipping it, the plugin page exposes a "Download" button pointing at
that file, and the bulk panel bundles .md files inside the
selected-skills archive.

Co-authored-by: Cursor <cursoragent@cursor.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ai-plugins Ready Ready Preview May 22, 2026 12:37pm

Request Review

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the web marketplace to download individual skills as raw SKILL.md markdown files (served as static assets) instead of generating and serving per-skill ZIP archives, while keeping the bulk-download-as-ZIP experience.

Changes:

  • Switch per-skill downloads from *.zip to *.md and adjust UI copy/button labeling accordingly.
  • Update catalog generation to copy each SKILL.md into public/generated/downloads/skills/<name>.md and point skill.downloadUrl at the .md.
  • Update the bulk download panel to bundle selected skills as *.md entries (not nested ZIPs).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
web/src/components/skill-bulk-panel.tsx Updates bulk ZIP entry names to *.md to match the new per-skill raw download format.
web/src/app/plugins/[slug]/page.tsx Updates skills section copy and changes the per-skill button to download *.md with a download filename.
web/scripts/generate-catalog.mjs Replaces per-skill ZIP generation with copying SKILL.md into the generated public downloads directory and updates downloadUrl.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 176 to +182
const raw = await readTextAbsolute(skillFile);
const parsed = matter(raw);
const description = readFrontmatterString(parsed.data.description, skillSlug);
const name = readFrontmatterString(parsed.data.name, skillSlug);
const downloadUrl = `/generated/downloads/skills/${name}.zip`;
const downloadUrl = `/generated/downloads/skills/${name}.md`;

await writeZip(path.join(downloadsDir, "skills", `${name}.zip`), [
{ source: skillDir, target: `plugins/${pluginSlug}/skills/${skillSlug}` },
]);
await fs.copyFile(skillFile, path.join(downloadsDir, "skills", `${name}.md`));
Comment on lines 30 to 34
.filter((skill) => selectedSkills.has(skill.name))
.map((skill) => ({
name: `${skill.name}.zip`,
name: `${skill.name}.md`,
url: skill.downloadUrl,
}));
Comment on lines 147 to +152
<a
href={skill.downloadUrl}
download
download={`${skill.name}.md`}
className="rounded-full border border-white/16 px-4 py-2 font-mono text-xs font-bold text-white transition hover:border-accent hover:text-accent"
>
ZIP
Download
@konowrockis konowrockis merged commit cdd23aa into main May 22, 2026
5 checks passed
@konowrockis konowrockis deleted the feat/web-skills-direct-md-download branch May 22, 2026 13:35
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.

3 participants