From b663e70c24ef3c99e0722604872853f4f331fa97 Mon Sep 17 00:00:00 2001 From: serros404 Date: Fri, 18 Sep 2026 08:25:39 -0300 Subject: [PATCH 1/2] feat: render /rss.xml as a readable page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Opening /rss.xml in a browser showed raw XML, which reads as a broken page to anyone who is not technical. The feed existed and worked, but nothing about it invited a human to subscribe. Adds an XSL stylesheet, wired through @astrojs/rss's `stylesheet` option, so the same URL renders as a page: what the feed is, the address to paste into a reader, and the reports it carries. Feed readers ignore the stylesheet and keep parsing the XML unchanged. Styling copies the existing design system rather than inventing tokens — #050505 ground, neutral-400 text, neutral-200 headings, #262626 borders, mono, and the 40px tactical grid. Co-Authored-By: Claude Opus 5 --- public/rss-styles.xsl | 134 ++++++++++++++++++++++++++++++++++++++++++ src/pages/rss.xml.ts | 3 + 2 files changed, 137 insertions(+) create mode 100644 public/rss-styles.xsl diff --git a/public/rss-styles.xsl b/public/rss-styles.xsl new file mode 100644 index 0000000..4dafc94 --- /dev/null +++ b/public/rss-styles.xsl @@ -0,0 +1,134 @@ + + + + + + + + + + + + <xsl:value-of select="/rss/channel/title"/> — RSS + + + + +
+ + RSS Feed +

+

+ +
+

What this page is

+

+ This is an RSS feed. Paste the address below into a feed reader + — Feedly, NetNewsWire, Thunderbird, or a Discord/Slack bot + — and every new report lands there automatically. +

+

+ No email, no signup, nothing collected. You subscribe; we never + learn who you are. +

+ + rss.xml + rss.xml + +
+ +

+ reports in this feed +

+ + +
+
+ + + · + + +
+ + +

+
+

+
+
+ + + +
+ + +
+
diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index 4007c0e..e7fc1fa 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -11,6 +11,9 @@ export async function GET(context: APIContext) { title: '0xDelta Research', description: 'Offensive and defensive cybersecurity research — Red Team techniques, malware analysis, threat hunting, and more.', site: context.site!, + // Faz o navegador renderizar /rss.xml como página legível em vez de XML + // cru. Leitores de feed ignoram a folha e leem o XML normalmente. + stylesheet: '/rss-styles.xsl', items: posts.map(post => ({ title: post.data.title, description: post.data.description, From a406a3542df5ff830254a4ddb586cb29d7368726 Mon Sep 17 00:00:00 2001 From: serros404 Date: Fri, 18 Sep 2026 08:37:39 -0300 Subject: [PATCH 2/2] refine: make the whole feed card clickable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The card already lit its border on hover, promising interactivity that only the title delivered. Everything else looked clickable and was not. Uses the stretched-link pattern the project already applies to operator cards and the author card on reports — an absolutely positioned anchor covering the card, with the report title as its aria-label. The title is no longer wrapped in its own anchor, so there is one link per card rather than two pointing at the same place. Co-Authored-By: Claude Opus 5 --- public/rss-styles.xsl | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/public/rss-styles.xsl b/public/rss-styles.xsl index 4dafc94..0c67d81 100644 --- a/public/rss-styles.xsl +++ b/public/rss-styles.xsl @@ -61,11 +61,14 @@ .count{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:#525252;margin:34px 0 14px;} - .item{border:1px solid #262626;background:rgba(255,255,255,.015);padding:20px;margin-bottom:10px;transition:border-color .2s;} + .item{position:relative;border:1px solid #262626;background:rgba(255,255,255,.015);padding:20px;margin-bottom:10px;transition:border-color .2s;} .item:hover{border-color:#525252;} + /* Link esticado: clicar em qualquer area do card abre o relatorio. + Mesmo padrao usado nos cards de operador do site. */ + .item .stretch{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;} .meta{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:#525252;margin-bottom:9px;} .item h3{margin:0 0 9px;font-size:15px;line-height:1.35;color:#e5e5e5;font-weight:700;text-transform:none;letter-spacing:-.01em;} - .item a.t:hover h3{color:#fff;} + .item:hover h3{color:#fff;} .item p{margin:0;color:#737373;font-size:13px;} .foot{margin-top:44px;padding-top:22px;border-top:1px solid #262626;font-size:11px;letter-spacing:.06em;color:#525252;} @@ -105,6 +108,10 @@
+ + + +
@@ -112,10 +119,7 @@
- - -

-
+