diff --git a/src/app/page.tsx b/src/app/page.tsx index ff2f234..22995e9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,6 +3,7 @@ import { useState, useEffect } from "react"; import Image from "@/profile.avif"; import Timeline from "@/components/TimeLine"; import Contact from "@/components/Contact"; +import Projects from "@/components/Projects"; export function Page() { const [age, setAge] = useState(0); @@ -104,6 +105,11 @@ export function Page() {
+ + +
+ +
diff --git a/src/components/Projects.tsx b/src/components/Projects.tsx new file mode 100644 index 0000000..0c0adb0 --- /dev/null +++ b/src/components/Projects.tsx @@ -0,0 +1,40 @@ +import ProjectsComponents from "./ProjectsComponents"; + +const projects = [ + { + name: "team-neko/two_hearts", + url: "https://chromewebstore.google.com/detail/fhbjjhpphmigcniggnhgoepaodgoobdk?utm_source=item-share-cb", + description: "Two Hearts는 Chrome 확장 프로그램으로, 새탭을 더 간단명료하게 보여줍니다.", + techStack: ["Bun", "Chrome", "TypeScript", "React"] + }, + { + name: "imnyang/today.isangjeong", + url: "https://github.com/imnyang/today.isangjeong", + description: "친구들과 간단하게 학교의 급식을 공유하기 위해 고안한 프로젝트입니다.\n원래 Python으로 작성되었지만 현재는 TypeScript로 재작성되었습니다.", + techStack: ["Bun", "TypeScript", "Instagram"] + }, + { + name: "team-neko/dynamic-kawaii", + url: "https://github.com/team-neko/dynamic-kawaii", + description: "Dynamic Kawaii는 Visual Studio Code의 몇 안되는 핑크색 다크모드입니다.", + techStack: ["VSCode", "json"] + }, + { + name: "imnyang/tsh", + url: "https://github.com/imnyang/tsh", + description: "tsh는 Rust로 작성된 CLI Trash Bin입니다.", + techStack: ["Rust", "trash"] + } +]; + +export default function Projects() { + return ( +
+
+ {projects.map((project, index) => ( + + ))} +
+
+ ) +} diff --git a/src/components/ProjectsComponents.tsx b/src/components/ProjectsComponents.tsx new file mode 100644 index 0000000..8204d30 --- /dev/null +++ b/src/components/ProjectsComponents.tsx @@ -0,0 +1,38 @@ +type Project = { + name: string; + url: string; + description: string; + techStack: string[]; +}; + +export default function ProjectsComponents({ project }: { project: Project }) { + return ( +
+
+

+ + {project.name} + +

+

+ {project.description.split('\n').map((line, idx) => ( + + {line} +
+
+ ))} +

+
+ {project.techStack.map((tech, idx) => ( + + {tech} + + ))} +
+
+
+ ); +} \ No newline at end of file diff --git a/src/index.css b/src/index.css index 357354d..dffe22c 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,4 @@ -@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css"); - +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+KR&family=Noto+Color+Emoji&display=swap'); @import "../styles/globals.css"; @layer base { @@ -18,7 +17,7 @@ } * { - font-family: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; + font-family: 'IBM Plex Sans KR', sans-serif; } .font-ntype { diff --git a/styles/globals.css b/styles/globals.css index 22c651b..f108d7a 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -16,7 +16,7 @@ --secondary: hsl(340 25% 95%); --secondary-foreground: hsl(240 5.9% 10%); --muted: hsl(340 20% 95%); - --muted-foreground: hsl(340 10% 40%); + --muted-foreground: hsl(340 10% 60%); --accent: hsl(340 25% 94%); --accent-foreground: hsl(240 5.9% 10%); --destructive: hsl(0 84.2% 60.2%); @@ -53,7 +53,7 @@ --secondary: hsl(296, 18%, 15%); --secondary-foreground: hsl(0 0% 98%); --muted: hsl(296, 18%, 15%); - --muted-foreground: hsl(240 5% 64.9%); + --muted-foreground: hsl(240 5% 68%); --accent: hsl(296, 18%, 15%); --accent-foreground: hsl(0 0% 98%); --destructive: hsl(0 62.8% 30.6%);