-
- {
- blogs.map((blog) => (
-
- - {blog.title} - - )) - } -
diff --git a/package-lock.json b/package-lock.json
index 9842e5e..140e2c8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,6 +5,7 @@
"requires": true,
"packages": {
"": {
+ "name": "20260327_blog_frontend_v2",
"version": "0.0.1",
"dependencies": {
"@astrojs/node": "^10.0.4",
@@ -12,6 +13,7 @@
"@astrojs/rss": "^4.0.18",
"@astrojs/svelte": "^8.0.4",
"@astrojs/vue": "^6.0.1",
+ "@iconify-json/material-symbols": "^1.2.65",
"@iconify-json/mdi": "^1.2.3",
"@markdoc/markdoc": "^0.5.7",
"@traptitech/markdown-it-katex": "^3.6.0",
@@ -1335,6 +1337,15 @@
"url": "https://github.com/sponsors/nzakas"
}
},
+ "node_modules/@iconify-json/material-symbols": {
+ "version": "1.2.65",
+ "resolved": "https://registry.npmjs.org/@iconify-json/material-symbols/-/material-symbols-1.2.65.tgz",
+ "integrity": "sha512-0kGO7z+yuWjn4de2gAz1hrOpDHN1rvnb1Lr3YnkmZr/pJ9bfLSv2bRXQo/nKx6oODXKcoYuFLcLvg2xPxMq5Pg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@iconify/types": "*"
+ }
+ },
"node_modules/@iconify-json/mdi": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.2.3.tgz",
@@ -4021,9 +4032,9 @@
}
},
"node_modules/defu": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.6.tgz",
+ "integrity": "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==",
"license": "MIT"
},
"node_modules/delayed-stream": {
diff --git a/package.json b/package.json
index 01c04a5..3163fc5 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"@astrojs/rss": "^4.0.18",
"@astrojs/svelte": "^8.0.4",
"@astrojs/vue": "^6.0.1",
+ "@iconify-json/material-symbols": "^1.2.65",
"@iconify-json/mdi": "^1.2.3",
"@markdoc/markdoc": "^0.5.7",
"@traptitech/markdown-it-katex": "^3.6.0",
diff --git a/src/assets/blogs-header.webp b/src/assets/blogs-header.webp
new file mode 100644
index 0000000..134cb24
Binary files /dev/null and b/src/assets/blogs-header.webp differ
diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro
new file mode 100644
index 0000000..eac2f96
--- /dev/null
+++ b/src/components/BlogCard.astro
@@ -0,0 +1,145 @@
+---
+import { Image } from 'astro:assets'
+import { Icon } from 'astro-icon/components'
+
+interface Props {
+ link: string
+ title: string
+ featureImage?: string
+ createdAt?: Date
+ updatedAt?: Date
+ author?: {
+ name: string
+ avatar?: string
+ }
+}
+
+const { link, title, featureImage, author, createdAt, updatedAt } = Astro.props
+
+const formatDate = (date: Date) => `${date.getFullYear()} 年 ${date.getMonth() + 1} 月 ${date.getDate()} 日`
+
+---
+
+
+ {
+ featureImage && (
+ {title}
+ {author && }
+ {createdAt &&