diff --git a/public/projects/astroach.png b/public/projects/astroach.png
new file mode 100644
index 0000000..908c700
Binary files /dev/null and b/public/projects/astroach.png differ
diff --git a/public/projects/dice-3d.png b/public/projects/dice-3d.png
new file mode 100644
index 0000000..73ef4ac
Binary files /dev/null and b/public/projects/dice-3d.png differ
diff --git a/public/projects/finn-the-little-collector.png b/public/projects/finn-the-little-collector.png
new file mode 100644
index 0000000..ec386ef
Binary files /dev/null and b/public/projects/finn-the-little-collector.png differ
diff --git a/public/projects/hwanseheedam.png b/public/projects/hwanseheedam.png
new file mode 100644
index 0000000..a181b97
Binary files /dev/null and b/public/projects/hwanseheedam.png differ
diff --git a/public/projects/hyper-focus-time.png b/public/projects/hyper-focus-time.png
new file mode 100644
index 0000000..192eb6d
Binary files /dev/null and b/public/projects/hyper-focus-time.png differ
diff --git a/public/projects/lights-out-shot-down.png b/public/projects/lights-out-shot-down.png
new file mode 100644
index 0000000..a024517
Binary files /dev/null and b/public/projects/lights-out-shot-down.png differ
diff --git a/src/app/components/ProjectCard.tsx b/src/app/components/ProjectCard.tsx
new file mode 100644
index 0000000..3ee88ce
--- /dev/null
+++ b/src/app/components/ProjectCard.tsx
@@ -0,0 +1,55 @@
+import Image from 'next/image';
+import Link from 'next/link';
+import React from 'react';
+import BadgeList from './BadgeList';
+
+export type ProjectCardProps = {
+ title: string;
+ desc: string;
+ image: string;
+ tags: string[];
+ href: string;
+ createdAt: string;
+};
+
+const ProjectCard = ({
+ title,
+ desc,
+ image,
+ tags,
+ href,
+ createdAt,
+}: ProjectCardProps) => {
+ return (
+
+
+
+
+
+
+
+
{title}
+
{desc}
+
+ {tags ? : null}
+
+
+
+
+
+
+ );
+};
+
+export default ProjectCard;
diff --git a/src/app/components/ProjectCardList.tsx b/src/app/components/ProjectCardList.tsx
new file mode 100644
index 0000000..7c4e92f
--- /dev/null
+++ b/src/app/components/ProjectCardList.tsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import ProjectCard, { ProjectCardProps } from './ProjectCard';
+
+type ProjectCardListProps = {
+ projects: ProjectCardProps[];
+};
+
+const ProjectCardList = ({ projects }: ProjectCardListProps) => {
+ if (projects.length === 0) {
+ return No Posts
;
+ }
+
+ return (
+
+ {projects.map((post) => (
+
+ ))}
+
+ );
+};
+
+export default ProjectCardList;
diff --git a/src/app/components/TopBar.tsx b/src/app/components/TopBar.tsx
index 3013011..a06809f 100644
--- a/src/app/components/TopBar.tsx
+++ b/src/app/components/TopBar.tsx
@@ -8,6 +8,10 @@ const PATHS = [
path: '/posts',
label: 'Posts',
},
+ {
+ path: '/projects',
+ label: 'Projects',
+ },
{
path: '/sketchbook',
label: 'Sketchbook',
diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx
index e69de29..faff3d1 100644
--- a/src/app/projects/page.tsx
+++ b/src/app/projects/page.tsx
@@ -0,0 +1,91 @@
+import { Metadata } from 'next';
+import Background from '../components/Background';
+import { ProjectCardProps } from '../components/ProjectCard';
+import ProjectCardList from '../components/ProjectCardList';
+import TopBar from '../components/TopBar';
+
+const PROJECTS: ProjectCardProps[] = [
+ {
+ title: 'LIGHTS OUT, SHOT DOWN',
+ desc: '커스텀 셰이더를 적용한 3D 병 슈팅 게임, itch.io 1BIT 제출작',
+ image: '/projects/lights-out-shot-down.png',
+ tags: ['Game'],
+ createdAt: '2023',
+ href: 'https://shubidumdu.itch.io/lights-out-shot-down',
+ },
+ {
+ title: '환세희담',
+ desc: '1995년도 환세 시리즈 첫 작품인 환세희담을 웹으로 이식',
+ image: '/projects/hwanseheedam.png',
+ tags: ['Game'],
+ createdAt: '2023',
+ href: 'https://shubidumdu.github.io/hwanseheedam/',
+ },
+ {
+ title: 'Dice 3D',
+ desc: '물리엔진을 적용한 3D 주사위',
+ image: '/projects/dice-3d.png',
+ tags: ['Toy'],
+ createdAt: '2023',
+ href: 'https://shubidumdu.github.io/dice-3d/',
+ },
+ {
+ title: 'Finn: the Little Collector',
+ desc: '"월리를 찾아라" 컨셉의 캐주얼 게임, 2022년도 JS13KGames 32위 수상작',
+ image: '/projects/finn-the-little-collector.png',
+ tags: ['Game'],
+ createdAt: '2022',
+ href: 'https://js13kgames.com/games/finn-the-little-collector/index.html',
+ },
+ {
+ title: 'Astroach',
+ desc: '4x4 타일 기반의 액션게임, 2021년도 JS13KGames 제출작',
+ image: '/projects/astroach.png',
+ tags: ['Game'],
+ createdAt: '2021',
+ href: 'https://js13kgames.com/games/astroach/index.html',
+ },
+ {
+ title: '절대집중시간',
+ desc: '반복 집중/휴식 타이머',
+ image: '/projects/hyper-focus-time.png',
+ tags: ['Tool'],
+ createdAt: '2020',
+ href: 'https://shubidumdu.github.io/hyper-focus-time/',
+ },
+];
+
+export const metadata: Metadata = {
+ metadataBase: new URL('https://shubidumdu.github.io/'),
+ title: "Shubidumdu's Projects",
+ description:
+ '기업 아래 진행한 것들을 제외하고, 지금껏 개인적으로 진행한 프로젝트들의 모음입니다.',
+ authors: [
+ {
+ name: 'Shubidumdu',
+ url: 'https://github.com/Shubidumdu',
+ },
+ ],
+ colorScheme: 'light',
+ keywords: ['Shubidumdu', 'Devlog', 'Blog', '개발 블로그', '개발', '블로그'],
+ openGraph: {
+ title: "Shubidumdu's Projects",
+ description:
+ '기업 아래 진행한 것들을 제외하고, 지금껏 개인적으로 진행한 프로젝트들의 모음입니다.',
+ images: './ogImage.png',
+ },
+};
+
+export default function Projects() {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}