+
{headerLinks}
-
- {headerLinks}
-
);
};
diff --git a/src/src/components/header/links.ts b/src/src/components/header/links.ts
index d2e9958..3ee1861 100644
--- a/src/src/components/header/links.ts
+++ b/src/src/components/header/links.ts
@@ -7,8 +7,8 @@ interface HeaderLink {
export const Links: HeaderLink[] = [
{ id: 0, href: "/", label: "Home", color: "text-green" },
- { id: 1, href: "projects", label: "Projects", color: "text-yellow" },
- { id: 2, href: "resume", label: "Resume", color: "text-blue" },
+ { id: 1, href: "about", label: "About", color: "text-yellow" },
+ { id: 2, href: "projects", label: "Projects", color: "text-blue" },
{ id: 3, href: "blog", label: "Blog", color: "text-purple" },
- { id: 4, href: "shop", label: "Shop", color: "text-aqua" }
+ { id: 4, href: "resume", label: "Resume", color: "text-aqua" }
];
diff --git a/src/src/data/blog-posts/corebooting-my-thinkpad.md b/src/src/data/blog-posts/corebooting-my-thinkpad.md
new file mode 100644
index 0000000..9f5ba64
--- /dev/null
+++ b/src/src/data/blog-posts/corebooting-my-thinkpad.md
@@ -0,0 +1,104 @@
+---
+title: "I corebooted my T440p, here's how I did it."
+author: "Timothy Pidashev"
+date: "2024/06/05"
+description: "This is a sample MDX file."
+tags: ["coreboot", "t440p", "dgpu"]
+---
+
+
+```python
+# discord api
+import discord
+from discord.ext import commands
+
+# custom utilities
+from Utilities import log
+
+log = log.Logger("errors")
+
+class Errors(commands.Cog):
+ def __init__(self, client):
+ self.client = client
+
+ @commands.Cog.listener()
+ async def on_ready(self):
+ await log.info("Errors cog loaded.")
+
+ @commands.Cog.listener()
+ async def on_command_error(self, context, error):
+
+ if isinstance(error, commands.CheckFailure):
+ await context.reply(
+ "You are not priveleged enough to use this command.",
+ mention_author=False
+ )
+
+ else:
+ await context.reply(
+ f"**Error**\n```diff\n- {error}```",
+ mention_author=False
+ )
+
+def setup(client):
+ client.add_cog(Errors(client))
+```
+
+# Heading 1
+
+## Heading 2
+
+### Heading 3
+
+#### Heading 4
+
+##### Heading 5
+
+###### Heading 6
+
+*Italic Text*
+
+_Italic Text_
+
+**Bold Text**
+
+__Bold Text__
+
+* Bullet List
+ * Item 1
+ * Item 2
+ * Subitem 1
+ * Subitem 2
+
+1. Numbered List
+ 1. Item 1
+ 2. Item 2
+ - Subitem 1
+ - Subitem 2
+
+[Link Text](https://example.com)
+
+
+
+> Blockquote
+>
+> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+`Inline Code`
+
+| Table Header 1 | Table Header 2 |
+|----------------|----------------|
+| Table Row 1 | Table Row 1 |
+| Table Row 2 | Table Row 2 |
+
+
Superscript Text
+
+
Subscript Text
+
+
Highlighted Text
+
+
Underlined Text
+
+
Strikethrough Text
+
+
Abbreviation
diff --git a/src/src/layouts/blog.astro b/src/src/layouts/blog.astro
new file mode 100644
index 0000000..ad691db
--- /dev/null
+++ b/src/src/layouts/blog.astro
@@ -0,0 +1,32 @@
+---
+const { content } = Astro.props;
+
+import "@/style/globals.css";
+
+import Header from "@/components/header";
+import Footer from "@/components/footer";
+
+export interface Props {
+ title: string;
+ description: string;
+ permalink: string;
+ current?: string;
+}
+const { title, description, permalink, current } = Astro.props;
+---
+
+
+
+
+
+
+
{content.title}
+
+
+
+
+
+
+
+
+
diff --git a/src/src/lib/getPostData.ts b/src/src/lib/getPostData.ts
new file mode 100644
index 0000000..af13a1e
--- /dev/null
+++ b/src/src/lib/getPostData.ts
@@ -0,0 +1,14 @@
+import readingTime from "reading-time";
+
+type Post = {
+ title: string
+ file: string
+ rawContent: () => string
+}
+
+export default function getPostData(post: Post) {
+ return {
+ slug: post.file.split('/').pop().split('.').shift(),
+ readingTime: readingTime(post.rawContent()).text,
+ }
+}
diff --git a/src/src/pages/shop.astro b/src/src/pages/about.astro
similarity index 59%
rename from src/src/pages/shop.astro
rename to src/src/pages/about.astro
index cb14510..3834358 100644
--- a/src/src/pages/shop.astro
+++ b/src/src/pages/about.astro
@@ -4,9 +4,8 @@ import "@/style/globals.css"
import MainLayout from "@/layouts/main.astro";
---
-
+
-
Shop
+ About
-
diff --git a/src/src/pages/blog.astro b/src/src/pages/blog.astro
deleted file mode 100644
index 15ba0d5..0000000
--- a/src/src/pages/blog.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-import "@/style/globals.css"
-
-import MainLayout from "@/layouts/main.astro";
----
-
-
-
-
Blog
-
-
-
diff --git a/src/src/pages/blog/[...slug].astro b/src/src/pages/blog/[...slug].astro
new file mode 100644
index 0000000..3e98e2f
--- /dev/null
+++ b/src/src/pages/blog/[...slug].astro
@@ -0,0 +1,29 @@
+---
+import { CollectionEntry, getCollection } from "astro:content";
+import MainLayout from "@/layouts/main.astro";
+
+export async function getStaticPaths() {
+ const posts = await getCollection("blog");
+ return posts.map((post) => ({
+ params: { slug: post.slug },
+ props: post,
+ }));
+}
+
+type Props = CollectionEntry<"blog">;
+const post = Astro.props;
+const { Content } = await post.render();
+---
+
+
+
+ {post.data.title}
+ by {post.data.author},
+ published {post.data.pubDate.toDateString()},
+ tags: {post.data.tags.join(", ")}
+
+
+
+
+
+
diff --git a/src/src/pages/blog/index.astro b/src/src/pages/blog/index.astro
new file mode 100644
index 0000000..21913de
--- /dev/null
+++ b/src/src/pages/blog/index.astro
@@ -0,0 +1,29 @@
+---
+import { getCollection } from 'astro:content';
+import MainLayout from '@/layouts/main.astro';
+
+const posts = (await getCollection('blog', ({ data }) => {
+ return data.isDraft !== true;
+})).sort(
+ (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
+);
+---
+
+
+
+
+ {
+ posts.map((post) => (
+ -
+ {post.data.title}
+
by {post.data.author},
+ published {post.data.pubDate.toDateString()},
+ tags: {post.data.tags.join(", ")}
+
+ {post.data.description}
+
+ ))
+ }
+
+
+