diff --git a/.gitignore b/.gitignore
index 130a97d..2b75632 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,7 @@ node_modules
*.log
.env
+
+bun.lock
+yarn.lock
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..21f1438
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Rhen Cloud
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 7f2b586..0000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2012-2023 Scott Chacon and others
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
index ff0f4d7..f8ebd5f 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
## 📂 项目结构
-```
+```plaintext
.
├── app/ # 应用根目录
│ ├── assets/ # 静态资源
@@ -30,18 +30,16 @@
│ │ └── images/ # 图片资源
│ ├── components/ # Vue 组件
│ │ ├── archive/ # 归档相关组件
-│ │ ├── blog/ # 博客相关组件
+│ │ ├── posts/ # 博客相关组件
│ │ ├── category/ # 分类相关组件
│ │ ├── content/ # 内容组件
-│ │ ├── footer/ # 页脚组件
-│ │ ├── logo/ # Logo 组件
│ │ └── main/ # 主要组件
│ ├── config/ # 配置文件
│ ├── data/ # 数据文件
│ ├── layouts/ # 布局组件
│ ├── pages/ # 页面路由
│ │ ├── archive/ # 归档页面
-│ │ ├── blogs/ # 博客列表页面
+│ │ ├── posts/ # 博客列表页面
│ │ ├── categories/ # 分类页面
│ │ ├── tags/ # 标签页面
│ │ └── about.vue # 关于页面
@@ -53,7 +51,7 @@
│ └── router.options.ts # 路由配置
├── content/ # 文章内容
│ ├── about.md # 关于页内容
-│ └── blogs/ # 博客文章目录
+│ └── posts/ # 博客文章目录
├── public/ # 公共资源
├── server/ # 服务端代码
│ └── api/ # API 路由
@@ -163,19 +161,6 @@ const siteConfig = {
}
```
-### 主题配置
-
-修改 `tailwind.config.js` 自定义主题色:
-
-```javascript
-theme: {
- colors: {
- primary: '#bd83f3', // 主题色
- // ...
- }
-}
-```
-
### 评论系统
在 `app/config/index.ts` 配置 Twikoo:
@@ -211,7 +196,7 @@ published: true
### Front Matter 字段说明
| 字段 | 类型 | 说明 |
-|------|------|------|
+| ------ | ------ | ------ |
| `title` | string | 文章标题 |
| `description` | string | 文章描述 |
| `date` | string | 发布日期 (YYYY-MM-DD) |
@@ -238,14 +223,10 @@ published: true
项目内置完整的 SEO 优化:
- ✅ Meta 标签(title, description, keywords)
-- ✅ Open Graph 标签(社交分享)
-- ✅ Twitter Card 标签
- ✅ hreflang 标签(多语言)
- ✅ Canonical 标签
-- ✅ Schema.org 结构化数据
- ✅ Sitemap 自动生成
- ✅ RSS 订阅源
-- ✅ 动态 OG 图片
## 🔧 常用命令
@@ -276,11 +257,11 @@ bun run format:fix # 格式化代码
## 📄 许可证
-MIT License - 详见 [LICENSE.md](LICENSE.md)
+MIT License - 详见 [LICENSE](LICENSE)
## 👤 作者
-**RhenCloud**
+## RhenCloud
- GitHub: [@RhenCloud](https://github.com/RhenCloud)
- Email:
@@ -309,59 +290,3 @@ MIT License - 详见 [LICENSE.md](LICENSE.md)
- ✅ Sitemap 和 RSS 支持
---
-
-**Made with ❤️ by RhenCloud**
-
-- Blog list page with search and pagination
-- About me page for user info
-- Auto generate table of content for blog post
-- Auto generate Sitemap
-- Url preview with Nuxt ogImage
-- Dark and light mode
-- Server Side Rendered(SSR) with Nuxt4
-- RSS feed
-
-## How to Make This Blog Template Yours in 5 Minutes
-
-- Clone this repo or use it as a template
-- Go to `./app/data/index.ts` file & add your personal info
-- Then head over to the `./content/blogs` folder to add new blogs
-- Voilà! You've got a personalized blog site!
-
-## Preview
-
-
-
-
-
-
-
-
- Live Demo
-
-
-
-## Demo
-
-
-
-> Hosted on [Vercel](https://vercel.com/): `npm run build`
-
-## Build Setup
-
-**Requires Node.js 20.19+**
-
-```bash
-# install dependencies
-yarn install
-
-# serve in dev mode, with hot reload at localhost:5173
-yarn run dev
-
-# build for production
-yarn run build
-
-# serve in production mode
-yarn run preview
-
-```
diff --git a/app/assets/images/dark.png b/app/assets/images/dark.png
deleted file mode 100644
index 2fad1c4..0000000
Binary files a/app/assets/images/dark.png and /dev/null differ
diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png
deleted file mode 100644
index 08b8881..0000000
Binary files a/app/assets/images/logo.png and /dev/null differ
diff --git a/app/assets/images/preview1.png b/app/assets/images/preview1.png
deleted file mode 100644
index f71cb07..0000000
Binary files a/app/assets/images/preview1.png and /dev/null differ
diff --git a/app/assets/images/preview2.png b/app/assets/images/preview2.png
deleted file mode 100644
index 1f455bd..0000000
Binary files a/app/assets/images/preview2.png and /dev/null differ
diff --git a/app/assets/images/preview3.png b/app/assets/images/preview3.png
deleted file mode 100644
index 0852cee..0000000
Binary files a/app/assets/images/preview3.png and /dev/null differ
diff --git a/app/assets/images/preview4.png b/app/assets/images/preview4.png
deleted file mode 100644
index 604bbc1..0000000
Binary files a/app/assets/images/preview4.png and /dev/null differ
diff --git a/app/components/archive/card.vue b/app/components/archive/card.vue
index e2e4866..607c9a1 100644
--- a/app/components/archive/card.vue
+++ b/app/components/archive/card.vue
@@ -27,11 +27,11 @@ withDefaults(defineProps(), {
diff --git a/app/components/archive/hero.vue b/app/components/archive/hero.vue
deleted file mode 100644
index 04ab5bb..0000000
--- a/app/components/archive/hero.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
- {{ siteConfig.siteMeta.title }}
-
-
- {{ siteConfig.siteMeta.description }}
-
-
-
-
-
-
-
-
diff --git a/app/components/blog/Header.vue b/app/components/blog/Header.vue
index 05269ff..0594ca4 100644
--- a/app/components/blog/Header.vue
+++ b/app/components/blog/Header.vue
@@ -24,7 +24,7 @@ withDefaults(defineProps(), {
-
+
{{ date }}
diff --git a/app/components/blog/card.vue b/app/components/blog/card.vue
index 53300b7..b12e6ee 100644
--- a/app/components/blog/card.vue
+++ b/app/components/blog/card.vue
@@ -37,7 +37,7 @@ withDefaults(defineProps
(), {
-
+
{{ date }}
@@ -59,7 +59,7 @@ withDefaults(defineProps
(), {
Read More
-
+
diff --git a/app/components/blog/empty.vue b/app/components/blog/empty.vue
index 3cd9779..af4770b 100644
--- a/app/components/blog/empty.vue
+++ b/app/components/blog/empty.vue
@@ -1,19 +1,23 @@
-
+
-
-
+
+
-;
+
+;
diff --git a/app/components/category/card.vue b/app/components/category/card.vue
deleted file mode 100644
index a646ca4..0000000
--- a/app/components/category/card.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/components/category/hero.vue b/app/components/category/hero.vue
deleted file mode 100644
index 413f7e2..0000000
--- a/app/components/category/hero.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
- {{ categoryPage.title }}
-
-
- {{ categoryPage.description }}
-
-
-
-
-
-
-
-
diff --git a/app/components/category/topic.vue b/app/components/category/topic.vue
deleted file mode 100644
index 583a02d..0000000
--- a/app/components/category/topic.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
- #{{ category }}
-
-
-
-
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index 52dc28f..def1b84 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -11,9 +11,15 @@ useHead({
-
-
-
+
diff --git a/app/pages/archive/index.vue b/app/pages/archive/index.vue
index fe31b6a..f8faa76 100644
--- a/app/pages/archive/index.vue
+++ b/app/pages/archive/index.vue
@@ -1,6 +1,16 @@
-
-
-
+
+
+
+
+ 返回分类
+
+
+
+
+
+ {{ category }}
+
+
+ 找到 {{ formattedData.length || 0 }} 篇分类下的文章
+
+
+
queryCollection("content").select("path", "categories").where("published", "=", true).all(),
);
-const allTags = new Map();
+const allCategories = new Map();
data.value?.forEach((blog) => {
const categories: Array = (blog.categories as string[]) || [];
categories.forEach((category) => {
- if (allTags.has(category)) {
- const cnt = allTags.get(category);
- allTags.set(category, cnt + 1);
+ if (allCategories.has(category)) {
+ const cnt = allCategories.get(category);
+ allCategories.set(category, cnt + 1);
} else {
- allTags.set(category, 1);
+ allCategories.set(category, 1);
}
});
});
@@ -22,8 +22,7 @@ useHead({
meta: [
{
name: "description",
- content:
- "Below All the topics are listed on which either I have written a blog or will write a blog in near future.",
+ content: "以下列出了我撰写的文章主题。",
},
],
});
@@ -31,9 +30,42 @@ useHead({
-
+
+
+
+ 返回首页
+
+
+
+
+
+ 分类
+
+
+ 以下列出了我撰写的文章主题。
+
+
-
+
+
+
+
+ #{{ category }}
+
+
+ {{ count }}
+
+
+
diff --git a/app/pages/tags/[tag].vue b/app/pages/tags/[tag].vue
index 6e6a2f9..4ebc101 100644
--- a/app/pages/tags/[tag].vue
+++ b/app/pages/tags/[tag].vue
@@ -57,7 +57,7 @@ useHead({
to="/tags"
class="flex items-center gap-2 text-sm font-bold text-primary hover:underline mb-4">
- Back to all tags
+ 返回标签
@@ -67,7 +67,7 @@ useHead({
#{{ tag }}
- Found {{ formattedData.length || 0 }} posts with this tag
+ 找到 {{ formattedData.length || 0 }} 篇关于此标签的文章
diff --git a/app/pages/tags/index.vue b/app/pages/tags/index.vue
index 86600e7..1b8af3f 100644
--- a/app/pages/tags/index.vue
+++ b/app/pages/tags/index.vue
@@ -24,7 +24,7 @@ useHead({
meta: [
{
name: "description",
- content: "浏览所有标签,浏览我写过的文章的标签。",
+ content: "浏览所有我写过的文章的标签。",
},
],
});
@@ -38,10 +38,10 @@ useHead({
- All Tags
+ 标签
- Browse through all the topics and technologies I've written about.
+ 浏览所有我写过的文章的标签。
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
deleted file mode 100644
index be73302..0000000
Binary files a/public/android-chrome-192x192.png and /dev/null differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
deleted file mode 100644
index c7d1832..0000000
Binary files a/public/android-chrome-512x512.png and /dev/null differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
deleted file mode 100644
index e03e723..0000000
Binary files a/public/apple-touch-icon.png and /dev/null differ
diff --git a/public/blogs-img/blog.jpg b/public/blogs-img/blog.jpg
deleted file mode 100644
index 61af666..0000000
Binary files a/public/blogs-img/blog.jpg and /dev/null differ
diff --git a/public/blogs-img/blog1.jpg b/public/blogs-img/blog1.jpg
deleted file mode 100644
index 89da151..0000000
Binary files a/public/blogs-img/blog1.jpg and /dev/null differ
diff --git a/public/blogs-img/blog2.jpg b/public/blogs-img/blog2.jpg
deleted file mode 100644
index d240c87..0000000
Binary files a/public/blogs-img/blog2.jpg and /dev/null differ
diff --git a/public/blogs-img/blog3.jpg b/public/blogs-img/blog3.jpg
deleted file mode 100644
index 5abe7e6..0000000
Binary files a/public/blogs-img/blog3.jpg and /dev/null differ
diff --git a/public/blogs-img/blog4.jpg b/public/blogs-img/blog4.jpg
deleted file mode 100644
index a423b95..0000000
Binary files a/public/blogs-img/blog4.jpg and /dev/null differ
diff --git a/public/blogs-img/blog5.jpg b/public/blogs-img/blog5.jpg
deleted file mode 100644
index ecc770d..0000000
Binary files a/public/blogs-img/blog5.jpg and /dev/null differ
diff --git a/public/blogs-img/blog6.jpg b/public/blogs-img/blog6.jpg
deleted file mode 100644
index c3c38ea..0000000
Binary files a/public/blogs-img/blog6.jpg and /dev/null differ
diff --git a/public/blogs-img/blog7.png b/public/blogs-img/blog7.png
deleted file mode 100644
index 48405c7..0000000
Binary files a/public/blogs-img/blog7.png and /dev/null differ
diff --git a/public/blogs-img/blog8.png b/public/blogs-img/blog8.png
deleted file mode 100644
index d578d91..0000000
Binary files a/public/blogs-img/blog8.png and /dev/null differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
deleted file mode 100644
index f6ed938..0000000
Binary files a/public/favicon-16x16.png and /dev/null differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
deleted file mode 100644
index f13b630..0000000
Binary files a/public/favicon-32x32.png and /dev/null differ
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index ae472f4..0000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/not-found.jpg b/public/not-found.jpg
deleted file mode 100644
index d774d9f..0000000
Binary files a/public/not-found.jpg and /dev/null differ
diff --git a/public/riyad.jpg b/public/riyad.jpg
deleted file mode 100644
index 26d9847..0000000
Binary files a/public/riyad.jpg and /dev/null differ