From 964951cb1d8b14494874a4c25de5943fd183e492 Mon Sep 17 00:00:00 2001 From: Rody Davis Date: Tue, 3 Feb 2026 13:17:51 -0800 Subject: [PATCH] Update build_site.js --- scripts/build_site.js | 123 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 110 insertions(+), 13 deletions(-) diff --git a/scripts/build_site.js b/scripts/build_site.js index 6b1eae8..3cbc4c9 100644 --- a/scripts/build_site.js +++ b/scripts/build_site.js @@ -203,6 +203,20 @@ h2, h3, h4, h5, h6 { transform: translateX(-5px); } +@media (max-width: 768px) { + .container { + padding: 1rem; + } + + .detail-content { + padding: 1.5rem; + } + + h1 { + font-size: 2rem; + } +} + .install-block { background: #0d0d0d; padding: 1rem; @@ -316,21 +330,31 @@ function renderPage(title, content, isIndex = false, extra = {}) { ` : ''} ${isIndex ? `

Agent Skills

-

by Rody Davis

-
- View on GitHub +

by Rody Davis

+
+ npx skills add rodydavis/skills +
` : ''} ${!isIndex ? `
${installCmd} - +
${content}
- + ` : ` +
+ ${content} +
+ + `} + - ` : ` -
- ${content} -
- `} `; } +// Generate Sitemap +function generateSitemap(skills) { + const baseUrl = 'https://rodydavis.github.io/skills'; // Ideally derived from env or config + const today = new Date().toISOString().split('T')[0]; + + let xml = ` + + + ${baseUrl}/ + ${today} + daily + 1.0 + `; + + skills.forEach(skill => { + xml += ` + + ${baseUrl}/${skill.path}/ + ${today} + weekly + 0.8 + `; + }); + + xml += ` +`; + return xml; +} + +// Generate RSS Feed +// Escape XML special characters +function escapeXml(unsafe) { + return unsafe.replace(/[<>&'"]/g, function (c) { + switch (c) { + case '<': return '<'; + case '>': return '>'; + case '&': return '&'; + case '\'': return '''; + case '"': return '"'; + } + }); +} + +function generateRSS(skills) { + const baseUrl = 'https://rodydavis.github.io/skills'; + const now = new Date().toUTCString(); + + let xml = ` + + + Agent Skills + ${baseUrl} + A collection of agent skills by Rody Davis. + ${now} + en-us`; + + skills.forEach(skill => { + xml += ` + + ${escapeXml(skill.name)} + ${baseUrl}/${skill.path}/ + ${escapeXml(skill.description)} + ${baseUrl}/${skill.path}/ + ${now} + `; + }); + + xml += ` + +`; + return xml; +} + function build() { console.log('Building site...'); @@ -429,7 +521,12 @@ function build() { const indexHtml = renderPage('Agent Skills', cardsHtml, true); fs.writeFileSync(path.join(outputDir, 'index.html'), indexHtml); - console.log(`Build complete! Generated ${skills.length} skill pages.`); + // 4. Generate Sitemap & RSS + fs.writeFileSync(path.join(outputDir, 'sitemap.xml'), generateSitemap(skills)); + fs.writeFileSync(path.join(outputDir, 'rss.xml'), generateRSS(skills)); + + console.log(`Build complete! Generated ${skills.length} skill pages, sitemap, and RSS feed.`); } build(); +