프로젝트 컴포넌트 추가 및 스타일 수정
This commit is contained in:
parent
ac6d823ae0
commit
980d7a62f5
5 changed files with 88 additions and 5 deletions
|
|
@ -3,6 +3,7 @@ import { useState, useEffect } from "react";
|
||||||
import Image from "@/profile.avif";
|
import Image from "@/profile.avif";
|
||||||
import Timeline from "@/components/TimeLine";
|
import Timeline from "@/components/TimeLine";
|
||||||
import Contact from "@/components/Contact";
|
import Contact from "@/components/Contact";
|
||||||
|
import Projects from "@/components/Projects";
|
||||||
|
|
||||||
export function Page() {
|
export function Page() {
|
||||||
const [age, setAge] = useState<number>(0);
|
const [age, setAge] = useState<number>(0);
|
||||||
|
|
@ -104,6 +105,11 @@ export function Page() {
|
||||||
|
|
||||||
<div className="border-t-1 border-muted rounded-full my-4" />
|
<div className="border-t-1 border-muted rounded-full my-4" />
|
||||||
|
|
||||||
|
<Projects />
|
||||||
|
|
||||||
|
<div className="border-t-1 border-muted rounded-full mt-8" />
|
||||||
|
|
||||||
|
|
||||||
<Timeline />
|
<Timeline />
|
||||||
<div className="border-t-1 border-muted rounded-full mt-8" />
|
<div className="border-t-1 border-muted rounded-full mt-8" />
|
||||||
|
|
||||||
|
|
|
||||||
40
src/components/Projects.tsx
Normal file
40
src/components/Projects.tsx
Normal file
|
|
@ -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 (
|
||||||
|
<div id="projects">
|
||||||
|
<div className="space-y-8">
|
||||||
|
{projects.map((project, index) => (
|
||||||
|
<ProjectsComponents key={index} project={project} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
38
src/components/ProjectsComponents.tsx
Normal file
38
src/components/ProjectsComponents.tsx
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
type Project = {
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
description: string;
|
||||||
|
techStack: string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ProjectsComponents({ project }: { project: Project }) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<h1 className="text-xl mb-2">
|
||||||
|
<a href={project.url} target="_blank" rel="noopener noreferrer">
|
||||||
|
{project.name}
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
<p className="text-sm text-muted-forceground font-light mb-2">
|
||||||
|
{project.description.split('\n').map((line, idx) => (
|
||||||
|
<span key={idx}>
|
||||||
|
{line}
|
||||||
|
<br />
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
{project.techStack.map((tech, idx) => (
|
||||||
|
<span
|
||||||
|
key={idx}
|
||||||
|
className="inline-block bg-accent text-accent-foreground text-xs mr-2 px-2.5 py-0.5 rounded select-none"
|
||||||
|
>
|
||||||
|
{tech}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -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";
|
@import "../styles/globals.css";
|
||||||
|
|
||||||
@layer base {
|
@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 {
|
.font-ntype {
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
--secondary: hsl(340 25% 95%);
|
--secondary: hsl(340 25% 95%);
|
||||||
--secondary-foreground: hsl(240 5.9% 10%);
|
--secondary-foreground: hsl(240 5.9% 10%);
|
||||||
--muted: hsl(340 20% 95%);
|
--muted: hsl(340 20% 95%);
|
||||||
--muted-foreground: hsl(340 10% 40%);
|
--muted-foreground: hsl(340 10% 60%);
|
||||||
--accent: hsl(340 25% 94%);
|
--accent: hsl(340 25% 94%);
|
||||||
--accent-foreground: hsl(240 5.9% 10%);
|
--accent-foreground: hsl(240 5.9% 10%);
|
||||||
--destructive: hsl(0 84.2% 60.2%);
|
--destructive: hsl(0 84.2% 60.2%);
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
--secondary: hsl(296, 18%, 15%);
|
--secondary: hsl(296, 18%, 15%);
|
||||||
--secondary-foreground: hsl(0 0% 98%);
|
--secondary-foreground: hsl(0 0% 98%);
|
||||||
--muted: hsl(296, 18%, 15%);
|
--muted: hsl(296, 18%, 15%);
|
||||||
--muted-foreground: hsl(240 5% 64.9%);
|
--muted-foreground: hsl(240 5% 68%);
|
||||||
--accent: hsl(296, 18%, 15%);
|
--accent: hsl(296, 18%, 15%);
|
||||||
--accent-foreground: hsl(0 0% 98%);
|
--accent-foreground: hsl(0 0% 98%);
|
||||||
--destructive: hsl(0 62.8% 30.6%);
|
--destructive: hsl(0 62.8% 30.6%);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue