feat(ui/ux): add timeline, hero, and NeoFetch components + data/hooks
- Add timeline route helper
- src/app/timeline/route.ts
- simple helper to navigate to #timeline
- Add NeoFetch component (client)
- src/components/NeoFetch.tsx
- Displays avatar iframe, uptime calculation, experience count, WakaTime stats, terminal/ip, locale and colour palette
- Uses custom hooks useIpData and useWakaTimeData, and events data
- Add Top (hero) component (client)
- src/components/Top.tsx
- Full-screen hero with randomized background, parallax on mouse, device orientation & motion handlers, requestPermission trigger on image click
- Includes Sidebar import and optimized Image usage
- Add Timeline UI component (client)
- src/components/timeline.tsx
- Year selector + filtered event list with links and icons
- Handles initial selection and rendering grouped by year
- Add reusable Timeline primitives (client)
- src/components/ui/timeline.tsx
- Timeline context and composable parts: Timeline, TimelineItem, Indicator, Separator, Date, Title, Content, Header
- Orientation support and controlled/uncontrolled API
- Add data & hooks
- src/lib/events.ts
- Seeded events array (education/awards/conference entries) used by timeline and NeoFetch
- src/hooks/use-ip-data.ts
- Fetches terminal/ip info from https://api.imnya.ng/ip
- src/hooks/use-wakatime-data.ts
- Fetches WakaTime summary from https://api.imnya.ng/wakatime
Notes:
- All new components are client-side ("use client")
- Adds device motion/orientation listeners with cleanup
- Provides basic error handling for network hooks
- Improves homepage/UX with interactive hero and timeline data visualization
This commit is contained in:
parent
2e1f6a7ec4
commit
96a43a9a3c
34 changed files with 771 additions and 63 deletions
|
|
@ -1,18 +1,26 @@
|
|||
import NeoFetch from "@/components/NeoFetch";
|
||||
import TimelineComponent from "@/components/timeline";
|
||||
import Top from "@/components/Top";
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main>
|
||||
<div id="top" className="h-screen flex">
|
||||
<div
|
||||
className="absolute top-0 right-0 min-w-[calc(100vw-100px)] min-h-[calc(100vh-56px)] flex flex-col rounded-bl-[160px]"
|
||||
style={{
|
||||
background: "linear-gradient(110deg, #FF8989 21.29%, rgba(85, 0, 255, 0.2) 100%)",
|
||||
}}
|
||||
></div>
|
||||
</div>
|
||||
<div id="about" className="h-screen flex p-4">
|
||||
<h1 className="text-2xl">About</h1>
|
||||
<p>항상 새로운 것을 찾고 삶을 더 간단명료하게 만들고 있는 학생 개발자 남현석입니다.</p>
|
||||
</div>
|
||||
<main className="min-h-screen">
|
||||
<Top />
|
||||
<section id="terminal" className="h-screen">
|
||||
<NeoFetch />
|
||||
<div className="px-12">
|
||||
<h1 className="text-2xl font-bold mb-4 w-full">💕 About</h1>
|
||||
<p>초등학교 시절 운영체제에 흥미를 느껴 컴퓨터를 시작했고, 이후 프로그래밍에 관심을 갖게 되었습니다.</p>
|
||||
<p>초등학교 4학년 때 Python으로 프로그래밍을 시작했으며, 현재는 TypeScript를 주로 사용합니다.</p>
|
||||
<p>최근에는 정보보안 분야 중 웹 해킹에 관심이 많습니다.</p>
|
||||
<br />
|
||||
<p>대표적인 프로젝트들은 아래와 같습니다.</p>
|
||||
<a href="https://www.youtube.com/watch?v=XTdqpdTMZbw&list=PLZeYZotn5_IOJDek6e35NKzUtJm09yxZD">Effect Playing Contest 2025 Broadcast Develop</a><br />
|
||||
<a href="https://github.com/imnyang/today.isangjeong">today.isangjeong</a>
|
||||
</div>
|
||||
|
||||
<TimelineComponent />
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue