From 447006cdcc6aa95e37ba8084f300f4f488656b79 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Thu, 13 Nov 2025 18:53:38 +0100
Subject: [PATCH 01/13] intial blog scaffold
---
src/components/ButtonsBar.astro | 1 +
src/pages/blog.astro | 7 +++++++
2 files changed, 8 insertions(+)
create mode 100644 src/pages/blog.astro
diff --git a/src/components/ButtonsBar.astro b/src/components/ButtonsBar.astro
index 8321919..ae0134e 100644
--- a/src/components/ButtonsBar.astro
+++ b/src/components/ButtonsBar.astro
@@ -4,6 +4,7 @@ import GithubLogo from "../assets/icons/github-logo.svg";
const links = [
{ text: "Downloads", href: "https://download.menix-os.org", newtab: true },
+ { text: "Blog", href: "/blog"},
{ text: "Docs", href: "/docs" },
{
text: "Code",
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
new file mode 100644
index 0000000..17cfab5
--- /dev/null
+++ b/src/pages/blog.astro
@@ -0,0 +1,7 @@
+---
+import Layout from "../layouts/Layout.astro";
+---
+
+
+ Blog!
+
\ No newline at end of file
From 0ec0bab43609fbc7a2082c7a139cb919f75db5a2 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Thu, 13 Nov 2025 19:13:54 +0100
Subject: [PATCH 02/13] test ci (broken stuff)
---
package.json | 2 +-
src/components/ButtonsBar.astro | 2 +-
src/pages/index.astro | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index 423a1c6..e8218a9 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,7 @@
"preview": "astro preview",
"astro": "astro",
"format": "prettier --write .",
- "format:check": "prettier ."
+ "format:check": "prettier --check ."
},
"dependencies": {
"@astrojs/starlight": "^0.36.2",
diff --git a/src/components/ButtonsBar.astro b/src/components/ButtonsBar.astro
index ae0134e..80ddd8e 100644
--- a/src/components/ButtonsBar.astro
+++ b/src/components/ButtonsBar.astro
@@ -7,7 +7,7 @@ const links = [
{ text: "Blog", href: "/blog"},
{ text: "Docs", href: "/docs" },
{
- text: "Code",
+ text: "Code",
href: "https://github.com/menix-os/menix",
logo: GithubLogo,
newtab: true,
diff --git a/src/pages/index.astro b/src/pages/index.astro
index b9a39c8..9160bdf 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -3,6 +3,6 @@ import Frontpage from "../components/Frontpage.astro";
import Layout from "../layouts/Layout.astro";
---
-
+
From d2cbebbd0ab2599a1859d79d929ab539d262ae1d Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Thu, 13 Nov 2025 19:21:39 +0100
Subject: [PATCH 03/13] format
---
src/components/ButtonsBar.astro | 4 ++--
src/pages/blog.astro | 6 +++---
src/pages/index.astro | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/components/ButtonsBar.astro b/src/components/ButtonsBar.astro
index 80ddd8e..7e0d7e5 100644
--- a/src/components/ButtonsBar.astro
+++ b/src/components/ButtonsBar.astro
@@ -4,10 +4,10 @@ import GithubLogo from "../assets/icons/github-logo.svg";
const links = [
{ text: "Downloads", href: "https://download.menix-os.org", newtab: true },
- { text: "Blog", href: "/blog"},
+ { text: "Blog", href: "/blog" },
{ text: "Docs", href: "/docs" },
{
- text: "Code",
+ text: "Code",
href: "https://github.com/menix-os/menix",
logo: GithubLogo,
newtab: true,
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
index 17cfab5..4182fd6 100644
--- a/src/pages/blog.astro
+++ b/src/pages/blog.astro
@@ -2,6 +2,6 @@
import Layout from "../layouts/Layout.astro";
---
-
- Blog!
-
\ No newline at end of file
+
+ Blog!
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 9160bdf..9dc24c1 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -5,4 +5,4 @@ import Layout from "../layouts/Layout.astro";
-
+
From f4c5365c0065e6a7f0636963729cd0fbb8a24a51 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Thu, 13 Nov 2025 19:23:01 +0100
Subject: [PATCH 04/13] fix build error
---
src/pages/index.astro | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 9dc24c1..9b29a52 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -3,6 +3,6 @@ import Frontpage from "../components/Frontpage.astro";
import Layout from "../layouts/Layout.astro";
---
-
+
From 8717755bc3509cb28e9e3cc8194efc060ccb6b4d Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Thu, 13 Nov 2025 19:24:10 +0100
Subject: [PATCH 05/13] fix error
---
src/pages/index.astro | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 9b29a52..b9a39c8 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -5,4 +5,4 @@ import Layout from "../layouts/Layout.astro";
-
+
From dc5683fec7f8900d684f8e9541c5cc06670fdde7 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 01:39:45 +0100
Subject: [PATCH 06/13] collection loading
---
src/components/BlogPostCard.astro | 36 +++++++++++++++++++++++++++++++
src/components/BlogPostList.astro | 20 +++++++++++++++++
src/layouts/BlogPostLayout.astro | 17 +++++++++++++++
src/pages/blog.astro | 13 +++++++++--
src/pages/blog/some-post.md | 34 +++++++++++++++++++++++++++++
src/scripts/blogpost.ts | 24 +++++++++++++++++++++
6 files changed, 142 insertions(+), 2 deletions(-)
create mode 100644 src/components/BlogPostCard.astro
create mode 100644 src/components/BlogPostList.astro
create mode 100644 src/layouts/BlogPostLayout.astro
create mode 100644 src/pages/blog/some-post.md
create mode 100644 src/scripts/blogpost.ts
diff --git a/src/components/BlogPostCard.astro b/src/components/BlogPostCard.astro
new file mode 100644
index 0000000..cbd5f01
--- /dev/null
+++ b/src/components/BlogPostCard.astro
@@ -0,0 +1,36 @@
+---
+import { Image } from "astro:assets";
+import type { BlogPostInfo } from "../scripts/blogpost";
+
+interface Props {
+ post: BlogPostInfo;
+}
+
+const { post } = Astro.props;
+---
+
+
+
+
+ {post.title}
+
+
+
+ {post.author}, {post.date.toLocaleDateString()}
+
+
+ {
+ post.img && (
+

+ )
+ }
+
+
+
diff --git a/src/components/BlogPostList.astro b/src/components/BlogPostList.astro
new file mode 100644
index 0000000..837cbed
--- /dev/null
+++ b/src/components/BlogPostList.astro
@@ -0,0 +1,20 @@
+---
+import { postInfoFromRawPosts, type BlogPostInfo } from "../scripts/blogpost";
+import BlogPostCard from "./BlogPostCard.astro";
+
+const allPosts = Object.values(
+ import.meta.glob("../pages/blog/*.md", { eager: true }),
+);
+
+const allPostInfos = postInfoFromRawPosts(allPosts);
+---
+
+
+ {
+ allPostInfos.map((post) => (
+ -
+
+
+ ))
+ }
+
diff --git a/src/layouts/BlogPostLayout.astro b/src/layouts/BlogPostLayout.astro
new file mode 100644
index 0000000..19f9c24
--- /dev/null
+++ b/src/layouts/BlogPostLayout.astro
@@ -0,0 +1,17 @@
+---
+import Layout from "./Layout.astro";
+
+const { frontmatter } = Astro.props;
+---
+
+
+ {frontmatter.title}
+ Written by {frontmatter.author}
+
+
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
index 4182fd6..50176ec 100644
--- a/src/pages/blog.astro
+++ b/src/pages/blog.astro
@@ -1,7 +1,16 @@
---
import Layout from "../layouts/Layout.astro";
+import BlogPostList from "../components/BlogPostList.astro";
---
-
- Blog!
+
+
+
+ All Menix blog posts
+
+
+
+
diff --git a/src/pages/blog/some-post.md b/src/pages/blog/some-post.md
new file mode 100644
index 0000000..034f07b
--- /dev/null
+++ b/src/pages/blog/some-post.md
@@ -0,0 +1,34 @@
+---
+layout: ../../layouts/BlogPostLayout.astro
+title: "My First Blog Post"
+date: 2022-07-01
+author: "Astro Learner"
+img: "https://docs.astro.build/assets/rose.webp"
+---
+
+## Hello everynyan
+
+How are you? Fine thank you!
+
+1. Do stuff
+1. Do more stuff
+1. lol
+
+- real
+- fake
+- gay
+
+> lol
+> lol
+
+```rs
+let x = 5;
+
+fn fakt(lol: u32) -> u32 {
+ lol * 2
+}
+
+println!("{}", fakt(x));
+```
+
+sgdsgsgsd
diff --git a/src/scripts/blogpost.ts b/src/scripts/blogpost.ts
new file mode 100644
index 0000000..90dd43f
--- /dev/null
+++ b/src/scripts/blogpost.ts
@@ -0,0 +1,24 @@
+export interface BlogPostInfo {
+ title: string;
+ date: Date;
+ author: string;
+ url: string;
+ img?: string;
+}
+
+export function postInfoFromRawPosts(raw: any[]): BlogPostInfo[] {
+ return raw.map((post) => {
+ console.log(post);
+ console.log(post.rawContent);
+ console.log(post.getHeadings);
+ console.log(post.getHeadings());
+ console.log(post.rawContent());
+ return {
+ author: post.frontmatter.author,
+ date: new Date(post.frontmatter.date),
+ title: post.frontmatter.title,
+ img: post.frontmatter.img,
+ url: post.url,
+ };
+ });
+}
From 8b8e49cb23f8194c91d67fa7e8b656ba8c18f79b Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 18:33:00 +0100
Subject: [PATCH 07/13] Blog page, posts on frontpage and rss feed
---
.gitignore | 3 ++
package-lock.json | 57 ++++++++++++++++++++++++++-----
package.json | 1 +
src/assets/icons/rss.svg | 6 ++++
src/components/BlogPostCard.astro | 24 +++++--------
src/components/BlogPostList.astro | 35 ++++++++++++++-----
src/components/Footer.astro | 6 ++++
src/components/Frontpage.astro | 14 ++++++++
src/pages/blog.astro | 22 +++++++++---
src/pages/blog/some-post.md | 34 ------------------
src/pages/rss.xml.js | 14 ++++++++
src/scripts/blogpost.ts | 19 ++++++++---
12 files changed, 159 insertions(+), 76 deletions(-)
create mode 100644 src/assets/icons/rss.svg
delete mode 100644 src/pages/blog/some-post.md
create mode 100644 src/pages/rss.xml.js
diff --git a/.gitignore b/.gitignore
index 016b59e..4eaaf9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@ pnpm-debug.log*
# jetbrains setting folder
.idea/
+
+#local
+local
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 1fafb81..452467a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,7 @@
"name": "menix-website",
"version": "0.0.1",
"dependencies": {
+ "@astrojs/rss": "^4.0.14",
"@astrojs/starlight": "^0.36.2",
"@astrojs/starlight-tailwind": "^4.0.2",
"@tailwindcss/vite": "^4.1.17",
@@ -99,6 +100,16 @@
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
+ "node_modules/@astrojs/rss": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.14.tgz",
+ "integrity": "sha512-KCe1imDcADKOOuO/wtKOMDO/umsBD6DWF+94r5auna1jKl5fmlK9vzf+sjA3EyveXA/FoB3khtQ/u/tQgETmTw==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-xml-parser": "^5.3.0",
+ "piccolore": "^0.1.3"
+ }
+ },
"node_modules/@astrojs/sitemap": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.6.0.tgz",
@@ -115,7 +126,6 @@
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.36.2.tgz",
"integrity": "sha512-QR8NfO7+7DR13kBikhQwAj3IAoptLLNs9DkyKko2M2l3PrqpcpVUnw1JBJ0msGDIwE6tBbua2UeBND48mkh03w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@astrojs/markdown-remark": "^6.3.1",
"@astrojs/mdx": "^4.2.3",
@@ -2122,7 +2132,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2283,7 +2292,6 @@
"resolved": "https://registry.npmjs.org/astro/-/astro-5.15.4.tgz",
"integrity": "sha512-0g/68hLHEJZF2nYUcZM5O0kOnzCsCIf8eA9+0jfBAxp4ycujrIHRgIOdZCFKL9GoTsn8AypWbziypH5aEIF+aA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@astrojs/compiler": "^2.12.2",
"@astrojs/internal-helpers": "0.7.4",
@@ -3085,6 +3093,24 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
+ "node_modules/fast-xml-parser": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.2.tgz",
+ "integrity": "sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -5421,6 +5447,12 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/piccolore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+ "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+ "license": "ISC"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -5458,7 +5490,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -5961,7 +5992,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz",
"integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -6217,6 +6247,18 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
+ "node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/style-to-js": {
"version": "1.1.19",
"resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.19.tgz",
@@ -6249,8 +6291,7 @@
"version": "4.1.17",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz",
"integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/tapable": {
"version": "2.3.0",
@@ -6727,7 +6768,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -6926,7 +6966,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/package.json b/package.json
index e8218a9..9d1038e 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"format:check": "prettier --check ."
},
"dependencies": {
+ "@astrojs/rss": "^4.0.14",
"@astrojs/starlight": "^0.36.2",
"@astrojs/starlight-tailwind": "^4.0.2",
"@tailwindcss/vite": "^4.1.17",
diff --git a/src/assets/icons/rss.svg b/src/assets/icons/rss.svg
new file mode 100644
index 0000000..54d5edb
--- /dev/null
+++ b/src/assets/icons/rss.svg
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/components/BlogPostCard.astro b/src/components/BlogPostCard.astro
index cbd5f01..f738d74 100644
--- a/src/components/BlogPostCard.astro
+++ b/src/components/BlogPostCard.astro
@@ -1,5 +1,4 @@
---
-import { Image } from "astro:assets";
import type { BlogPostInfo } from "../scripts/blogpost";
interface Props {
@@ -7,30 +6,23 @@ interface Props {
}
const { post } = Astro.props;
+
+const contentPreview = post.rawContent.substring(0, 150) + "...";
---
-
+
{post.title}
-
- {post.author}, {post.date.toLocaleDateString()}
+
+ {post.author}, {post.date.toLocaleDateString("de-EN")}
-
- {
- post.img && (
-

- )
- }
+
+ {contentPreview}
diff --git a/src/components/BlogPostList.astro b/src/components/BlogPostList.astro
index 837cbed..7dae680 100644
--- a/src/components/BlogPostList.astro
+++ b/src/components/BlogPostList.astro
@@ -1,18 +1,37 @@
---
-import { postInfoFromRawPosts, type BlogPostInfo } from "../scripts/blogpost";
+import { type BlogPostInfo } from "../scripts/blogpost";
import BlogPostCard from "./BlogPostCard.astro";
-const allPosts = Object.values(
- import.meta.glob("../pages/blog/*.md", { eager: true }),
-);
+interface Props {
+ posts: BlogPostInfo[];
+ maxItems?: number;
+ sort?: "date" | "dateDesc" | "default";
+}
-const allPostInfos = postInfoFromRawPosts(allPosts);
+let { maxItems, sort = "date", posts } = Astro.props;
+
+function sortByDate() {
+ posts.sort(function (a, b) {
+ return new Date(b.date).getTime() - new Date(a.date).getTime();
+ });
+}
+
+if (sort === "date") {
+ sortByDate();
+} else if (sort === "dateDesc") {
+ sortByDate();
+ posts.reverse();
+}
+
+if (maxItems) {
+ posts = posts.slice(0, maxItems);
+}
---
-
+
{
- allPostInfos.map((post) => (
- -
+ posts.map((post) => (
+
-
))
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index a797186..555e6d6 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -4,6 +4,7 @@ import MenixAnimatedLogo from "./reusable/MenixAnimatedLogo.astro";
import Factory from "../assets/icons/factory.svg";
import GhLogo from "../assets/icons/github-logo.svg";
import Download from "../assets/icons/download.svg";
+import RssIcon from "../assets/icons/rss.svg";
const links = [
{
@@ -21,6 +22,11 @@ const links = [
text: "Github org",
href: "https://github.com/menix-os",
},
+ {
+ icon: RssIcon,
+ text: "RSS",
+ href: "https://menix-os.org/rss.xml",
+ },
];
---
diff --git a/src/components/Frontpage.astro b/src/components/Frontpage.astro
index 6c29fa9..5a96141 100644
--- a/src/components/Frontpage.astro
+++ b/src/components/Frontpage.astro
@@ -3,8 +3,12 @@ import { Image } from "astro:assets";
import HeroImage from "../assets/images/menix-in-qemu-cropped.png";
import Button from "./reusable/Button.astro";
import MenixGear from "../assets/logos/menix-gear.svg";
+import BlogPostList from "./BlogPostList.astro";
+import { loadPostInfos } from "../scripts/blogpost";
const gearSize = 350;
+
+const posts = loadPostInfos();
---
@@ -44,6 +48,16 @@ const gearSize = 350;
/>
+
+
+
+
Recent blog posts:
+
+
+
+
+
+
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
index b3b93ee..452295b 100644
--- a/src/pages/blog.astro
+++ b/src/pages/blog.astro
@@ -9,12 +9,12 @@ const posts = loadPostInfos();
-
+
{
posts.length > 0 && (
<>
-
+
Menix blog posts ({posts.length})
diff --git a/src/pages/rss.xml.js b/src/pages/rss.xml.ts
similarity index 70%
rename from src/pages/rss.xml.js
rename to src/pages/rss.xml.ts
index a36e82e..55d7b92 100644
--- a/src/pages/rss.xml.js
+++ b/src/pages/rss.xml.ts
@@ -1,9 +1,6 @@
import rss, { pagesGlobToRssItems } from "@astrojs/rss";
-import { loadRawPosts } from "../scripts/blogpost";
-const posts = loadRawPosts();
-
-export async function GET(context) {
+export async function GET(context: any) {
return rss({
title: "Menix Blog",
description: "Blog posts from the Menix project",
diff --git a/src/scripts/blogpost.ts b/src/scripts/blogpost.ts
index b66ed63..a6e8c3d 100644
--- a/src/scripts/blogpost.ts
+++ b/src/scripts/blogpost.ts
@@ -1,3 +1,5 @@
+import { removeMarkdown } from "./markdown-remoal";
+
export interface BlogPostInfo {
title: string;
date: Date;
@@ -5,12 +7,18 @@ export interface BlogPostInfo {
url: string;
img?: string;
rawContent: string;
+ markdownRemovedContent: string;
+ lastEdited: Date | null;
}
export function postInfoFromRawPosts(raw: any[]): BlogPostInfo[] {
return raw.map((post) => {
const rawContent: string = post.rawContent().trim();
+ const markdownRemovedContent = removeMarkdown(rawContent);
+
+ const lastEdited: string | null = post.frontmatter.lastEdited;
+
return {
author: post.frontmatter.author,
date: new Date(post.frontmatter.date),
@@ -18,6 +26,8 @@ export function postInfoFromRawPosts(raw: any[]): BlogPostInfo[] {
img: post.frontmatter.img,
url: post.url,
rawContent,
+ markdownRemovedContent,
+ lastEdited: lastEdited ? new Date(lastEdited) : null,
};
});
}
diff --git a/src/scripts/markdown-remoal.ts b/src/scripts/markdown-remoal.ts
new file mode 100644
index 0000000..eaaa8b7
--- /dev/null
+++ b/src/scripts/markdown-remoal.ts
@@ -0,0 +1,5 @@
+import removeMd from "remove-markdown";
+
+export function removeMarkdown(markdown: string): string {
+ return removeMd(markdown);
+}
diff --git a/src/styles/custom-tailwind.css b/src/styles/custom-tailwind.css
index df611ba..0822bb0 100644
--- a/src/styles/custom-tailwind.css
+++ b/src/styles/custom-tailwind.css
@@ -1,4 +1,24 @@
@import "tailwindcss";
+@plugin "@tailwindcss/typography";
+
+/* incredibly weird workaround needed because the
+large code blocks were not targetet by
+prose-code, prose-pre or prose-figure.
+This is gpt slop so there is proably a better way to figure this out
+*/
+@layer components {
+ /* Light theme default styling for code blocks */
+ .prose pre {
+ background-color: theme("colors.zinc.100") !important;
+ }
+
+ /* Dark theme override */
+ @media (prefers-color-scheme: dark) {
+ .prose pre {
+ background-color: theme("colors.zinc.900") !important;
+ }
+ }
+}
@font-face {
font-family: rubik-glitch-regular;
@@ -50,7 +70,7 @@
@theme {
--font-glitch: rubik-glitch-regular, sans-serif;
- --font-rubik: rubik, monospace;
+ --font-rubik: rubik, sans-serif, monospace;
--font-scp: source-code-pro, sans-serif;
/* base color from menix logo #FF1A00 */
From 2439104fc8675ccb39704250b9b9560c69a37a28 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 22:13:06 +0100
Subject: [PATCH 10/13] a first blog post
---
src/assets/images/lighthouse-scores.png | Bin 0 -> 18630 bytes
src/pages/blog/a-new-website.md | 22 ++++++++++++++++++++++
2 files changed, 22 insertions(+)
create mode 100644 src/assets/images/lighthouse-scores.png
create mode 100644 src/pages/blog/a-new-website.md
diff --git a/src/assets/images/lighthouse-scores.png b/src/assets/images/lighthouse-scores.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d9c01f6e4196b361f59cf8269317a15955688e6
GIT binary patch
literal 18630
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
literal 0
HcmV?d00001
diff --git a/src/pages/blog/a-new-website.md b/src/pages/blog/a-new-website.md
new file mode 100644
index 0000000..24754b8
--- /dev/null
+++ b/src/pages/blog/a-new-website.md
@@ -0,0 +1,22 @@
+---
+layout: ../../layouts/BlogPostLayout.astro
+title: "A new Website"
+date: 2025-07-01
+lastEdited: null
+author: "PotatoMaaan"
+---
+
+Menix now has a new website! It's made up entirely of static assets and doesn't ship any javascript to the client. It's currently hosted by Github Pages.
+
+## Tech Stack
+
+- The main framework is [Astro](https://astro.build/)
+- [Starlight](https://starlight.astro.build/) for the handbook pages
+- [Tailwind](https://tailwindcss.com/) for styling
+- [Astro's RSS plugin](https://www.npmjs.com/package/@astrojs/rss) to easily set up our [RSS feed](https://menix-os.org/rss.xml).
+
+As one would expect, this allows us to hit great lighthouse scores :D
+
+
+
+You can find the code [on our Github](https://github.com/menix-os/website).
From ff4dc02674131438b8ac46eea893cde51f2f5094 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 22:18:42 +0100
Subject: [PATCH 11/13] spelling
---
src/pages/blog/a-new-website.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/pages/blog/a-new-website.md b/src/pages/blog/a-new-website.md
index 24754b8..47755b4 100644
--- a/src/pages/blog/a-new-website.md
+++ b/src/pages/blog/a-new-website.md
@@ -1,12 +1,12 @@
---
layout: ../../layouts/BlogPostLayout.astro
-title: "A new Website"
+title: "A New Website"
date: 2025-07-01
lastEdited: null
author: "PotatoMaaan"
---
-Menix now has a new website! It's made up entirely of static assets and doesn't ship any javascript to the client. It's currently hosted by Github Pages.
+Menix now has a new website! It's made up entirely of static assets and doesn't ship any JavaScript to the client. It's currently hosted by GitHub Pages.
## Tech Stack
@@ -15,8 +15,8 @@ Menix now has a new website! It's made up entirely of static assets and doesn't
- [Tailwind](https://tailwindcss.com/) for styling
- [Astro's RSS plugin](https://www.npmjs.com/package/@astrojs/rss) to easily set up our [RSS feed](https://menix-os.org/rss.xml).
-As one would expect, this allows us to hit great lighthouse scores :D
+As one would expect, this allows us to hit great Lighthouse scores :D

-You can find the code [on our Github](https://github.com/menix-os/website).
+You can find the code [on our GitHub](https://github.com/menix-os/website).
From f439caa62432f3db5d6c3cb1e80a553321685b14 Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 22:31:12 +0100
Subject: [PATCH 12/13] correct date
---
src/pages/blog/a-new-website.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/pages/blog/a-new-website.md b/src/pages/blog/a-new-website.md
index 47755b4..adaf8c3 100644
--- a/src/pages/blog/a-new-website.md
+++ b/src/pages/blog/a-new-website.md
@@ -1,12 +1,12 @@
---
layout: ../../layouts/BlogPostLayout.astro
-title: "A New Website"
-date: 2025-07-01
+title: "A new Website"
+date: 2025-11-23
lastEdited: null
author: "PotatoMaaan"
---
-Menix now has a new website! It's made up entirely of static assets and doesn't ship any JavaScript to the client. It's currently hosted by GitHub Pages.
+Menix now has a new website! It's made up entirely of static assets and doesn't ship any javascript to the client. It's currently hosted by Github Pages.
## Tech Stack
@@ -15,8 +15,8 @@ Menix now has a new website! It's made up entirely of static assets and doesn't
- [Tailwind](https://tailwindcss.com/) for styling
- [Astro's RSS plugin](https://www.npmjs.com/package/@astrojs/rss) to easily set up our [RSS feed](https://menix-os.org/rss.xml).
-As one would expect, this allows us to hit great Lighthouse scores :D
+As one would expect, this allows us to hit great lighthouse scores :D

-You can find the code [on our GitHub](https://github.com/menix-os/website).
+You can find the code [on our Github](https://github.com/menix-os/website).
From ac4e4432ff829cd633cee384a97ec723b058653d Mon Sep 17 00:00:00 2001
From: PotatoMaaan <60669730+PotatoMaaan@users.noreply.github.com>
Date: Sun, 23 Nov 2025 22:34:58 +0100
Subject: [PATCH 13/13] newline
---
.gitignore | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 4eaaf9d..f563b5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,4 +24,4 @@ pnpm-debug.log*
.idea/
#local
-local
\ No newline at end of file
+local