From 5c3bb597906985fad3f4255719c8e404d17a0579 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:06:25 +0000 Subject: [PATCH 1/3] Initial plan From 50734c8b4dfedfa544aba26c24b09a2bf3a06866 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:10:16 +0000 Subject: [PATCH 2/3] Add RSS feed for blog posts Co-authored-by: garrytrinder <11563347+garrytrinder@users.noreply.github.com> --- package-lock.json | 54 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/layouts/Layout.astro | 1 + src/pages/rss.xml.ts | 22 ++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/pages/rss.xml.ts diff --git a/package-lock.json b/package-lock.json index bfa47cc..2f67908 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "web", "version": "0.0.1", "dependencies": { + "@astrojs/rss": "^4.0.15", "@tailwindcss/vite": "^4.1.18", "astro": "^5.17.2", "tailwindcss": "^4.1.18" @@ -69,6 +70,16 @@ "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, + "node_modules/@astrojs/rss": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.15.tgz", + "integrity": "sha512-uXO/k6AhRkIDXmRoc6xQpoPZrimQNUmS43X4+60yunfuMNHtSRN5e/FiSi7NApcZqmugSMc5+cJi8ovqgO+qIg==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^5.3.3", + "piccolore": "^0.1.3" + } + }, "node_modules/@astrojs/telemetry": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", @@ -3158,6 +3169,37 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/fast-xml-builder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.0.0.tgz", + "integrity": "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.2.tgz", + "integrity": "sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "fast-xml-builder": "^1.0.0", + "strnum": "^2.1.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -5432,6 +5474,18 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/strnum": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", + "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/svgo": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", diff --git a/package.json b/package.json index 26afe25..ddf4113 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "astro": "astro" }, "dependencies": { + "@astrojs/rss": "^4.0.15", "@tailwindcss/vite": "^4.1.18", "astro": "^5.17.2", "tailwindcss": "^4.1.18" diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 57bc128..93615bc 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -21,6 +21,7 @@ const ogImage = image ? new URL(image, Astro.site ?? 'https://devproxy.net').hre {title} | Dev Proxy + diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts new file mode 100644 index 0000000..85023ef --- /dev/null +++ b/src/pages/rss.xml.ts @@ -0,0 +1,22 @@ +import rss from '@astrojs/rss'; +import { getCollection } from 'astro:content'; +import type { APIContext } from 'astro'; + +export async function GET(context: APIContext) { + const posts = (await getCollection('blog')).sort( + (a, b) => b.data.date.valueOf() - a.data.date.valueOf() + ); + + return rss({ + title: 'Dev Proxy Blog', + description: 'Release announcements, how-to guides, and insights from the Dev Proxy team.', + site: context.site?.href ?? 'https://devproxy.net', + items: posts.map((post) => ({ + title: post.data.title, + description: post.data.description, + pubDate: post.data.date, + author: post.data.author, + link: `${import.meta.env.BASE_URL}blog/${post.id.replace(/\.md$/, '')}/`, + })), + }); +} From c2c6e24643c5cb2cefd5f31b9bba8ab097fc583f Mon Sep 17 00:00:00 2001 From: Garry Trinder Date: Wed, 4 Mar 2026 11:26:57 +0000 Subject: [PATCH 3/3] Add RSS feed icon to navigation bar --- src/layouts/Layout.astro | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 93615bc..2d64eb3 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -66,6 +66,11 @@ const ogImage = image ? new URL(image, Astro.site ?? 'https://devproxy.net').hre + + +