diff --git a/app/tags/layout.tsx b/app/tags/layout.tsx
new file mode 100644
index 0000000..bc49698
--- /dev/null
+++ b/app/tags/layout.tsx
@@ -0,0 +1,27 @@
+import clsx from 'clsx';
+import { ReactNode } from 'react';
+
+const Layout = ({ children }: { children: ReactNode }) => {
+ return (
+ <>
+
+
+ Tags
+
+ {children}
+
+ >
+ );
+};
+
+export default Layout;
diff --git a/app/tags/page.tsx b/app/tags/page.tsx
new file mode 100644
index 0000000..492dad0
--- /dev/null
+++ b/app/tags/page.tsx
@@ -0,0 +1,60 @@
+import clsx from 'clsx';
+import { postLists } from 'lib/posts';
+import { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'RUA - Tags',
+};
+
+const Page = async () => {
+ const posts = await postLists();
+ // tag ["Rust", "React"] or "Rust"
+ // tag object {"Rust": 1, "React": 1}
+ const tags = posts.reduce<{
+ [key: string]: number;
+ }>((prev, cur) => {
+ if (cur.tags?.length <= 0) {
+ return prev;
+ }
+ if (typeof cur.tags === 'string') {
+ const tag = prev[cur.tags];
+ if (tag) {
+ prev[cur.tags] += 1;
+ } else {
+ prev[cur.tags] = 1;
+ }
+ }
+ if (Array.isArray(cur.tags)) {
+ cur.tags.forEach((tag) => {
+ const tagCount = prev[tag];
+ if (tagCount) {
+ prev[tag] += 1;
+ } else {
+ prev[tag] = 1;
+ }
+ });
+ }
+ return prev;
+ }, {});
+
+ return (
+
+ {Object.entries(tags).map(([tag, count]) => (
+
+ ))}
+
+ );
+};
+
+export default Page;
diff --git a/app/g/[id]/page.tsx b/backup/g/[id]/page.tsx
similarity index 100%
rename from app/g/[id]/page.tsx
rename to backup/g/[id]/page.tsx
diff --git a/app/g/layout.tsx b/backup/g/layout.tsx
similarity index 100%
rename from app/g/layout.tsx
rename to backup/g/layout.tsx
diff --git a/app/g/loading.tsx b/backup/g/loading.tsx
similarity index 100%
rename from app/g/loading.tsx
rename to backup/g/loading.tsx
diff --git a/app/gists/[page]/page.tsx b/backup/gists/[page]/page.tsx
similarity index 100%
rename from app/gists/[page]/page.tsx
rename to backup/gists/[page]/page.tsx
diff --git a/app/gists/layout.tsx b/backup/gists/layout.tsx
similarity index 100%
rename from app/gists/layout.tsx
rename to backup/gists/layout.tsx
diff --git a/app/gists/loading.tsx b/backup/gists/loading.tsx
similarity index 100%
rename from app/gists/loading.tsx
rename to backup/gists/loading.tsx
diff --git a/app/gists/page.tsx b/backup/gists/page.tsx
similarity index 100%
rename from app/gists/page.tsx
rename to backup/gists/page.tsx
diff --git a/components/pages/nav-bar.tsx b/components/pages/nav-bar.tsx
index a669b92..4147cdb 100644
--- a/components/pages/nav-bar.tsx
+++ b/components/pages/nav-bar.tsx
@@ -25,8 +25,8 @@ const txtMenu = [
},
{
id: 3,
- name: 'Gists',
- path: '/gists',
+ name: 'Tags',
+ path: '/tags',
},
{
id: 4,