+3
-1
astro.config.mjs
+3
-1
astro.config.mjs
+7
bun.lock
+7
bun.lock
···
4
4
"": {
5
5
"name": "skittr-website",
6
6
"dependencies": {
7
+
"@astrojs/rss": "^4.0.14",
7
8
"astro": "^5.16.0",
8
9
},
9
10
},
···
16
17
"@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.9", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.13.0", "smol-toml": "^1.4.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-hX2cLC/KW74Io1zIbn92kI482j9J7LleBLGCVU9EP3BeH5MVrnFawOnqD0t/q6D1Z+ZNeQG2gNKMslCcO36wng=="],
17
18
18
19
"@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="],
20
+
21
+
"@astrojs/rss": ["@astrojs/rss@4.0.14", "", { "dependencies": { "fast-xml-parser": "^5.3.0", "piccolore": "^0.1.3" } }, "sha512-KCe1imDcADKOOuO/wtKOMDO/umsBD6DWF+94r5auna1jKl5fmlK9vzf+sjA3EyveXA/FoB3khtQ/u/tQgETmTw=="],
19
22
20
23
"@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="],
21
24
···
347
350
348
351
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
349
352
353
+
"fast-xml-parser": ["fast-xml-parser@5.3.3", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA=="],
354
+
350
355
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
351
356
352
357
"flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="],
···
616
621
"stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
617
622
618
623
"strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
624
+
625
+
"strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="],
619
626
620
627
"svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="],
621
628
+1
package.json
+1
package.json
+1
src/layouts/Layout.astro
+1
src/layouts/Layout.astro
···
16
16
<link rel="stylesheet" href="../styles.css" />
17
17
<link rel="shortcut-icon" href="../favicon.ico" />
18
18
<link rel="apple-touch-icon" href="../twitter_57.png" />
19
+
<link rel="alternate" type="application/rss+xml" title="Skittr Blog" href="../feed.rss" />
19
20
<meta name="generator" content={Astro.generator} />
20
21
</head>
21
22
<body>
+1
src/layouts/Post.astro
+1
src/layouts/Post.astro
···
16
16
<link rel="stylesheet" href="../../styles.css" />
17
17
<link rel="shortcut-icon" href="../../favicon.ico" />
18
18
<link rel="apple-touch-icon" href="../../twitter_57.png" />
19
+
<link rel="alternate" type="application/rss+xml" title="Skittr Blog" href="../../feed.rss" />
19
20
<meta name="generator" content={Astro.generator} />
20
21
</head>
21
22
<body>
+11
src/pages/feed.rss.js
+11
src/pages/feed.rss.js
···
1
+
import rss, { pagesGlobToRssItems } from "@astrojs/rss";
2
+
3
+
export async function GET(context) {
4
+
return rss({
5
+
title: "Skittr Blog",
6
+
description: "A nostalgic Bluesky client.",
7
+
site: context.site,
8
+
items: await pagesGlobToRssItems(import.meta.glob("./**/*.md")),
9
+
customData: `<language>en-us</language>`,
10
+
});
11
+
}
+5
src/pages/index.astro
+5
src/pages/index.astro
···
1
1
---
2
2
import Layout from "../layouts/Layout.astro";
3
+
const allPosts = Object.values(import.meta.glob('./posts/*.md', { eager: true }));
3
4
---
4
5
5
6
<Layout>
···
10
11
<li><a href="installation">Installation</a></li>
11
12
<li><a href="appview">AppView</a></li>
12
13
<li><a href="skitpic">Skitpic</a></li>
14
+
</ul>
15
+
<h2>Blog</h2>
16
+
<ul>
17
+
{allPosts.map((post: any) => <li><time>{post.frontmatter.date.toString().slice(0,10)}</time> - <a href={post.url}>{post.frontmatter.title}</a></li>)}
13
18
</ul>
14
19
</Layout>
-1
src/pages/posts/hello-world.md
-1
src/pages/posts/hello-world.md