Skip to content

Commit 77d68b3

Browse files
committed
Feat: 프로젝트 설명 파일 파편화
하나의 projects.json으로 관리하기 어려워 각 프로젝트를 대표하는 폴더 안에 각 각 project.json 을 추가하는 방식으로 변경
1 parent bc5e63e commit 77d68b3

File tree

9 files changed

+877
-372
lines changed

9 files changed

+877
-372
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
"private": true,
55
"scripts": {
66
"dev": "next dev --turbopack",
7-
"build": "next build && touch out/.nojekyll && node scripts/generate-sitemap.js && node scripts/generate-og-image.js && cp public/robots.txt out/ && cp public/og-image.svg out/",
7+
"build": "node scripts/build-projects.js && next build && touch out/.nojekyll && node scripts/generate-sitemap.js && node scripts/generate-og-image.js && cp public/robots.txt out/ && cp public/og-image.svg out/",
88
"start": "next start",
99
"lint": "next lint",
1010
"sync": "scripts/sync-notes.py",
1111
"deploy": "bun run sync && bun run build && gh-pages -d out -b gh-pages",
1212
"post": "bun run sync && git add . && git commit -m 'update post' && git push",
1313
"serve": "bunx serve@latest out",
14-
"generate-sitemap": "node scripts/generate-sitemap.js"
14+
"generate-sitemap": "node scripts/generate-sitemap.js",
15+
"build-projects": "node scripts/build-projects.js"
1516
},
1617
"dependencies": {
1718
"@r4ai/remark-callout": "^0.6.2",

public/projects.json

Lines changed: 390 additions & 370 deletions
Large diffs are not rendered by default.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"projectType": "project",
3+
"id": "ccxt-mcp",
4+
"title": "CCXT MCP Server",
5+
"description": "AI 모델(Claude/GPT)이 100개 이상의 암호화폐 거래소 API와 상호작용할 수 있게 해주는 Model Context Protocol(MCP) 서버입니다. CCXT 라이브러리를 활용하여 암호화폐 거래소에 접근하고 거래할 수 있는 기능을 제공합니다.",
6+
"thumbnail": "./ccxt-mcp-main.png",
7+
"tags": ["Crypto", "MCP", "AI", "NPM"],
8+
"technologies": [
9+
"TypeScript",
10+
"Node.js",
11+
"CCXT",
12+
"Model Context Protocol",
13+
"Zod",
14+
"JSON Schema",
15+
"NPM",
16+
"AI"
17+
],
18+
"githubUrl": "https://github.com/lazy-dinosaur/ccxt-mcp",
19+
"serviceUrl": "https://www.npmjs.com/package/@lazydino/ccxt-mcp",
20+
"featured": true,
21+
"createdAt": "2025-03-29",
22+
"overview": "CCXT MCP Server는 '모델이 MCP를 이용할 수 있게' 하는 동시에 'MCP 자체를 개발하는' 독특한 메타적 프로젝트입니다. 인공지능 활용이 급부상하는 시대적 트렌드에 맞춰, AI 모델이 암호화폐 거래소와 직접 상호작용할 수 있는 브릿지 역할을 하는 서버를 개발했습니다. Claude나 GPT 같은 AI 모델들이 사용자의 간단한 자연어 요청만으로 복잡한 거래소 API를 통해 정보를 조회하고 실제 거래를 실행할 수 있게 해줍니다.",
23+
"features": [
24+
"다양한 시장 정보 조회(거래소 목록, 가격, 주문장 등)",
25+
"실시간 거래 기능(시장가/지정가 주문 생성, 주문 취소 및 상태 조회)",
26+
"계정 자산 조회 및 거래 내역 분석",
27+
"트레이딩 성과 분석(승률, 평균 수익/손실 비율 등)",
28+
"포지션 관리(자본 대비 비율 매매, 레버리지 설정 등)",
29+
"리스크 관리(기술적 지표 기반 손절매, 변동성 기반 손익 관리)",
30+
"Claude Desktop과의 원활한 통합",
31+
"100개 이상의 암호화폐 거래소 지원"
32+
],
33+
"lessons": "이 프로젝트의 가장 큰 의의는 MCP를 사용하면서 MCP 서버 자체를 개발하는 메타적인 경험이었습니다. 최신 AI 트렌드를 따라가기 위해 Aider, Claude Desktop, Cursor 등 다양한 AI 툴을 활용해보며 각 도구의 장단점을 직접 체험할 수 있었습니다. 특히 MCP가 어떻게 통신하는지, 그리고 MCP 서버를 구축하기 위한 기본적인 설정 방법과 구조에 대해 깊이 이해하게 되었습니다. npm을 통한 패키지 배포 과정과 다른 컴퓨터에 설치하여 사용하는 전체 라이프사이클을 경험함으로써 개발자로서의 역량을 한층 더 강화할 수 있었습니다.",
34+
"challenges": [
35+
"Model Context Protocol 이해와 구현: MCP는 비교적 새로운 프로토콜로, 아직 문서화가 제한적이고 사용 사례도 많지 않아 구현 방법을 파악하는 데 어려움이 있었습니다.",
36+
"다양한 AI 도구 학습 곡선: Aider, Claude Desktop, Cursor 등 각기 다른 AI 도구의 사용법과 특성을 이해하고 효과적으로 활용하는 데 시간이 필요했습니다.",
37+
"거래소 API 통합의 복잡성: 100개 이상의 거래소마다 API 구조와 요구사항이 다르고, 이를 일관된 인터페이스로 추상화하는 과정이 복잡했습니다.",
38+
"TypeScript 타입 정의의 어려움: CCXT 라이브러리와 MCP SDK에서 제공하는 다양한 타입을 조화롭게 통합하는 과정이 도전적이었습니다.",
39+
"배포와 사용자 경험 고려: npm 패키지로 배포하고 다른 컴퓨터에서 쉽게 설치하고 사용할 수 있도록 설정과 문서화 작업에 많은 노력이 필요했습니다.",
40+
"AI 모델의 제약 이해: AI 모델이 거래소 API와 상호작용할 때 발생할 수 있는 제약과 한계를 이해하고 이를 고려한 설계가 필요했습니다."
41+
],
42+
"demoType": "images",
43+
"demoImages": [
44+
{
45+
"url": "./ccxt-mcp-createOrderWithSL.mp4",
46+
"description": "Claude와의 통합 데모: Claude 모델이 사용자 요청에 따라 실시간 암호화폐 가격을 조회하고 사용자의 요청에 따라 손절가를 정해 매매에 들어가는것을 보여줍니다.",
47+
"showControls": true
48+
},
49+
{
50+
"url": "./ccxt-mcp-winrate-analyze.mp4",
51+
"description": "Claude와의 통합 데모: Claude 모델이 사용자의 과거 매매를 조화하고 사용자의 매매 패턴을 분석하는 것을 보여줍니다.",
52+
"showControls": true
53+
},
54+
{
55+
"url": "./ccxt-mcp-architecture-diagram.svg",
56+
"description": "아키텍처 다이어그램: 사용자, AI 모델, MCP 서버, 그리고 암호화폐 거래소 간의 상호작용을 시각화한 다이어그램입니다."
57+
},
58+
{
59+
"url": "./ccxt-mcp-npm.png",
60+
"description": "NPM 패키지: @lazydino/ccxt-mcp NPM 패키지 페이지와 설치 통계를 보여주는 화면입니다."
61+
}
62+
],
63+
"futurePlans": [
64+
"더 많은 AI 도구와의 통합 확장",
65+
"다양한 MCP 서버 템플릿 개발",
66+
"거래 전략 자동화 기능 향상",
67+
"커뮤니티 기반 개발 확대"
68+
],
69+
"publishPath": "프로젝트/CCXT-MCP"
70+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{
2+
"projectType": "project",
3+
"id": "imyourbox-website",
4+
"title": "아임유어박스 웹페이지",
5+
"description": "Next.js, TypeScript, Tailwind CSS, Framer Motion, Payload.js, Supabase, Vercel을 활용한 회사 웹페이지입니다. 고객과 직원을 위한 웹사이트로, SMTP와 이메일 템플릿을 활용한 문의 기능과 Payload.js 기반 관리자 시스템이 특징입니다.",
6+
"thumbnail": "./imyourbox-main.mp4",
7+
"thumbnailOptions": {
8+
"playbackRate": 2.5
9+
},
10+
"tags": ["", "풀스택"],
11+
"technologies": [
12+
"Next.js",
13+
"Framer Motion",
14+
"Shadcn UI",
15+
"Tailwind CSS",
16+
"TypeScript",
17+
"Payload.js",
18+
"Supabase",
19+
"nodemailer",
20+
"Naver Map API",
21+
"Kakao OpenChat Link API",
22+
"Vercel"
23+
],
24+
"serviceUrl": "https://imyourbox.com",
25+
"featured": true,
26+
"createdAt": "2025-02-27",
27+
"overview": "1인 외주로 진행한 풀필먼트 회사 웹페이지 프로젝트입니다. Next.js와 다양한 기술을 활용하여 개발하였으며, 회사 관계자가 직접 콘텐츠를 관리할 수 있도록 관리자 기능을 제공합니다.",
28+
"features": [
29+
"Payload.js를 활용한 관리자 페이지 구현",
30+
"데이터 CSV 형식으로 추출하는 기능 구현",
31+
"Zod와 React Hook Form을 활용한 데이터 검증",
32+
"기업 뉴스, 연혁, 지도, 공지사항을 관리할 수 있는 기능",
33+
"고객 문의 제출 및 이메일 전송 자동화",
34+
"Framer Motion을 활용한 Parallax 스크롤 애니메이션",
35+
"Naver 지도 API를 통한 위치 정보 시각화",
36+
"Kakao 오픈채팅 링크 API 연동",
37+
"Supabase를 활용한 데이터 저장 및 관리",
38+
"모든 디바이스를 지원하는 반응형 디자인"
39+
],
40+
"lessons": "이 프로젝트를 통해 Next.js의 App Router와 API 라우팅, Payload.js를 활용한 헤드리스 CMS 구현 방법을 배웠습니다. 또한 SMTP 연동, 이메일 템플릿 작성, 그리고 여러 외부 API와의 통합 경험을 쌓을 수 있었습니다. 혼자 외주를 받아 진행한 프로젝트인 만큼 클라이언트와 소통하며 의견을 조율하는 커뮤니케이션 능력도 크게 향상되었습니다.",
41+
"challenges": [
42+
"디자이너가 존재하지 않아 디자인을 새로 만들어야 했습니다.",
43+
"Payload.js와 Supabase 통합: 외부 데이터베이스(Supabase)와 Payload.js를 연동하여 데이터를 저장하고 관리하는 과정에서 복잡한 관계 설정이 필요했습니다.",
44+
"복잡한 애니메이션 구현: Framer Motion을 사용한 Parallax 스크롤 애니메이션의 성능 최적화가 어려웠으며, 다양한 디바이스에서 일관된 경험을 제공하기 위한 조정이 필요했습니다.",
45+
"네이버 지도 API 커스터마이징: 네이버 지도 API를 활용하여 맞춤형 마커와 팝업 창을 구현하는 과정에서 API 문서 부족으로 인한 어려움이 있었습니다.",
46+
"이메일 템플릿 반응형 설계: 다양한 이메일 클라이언트에서 일관되게 표시되는 반응형 이메일 템플릿을 설계하는 것이 예상보다 복잡했습니다.",
47+
"고객 요구사항 변경 대응: 개발 중간에 추가되는 요구사항을 기존 구조를 최대한 유지하면서 효율적으로 통합하는 설계가 필요했습니다."
48+
],
49+
"demoType": "images",
50+
"demoImages": [
51+
{
52+
"url": "./imyourbox-main.mp4",
53+
"description": "메인 페이지: 서비스의 핵심 내용을 한눈에 볼 수 있는 랜딩 페이지입니다. 애니메이션과 반응형 디자인으로 사용자 경험을 강화했습니다."
54+
},
55+
{
56+
"url": "./imyourbox-parallax-example.mp4",
57+
"description": "Parallax 스크롤 이펙트: Framer Motion을 활용하여 구현한 입체감 있는 스크롤 효과입니다."
58+
},
59+
{
60+
"url": "./imyourbox-admin-collections.png",
61+
"description": "관리자 대시보드: Payload.js를 통해 구현된 관리자 패널입니다. 회사 직원이 콘텐츠를 쉽게 관리할 수 있습니다. 회사 사이트 내의 공지사항 모달, 회사 뉴스, 회사 연혁, 회사의 위치 소개를 추가하고 삭제하며 관리하고 사이트의 콘텐츠를 관리할 수 있습니다. 또한 사이트를 통한 문의 내역을 저장하여 확인하고 수정할 수 있습니다."
62+
},
63+
{
64+
"url": "./imyourbox-csv-example.mp4",
65+
"description": "CSV 추출을 위한 커스텀 버튼: 요구사항에 맞춰 추가한 Payload의 커스텀 컴포넌트로 Payload에 저장된 고객 문의 사항들을 CSV 파일로 추출하는 기능을 구현한 버튼입니다.",
66+
"showControls": true
67+
},
68+
{
69+
"url": "./imyourbox-map-example.mp4",
70+
"description": "위치 정보 페이지: 네이버 지도 API를 활용하여 회사 위치와 근처 주요 시설을 표시한 지도 기능입니다. Payload를 통해 추가되고 수정됩니다."
71+
},
72+
{
73+
"url": "./imyourbox-inquiry-example.mp4",
74+
"description": "문의 기능: nodemailer를 활용하여 문의 내용을 회사 이메일로 전송하는 기능입니다. 전송과 동시에 문의 내용이 Payload API를 활용하여 Supabase에 저장됩니다.",
75+
"playbackRate": 2.5
76+
},
77+
{
78+
"url": "./imyourbox-mail-blurry.png",
79+
"description": "이메일 템플릿: 사이트를 통해 회사로 이메일이 전달되었을 때의 디자인입니다."
80+
}
81+
],
82+
"publishPath": "프로젝트/아임유어박스 웹사이트"
83+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"projectType": "project",
3+
"id": "lazy-trading",
4+
"title": "LazyTrading 크롬 확장프로그램",
5+
"description": "Vite, React, Typescript, Tailwind CSS, ReactQuery, Light Weight Chart를 사용하여 개발한 크롬 확장 프로그램입니다. 자동으로 계산된 손절가와 진입 배율을 활용해 한 번의 클릭으로 안전한 매매를 가능하게 하는 것을 목적으로 합니다.",
6+
"thumbnail": "./lazy-trading.png",
7+
"inDevelopment": false,
8+
"demoType": "images",
9+
"demoImages": [
10+
{
11+
"url": "./lazy-trading.png",
12+
"description": "대시보드 화면: 실시간 가격 정보와 함께 거래 설정을 할 수 있는 메인 인터페이스입니다."
13+
}
14+
],
15+
"tags": ["가상화폐", "", "시각화", "프론트엔드"],
16+
"technologies": [
17+
"React",
18+
"Vite",
19+
"TypeScript",
20+
"Tailwind CSS",
21+
"Shadcn UI",
22+
"Light Weight Chart",
23+
"React Query",
24+
"Crypto 모듈"
25+
],
26+
"serviceUrl": "https://chromewebstore.google.com/detail/lazytrading/cacdlclfkbngdkffeofgniiaikelelai?hl=ko",
27+
"featured": true,
28+
"createdAt": "2023-10-15",
29+
"overview": "가상화폐 거래소 바이낸스 웹사이트에서 사용할 수 있는 크롬 확장 프로그램으로, 안전한 거래를 위한 손절가 및 진입 배율을 자동으로 계산하여 빠르고 효율적인 트레이딩을 도와주는 도구입니다. 이 프로젝트에서는 API 키 보안을 위한 Crypto 모듈의 활용이 큰 특징입니다.",
30+
"features": [
31+
"위험 관리를 위한 자동 손절가 계산 기능",
32+
"다양한 진입 배율 옵션 제공",
33+
"Light Weight Chart를 활용한 실시간 차트 시각화",
34+
"원클릭 주문 기능으로 빠른 거래 실행",
35+
"거래 히스토리 추적 및 분석",
36+
"Crypto 모듈을 활용한 API 키 암호화 및 보안 관리"
37+
],
38+
"lessons": "이 프로젝트를 통해 브라우저 확장 프로그램 개발 방법과 트레이딩 알고리즘 구현, 실시간 데이터 처리 및 시각화에 대한 경험을 쌓았습니다. 또한 사용자 인터페이스를 통한 복잡한 계산의 단순화 및 자동화 구현 방법을 익혔습니다.",
39+
"challenges": [
40+
"브라우저 확장 프로그램 환경 제약: Manifest V3 규칙을 준수하면서 필요한 기능을 구현하는 과정에서 보안 정책으로 인한 제약을 극복해야 했습니다.",
41+
"바이낸스 API 연동: 거래소 API와의 안전한 통신을 위한 인증 및 요청 관리가 복잡했으며, 레이트 리밋 등을 고려한 최적화가 필요했습니다.",
42+
"실시간 차트 최적화: 가벼운 차트 라이브러리를 사용하면서도 복잡한 기술적 지표를 표시하기 위한 성능 최적화가 어려웠습니다.",
43+
"위험 관리 알고리즘 정확성: 다양한 시장 조건에서도 정확한 손절가와 진입 배율을 계산하기 위한 알고리즘 설계와 테스트가 필요했습니다.",
44+
"사용자 설정 관리: 크롬 확장 프로그램의 스토리지 제약 내에서 사용자 설정을 효율적으로 저장하고 관리하는 방법을 구현해야 했습니다."
45+
],
46+
"futurePlans": [
47+
"다양한 손절가 계산 방식 추가",
48+
"차트와 직접 인터랙션하며 손절 및 타겟 설정하는 기능",
49+
"다양한 거래소 지원 확장",
50+
"실시간 알림 및 거래 모니터링 기능",
51+
"실시간 채팅 기능 추가",
52+
"자동화된 거래 전략 구현",
53+
"백엔드 추가로 매매 기록 저장 및 평가 기능",
54+
"백테스팅 도구 추가",
55+
"모바일 앱 버전 개발"
56+
],
57+
"publishPath": "프로젝트/LazyTrading"
58+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
{
2+
"projectType": "project",
3+
"id": "my-blog",
4+
"title": "개인 블로그",
5+
"description": "Next.js, TypeScript, Tailwind CSS를 사용하여 개발한 개인 블로그입니다. 마크다운 기반 콘텐츠 관리와 다크 모드를 지원합니다.",
6+
"thumbnail": "./my-blog.png",
7+
"tags": ["", "풀스택"],
8+
"technologies": [
9+
"Next.js",
10+
"TypeScript",
11+
"Tailwind CSS",
12+
"Framer Motion",
13+
"Shadcn UI",
14+
"EsHangul"
15+
],
16+
"githubUrl": "https://github.com/lazy-dinosaur/lazy-dinosaur.github.io",
17+
"serviceUrl": "https://lazy-dinosaur.github.io/",
18+
"featured": true,
19+
"createdAt": "2025-03-05",
20+
"overview": "마크다운 파일을 기반으로 콘텐츠를 관리하는 개인 블로그 프로젝트입니다. Next.js의 App Router와 TypeScript를 활용해 개발했으며, 저 스스로의 필요에 맞게 자동화했습니다. 이 블로그의 주요 특징은 노트 작성 중 언제든지 Neovim 커맨드를 통해 즉시 블로그에 포스팅할 수 있다는 점입니다.",
21+
"features": [
22+
"Neovim과 Obsidian을 통한 자동화된 마크다운 기반 콘텐츠 관리 시스템",
23+
"명령어를 통한 노트 동기화 기능",
24+
"다크 모드 지원 및 테마 전환 기능",
25+
"반응형 레이아웃으로 모든 디바이스 지원",
26+
"목차 자동 생성 및 스크롤 위치 추적",
27+
"코드 구문 강조 및 복사 기능",
28+
"한글 검색 기능 및 하이라이팅 기능"
29+
],
30+
"lessons": "이 프로젝트를 통해 Next.js의 App Router 구조와 서버 컴포넌트 활용법을 배웠습니다. 또한 마크다운 파일 파싱과 렌더링 최적화, 그리고 애니메이션 처리에 관한 경험을 쌓을 수 있었습니다.",
31+
"challenges": [
32+
"Next.js의 App Router와 Server Components 모델 적응: 기존 Pages Router에서 App Router로 전환하면서 서버 컴포넌트와 클라이언트 컴포넌트의 구분 및 데이터 흐름을 이해하는 데 시간이 소요되었습니다.",
33+
"마크다운 파싱 최적화: 코드 블록, 수식, 이미지 등 다양한 마크다운 확장 기능을 지원하면서도 빠른 렌더링을 위한 최적화 과정이 필요했습니다.",
34+
"다크 모드 구현: 테마 전환 시 깜박임 없는 부드러운 전환을 구현하기 위해 여러 테스트를 거쳐야 했습니다.",
35+
"모바일 반응형 디자인: 사이드바, 목차, 코드 블록 등 복잡한 요소들의 모바일 레이아웃 최적화가 어려웠습니다.",
36+
"Next.js의 특정 훅 사용 제약: Suspense 경계 내에서만 사용 가능한 훅들로 인해 컴포넌트 구조를 재설계해야 했습니다."
37+
],
38+
"demoType": "images",
39+
"demoImages": [
40+
{
41+
"url": "./blog-sync-example.mp4",
42+
"description": "파이썬 스크립트를 통한 노트 동기화: 스크립트를 통해 블로그에 필요한 파일들을 생성하고 자동으로 분류합니다.",
43+
"showControls": true
44+
},
45+
{
46+
"url": "./blog-post-example.mp4",
47+
"description": "Neovim과의 통합: Neovim을 통해 노트를 작성하면서 커맨드를 통해 블로그를 바로 포스팅할 수 있습니다.",
48+
"showControls": true,
49+
"playbackRate": 2.5
50+
},
51+
{
52+
"url": "./blog-search-example.mp4",
53+
"description": "한글 검색기능: 전체 노트의 타이틀, 태그, 본문을 검색하며 한글의 자모음을 분리하여 검색해 부자연스러운 결과를 없앴습니다.",
54+
"showControls": true
55+
},
56+
{
57+
"url": "./blog-toc-example.mp4",
58+
"description": "목차 생성: 마크다운을 읽으면서 목차를 생성하고 스크롤하여 화면에 보이는 문서상의 위치를 하이라이팅하며 클릭 시 해당 위치로 이동합니다."
59+
}
60+
],
61+
"futurePlans": [
62+
"시리즈별/태그별 검색기능 추가",
63+
"댓글 기능 추가",
64+
"옵시디언 스타일의 그래프뷰 구현",
65+
"관련 페이지 추천 기능",
66+
"소셜 미디어 공유 기능 구현",
67+
"성능 최적화 및 lighthouse 점수 개선",
68+
"다국어 지원 기능 추가",
69+
"영상 임베드 처리",
70+
"마크다운 데이터 전처리 과정 개선",
71+
"임베드되는 파일들 버킷으로 관리 및 자동화"
72+
],
73+
"publishPath": "프로젝트/개인 블로그"
74+
}

0 commit comments

Comments
 (0)