diff --git a/public/about/whitehat.avif b/public/about/whitehat.avif new file mode 100644 index 0000000..11256c2 Binary files /dev/null and b/public/about/whitehat.avif differ diff --git a/public/about/whitehat.png b/public/about/whitehat.png deleted file mode 100644 index 3d32581..0000000 Binary files a/public/about/whitehat.png and /dev/null differ diff --git a/public/fonts/corben/Corben-Bold.woff2 b/public/fonts/corben/Corben-Bold.woff2 deleted file mode 100644 index c64b59a..0000000 Binary files a/public/fonts/corben/Corben-Bold.woff2 and /dev/null differ diff --git a/public/fonts/corben/Corben-Regular.woff2 b/public/fonts/corben/Corben-Regular.woff2 deleted file mode 100644 index 8c9a7d3..0000000 Binary files a/public/fonts/corben/Corben-Regular.woff2 and /dev/null differ diff --git a/public/hero-dark.avif b/public/hero-dark.avif new file mode 100644 index 0000000..88e7a6d Binary files /dev/null and b/public/hero-dark.avif differ diff --git a/public/hero-dark.png b/public/hero-dark.png deleted file mode 100644 index 805451e..0000000 Binary files a/public/hero-dark.png and /dev/null differ diff --git a/public/hero-light.avif b/public/hero-light.avif new file mode 100644 index 0000000..4462089 Binary files /dev/null and b/public/hero-light.avif differ diff --git a/public/hero-light.png b/public/hero-light.png deleted file mode 100644 index 1c902d3..0000000 Binary files a/public/hero-light.png and /dev/null differ diff --git a/public/icon/pinkheart.avif b/public/icon/pinkheart.avif new file mode 100644 index 0000000..e3d17b8 Binary files /dev/null and b/public/icon/pinkheart.avif differ diff --git a/public/projects/IMG_0170.avif b/public/projects/IMG_0170.avif new file mode 100644 index 0000000..fb4f45b Binary files /dev/null and b/public/projects/IMG_0170.avif differ diff --git a/public/projects/epc-finale-broadcast.avif b/public/projects/epc-finale-broadcast.avif new file mode 100644 index 0000000..3092921 Binary files /dev/null and b/public/projects/epc-finale-broadcast.avif differ diff --git a/public/projects/tape.svg b/public/projects/tape.svg new file mode 100644 index 0000000..d8f9e81 --- /dev/null +++ b/public/projects/tape.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/side.avif b/public/side.avif new file mode 100644 index 0000000..9906bce Binary files /dev/null and b/public/side.avif differ diff --git a/public/side.png b/public/side.png deleted file mode 100644 index 01b06a1..0000000 Binary files a/public/side.png and /dev/null differ diff --git a/src/components/About.astro b/src/components/About.astro index 99e7e86..7ed6612 100644 --- a/src/components/About.astro +++ b/src/components/About.astro @@ -1,145 +1,143 @@ --- -import ExperienceRow from "@/components/ExperienceRow.astro"; +import { events } from "@/lib/events"; + +const sortedEvents = [...events].sort((a, b) => b.date.localeCompare(a.date)); +const years = [...new Set(sortedEvents.map((event) => event.date.slice(0, 4)))]; +// biome-ignore lint/correctness/noUnusedVariables: Used in the Astro template below. +const eventsByYear = years.map((year) => ({ + year, + events: sortedEvents.filter((event) => event.date.startsWith(year)), +})); + +// biome-ignore lint/correctness/noUnusedVariables: Used in the Astro template below. +const getShortDate = (date: string) => { + const [, month, day] = date.split("-"); + return `${month}.${day}`; +}; + +const currentYear = new Date().getFullYear(); +// biome-ignore lint/correctness/noUnusedVariables: Used in the Astro template below. +const daysUntilYearEnd = Math.ceil( + (new Date(currentYear + 1, 0, 1).getTime() - Date.now()) / + (1000 * 60 * 60 * 24), +); ---
-
+
-

저는 이런 것들을 해왔어요.

+

+ 저는 {years.length}년간 {events.length}개의 + 개성있는 조각들을 모아왔어요. +

-
-

- Information security -

-
- - - 선린인터넷고등학교 정보보안 동아리 - - Layer7 - - - - - 선린인터넷고등학교 정보보호과 - - - - - 화이트햇스쿨 3기 이수 - -
-
- -
-

- Software engineering -

-
- - - ADOFAI.gg - Full Stack, Mod Developer + { + eventsByYear.map(({ year, events: yearEvents }) => ( +
- - -
- - -
- -
-
+

- Effect Playing Contest - 2025 · Finale -

-
- Broadcast Engineer - ARG Creator - Full Stack Developer - Mod Developer -
+ {year} + + + {yearEvents.length}{" "} + {yearEvents.length === 1 + ? "EVENT" + : "EVENTS"} + +
-
-
-
+ +
    + {yearEvents.map((event) => ( +
  1. + +
    +
    + + {event.category} + + {event.link && ( + + )} +
    + {event.link ? ( + + {event.description} + + ) : ( +

    + {event.description} +

    + )} +
    +
  2. + ))} +
+ {year === currentYear.toString() && ( +
+
+ + ✨ | D-{daysUntilYearEnd}동안 + 만들어나갈 멋진 것들을 + 기대해주세요. + +
+
+ )} +
+ )) + }
활동 사진 콜라주 +
+
+
+

+ 무대 뒤에서,
경험을 만들면서... +

+

+ 불과 얼음의 춤(A Dance of Fire and Ice)의 이펙트 제작과 + 플레이를 함께 다루는 대회, Effect Playing Contest. 2025와 + Finale 시즌에 참여하며 방송부터 ARG, 개발까지 함께했어요. +

+
    + { + roles.map((role) => ( +
  • + {role} +
  • + )) + } +
+ +
+
+
+ 012026 · FINALE +
+

+ Effect Playing Contest : Finale +

+

+ 달성이 주관하고 ADOFAI.gg가 공동 주최하는 EPC의 + 마지막 시즌이에요.
방송 화면 개발과 운영을 맡고, + 대회의 퍼즐을 경험하는 ARG를 제작했었어요. +

+ Finale 영상 플레이리스트 +
+ +
+
+ 022025 +
+

+ Effect Playing Contest 2025 +

+

+ 이펙트 제작자와 플레이어가 각자의 실력을 선보이는 + 리듬 게임 대회입니다. 방송 화면의 대부분의 기능을 + 개발하고, 방송 운영을 담당했습니다. +

+ 2025 영상 플레이리스트 +
+
+
+
+ +
+
+
+
+ +
+ + +
+ +
+ 점자로 보이는 단서가 적힌 찢어진 종이와 태블릿, 펜이 놓인 ARG 작업 사진 + + +
+
+
+
+
+ + diff --git a/src/components/Hero.astro b/src/components/Hero.astro index 7e9cf08..bffe7ce 100644 --- a/src/components/Hero.astro +++ b/src/components/Hero.astro @@ -24,10 +24,10 @@ class="font-normal text-foreground/50" >로 만들어나가는 암냥입니다. + 남현석입니다. @@ -45,12 +45,12 @@ + > + @@ -75,13 +76,13 @@ if (root.classList.contains("dark")) { heroThemeSource.media = "all"; - heroThemeSource.srcset = "/hero-dark.png"; + heroThemeSource.srcset = "/hero-dark.avif"; } else if (root.classList.contains("light")) { heroThemeSource.media = "all"; - heroThemeSource.srcset = "/hero-light.png"; + heroThemeSource.srcset = "/hero-light.avif"; } else { heroThemeSource.media = "(prefers-color-scheme: dark)"; - heroThemeSource.srcset = "/hero-dark.png"; + heroThemeSource.srcset = "/hero-dark.avif"; } }; diff --git a/src/lib/events.ts b/src/lib/events.ts index 4db0e03..56d116b 100644 --- a/src/lib/events.ts +++ b/src/lib/events.ts @@ -1,4 +1,17 @@ -export const events = [ +interface Event { + description: string; + category: string; + date: string; + link?: string; +} + +export const events: Event[] = [ + { + description: "제 2회 SSD CTF - 최다 풀이자 SSD상 수상", + category: "Award", + date: "2026-08-30", + link: "https://forge.hspace.io/competitions/6a8b93c72586e8e70978b4df" + }, { description: "33회 해킹캠프 발표 - LLM에 로그인했더니 내 계정이 아니게 됐다???", category: "Presentation", @@ -145,27 +158,5 @@ export const events = [ date: "2022-05-23", description: "2022학년도 석정초SW영재학급 첫 수업", category: "Education", - }, - { - date: "2022-07-26", - description: "제 14회 맑은하늘 맑은웃음 공모전에서 맑은웃음상 수여", - category: "Award", - }, - { - date: "2021-11-14", - description: "Become a ZEPETO Creator 이수", - category: "Education", - }, - { - date: "2021-05-19", - description: - "소프트웨어와 전자신문이 주관한 소프트웨어재단 꿈찾기 캠프 이수", - category: "Education", - }, - { - date: "2018-01-27", - description: - "제4회 맑은하늘 맑은웃음 어린이 문예공모전에서 위닉스상(2위) 수여", - category: "Award", - }, + } ]; diff --git a/src/pages/index.astro b/src/pages/index.astro index 8475458..50b0680 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,5 +1,6 @@ --- import About from "@/components/About.astro"; +import EPCProjects from "@/components/EPCProjects.astro"; import Header from "@/components/Header.astro"; import Hero from "@/components/Hero.astro"; import "@/globals.css"; @@ -33,10 +34,11 @@ import "@/globals.css";
+