{
  "$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
  "basics": {
    "name": "김건우",
    "label": "빌더",
    "image": "https://geonwoo.kim/images/profile.jpg",
    "email": "contact@geonwoo.kim",
    "url": "https://geonwoo.kim/ko",
    "summary": "AI 네이티브로 개발하는 빌더 김건우입니다. Claude Code, Codex, Gemini CLI를 엮어 직접 만든 멀티 에이전트 파이프라인을 씁니다. 루쿠쿠에서 프로덕트 엔지니어로 일하고, 디핏의 에이전트 운영 체계를 만듭니다.",
    "profiles": [
      {
        "network": "GitHub",
        "username": "takealook97",
        "url": "https://github.com/takealook97"
      }
    ]
  },
  "work": [
    {
      "name": "디핏",
      "position": "공동창업자 · 빌더",
      "url": "https://deepeet.com",
      "startDate": "2026-07",
      "summary": "사업 운영을 AI 에이전트가 맡는 AI 네이티브 커머스와 그 운영 체계를 만듭니다.",
      "highlights": [
        "사업 운영 전반을 AI 에이전트가 맡는 AI 네이티브 커머스를 설계하고 만들고 있습니다.",
        "주문·발주·가격 조정·상품 등록 준비·재무 대사는 에이전트와 자동화 시스템이 처리합니다.",
        "에이전트마다 역할과 실행 권한을 나눠, 정해진 권한 안에서만 작업하게 했습니다.",
        "자동화를 기반으로 3개월간 누적 주문 700건 이상, 누적 매출 1천만 원 이상을 돌파했습니다."
      ]
    },
    {
      "name": "루쿠쿠",
      "position": "프로덕트 엔지니어",
      "url": "https://www.lukuku.co/",
      "startDate": "2026-04",
      "summary": "고객사 Shopify 스토어 연동, 전사 업무 관리 시스템 오프온, 회사 온톨로지와 사내 운영 에이전트를 만듭니다.",
      "highlights": [
        "Shopify 기반 글로벌 이커머스 스토어의 백엔드를 개발하고, ERP·물류 시스템 연동을 맡고 있습니다.",
        "슬랙·메일·깃허브 등 15곳에 흩어진 회사 정보를 직원과 AI가 한 창구에서 조회하게 했습니다.",
        "미국 법인 B2B 스토어의 ERP 통신을 연동 서버 하나로 모아, ERP 변경에 따른 수정 범위를 줄였습니다.",
        "스포츠 브랜드 국내 자사몰과 ERP 간 월말 판매 대사를 담당하여, 데이터 이격을 개선했습니다."
      ]
    },
    {
      "name": "비즈톡",
      "position": "백엔드 엔지니어",
      "url": "https://www.biztalk.co.kr",
      "startDate": "2025-05",
      "endDate": "2025-10",
      "summary": "메시지 발송 시스템 BGMS의 서버, 배치, 인프라를 개발하고 운영했습니다.",
      "highlights": [
        "카카오 알림톡·브랜드메시지를 보내는 메시지 발송 시스템 BGMS의 서버·배치·인프라를 개발하고 운영했습니다.",
        "기획팀이 매달 손으로 하던 채권 미납 안내를 기획부터 맡아 버튼 하나로 끝나게 했습니다.",
        "IDC 서버에서 손으로 하던 배포는 셸 스크립트 하나로 묶고, QA·운영 환경에는 Jenkins 파이프라인을 만들었습니다.",
        "설정 파일의 민감 정보를 암호화하는 도구를 만들어 전사에 도입했습니다."
      ]
    },
    {
      "name": "CJ올리브네트웍스",
      "position": "개발 인턴",
      "url": "https://www.cjolivenetworks.co.kr",
      "startDate": "2024-06",
      "endDate": "2024-06",
      "summary": "제조 현장 MES에 작업 기록을 손으로 입력하는 업무를 OCR로 줄이는 방안을 기획했습니다.",
      "highlights": [
        "MES 작업 기록의 수기 입력을 OCR로 줄이는 방안을 기획했습니다."
      ]
    }
  ],
  "volunteer": [
    {
      "organization": "Notion",
      "position": "노션 엠버서더",
      "startDate": "2024-07",
      "endDate": "2025-07",
      "highlights": [
        "글로벌 엠버서더 선정",
        "Notion API로 워크플로를 자동화하는 아티클 작성",
        "해외 엠버서더들과 베타 테스트·QA·회의 참여"
      ]
    }
  ],
  "education": [
    {
      "institution": "동국대학교",
      "area": "국제통상학과 학사",
      "startDate": "2017-03",
      "endDate": "2023-02"
    },
    {
      "institution": "김포외국어고등학교",
      "area": "영어과",
      "startDate": "2013-03",
      "endDate": "2016-02"
    },
    {
      "institution": "삼성 청년 SW 아카데미(SSAFY)",
      "area": "Java 전공 과정",
      "startDate": "2023-07",
      "endDate": "2024-06"
    },
    {
      "institution": "코드스쿼드",
      "area": "백엔드 코스",
      "startDate": "2023-01",
      "endDate": "2023-06"
    }
  ],
  "awards": [
    {
      "title": "프로젝트 우수상",
      "date": "2024-02",
      "awarder": "SSAFY",
      "summary": "공통 프로젝트 1위"
    }
  ],
  "certificates": [
    {
      "name": "OPIc IH",
      "issuer": "ACTFL"
    },
    {
      "name": "SQLD",
      "issuer": "한국데이터산업진흥원"
    }
  ],
  "projects": [
    {
      "name": "space-l · 고객사 전용 OS",
      "description": "진행 상황을 문서와 메신저로 따로 전하던 일을 한곳에 모은 고객사 전용 OS입니다. 서버와 배포 체계를 맡았습니다.",
      "highlights": [
        "고객사는 아이디·비밀번호, 사내는 슬랙 로그인으로 들어오는 두 경로",
        "현지 통화 금액과 원화 참고액 함께 표시",
        "일정 타임라인과 자료 공유",
        "사내 CRM과 문의 접수"
      ],
      "keywords": [
        "Next.js",
        "TypeScript",
        "Go",
        "Vercel",
        "AWS EKS",
        "AWS S3"
      ],
      "startDate": "2026-10",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-space-l",
      "roles": [
        "구조 설계",
        "Go API 서버",
        "배포 체계"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "미국 법인 Shopify B2B 스토어 구축 · B2B 백엔드",
      "description": "글로벌 스포츠 브랜드 미국 법인의 Shopify B2B 스토어입니다. B2B 서버와 ERP 연동 서버를 만들었습니다.",
      "highlights": [
        "거래처·사업장, 상품·재고 동기화",
        "거래처별 주문 수량 규칙",
        "서명을 검증한 웹훅 저장, 실패 재시도, 잘못된 메시지 격리"
      ],
      "keywords": [
        "Go",
        "chi",
        "pgx",
        "sqlc",
        "goose",
        "OpenAPI",
        "Shopify B2B"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-commerce-b2b",
      "roles": [
        "B2B 백엔드",
        "ERP 연동 서버",
        "연동 인터페이스 검토"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "루쿠쿠 OS · 회사 온톨로지와 에이전트 운영 체계",
      "description": "직원과 에이전트가 회사 정보를 함께 조회하는 온톨로지와 에이전트 운영 체계입니다.",
      "highlights": [
        "슬랙 메시지 50만 건 이상을 보관하고 검색하는 원문 저장소"
      ],
      "keywords": [
        "Hermes Agent",
        "MCP",
        "PostgreSQL",
        "AWS S3",
        "BGE-M3",
        "launchd"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-os",
      "roles": [
        "온톨로지 설계",
        "지식 그래프",
        "답변 평가",
        "에이전트 운영"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "설치미술 전시를 위한 360도 영상 앱과 AI 영상 생성 서버",
      "description": "설치미술 전시의 360도 영상 현장 앱과 AI 영상 생성 서버입니다. 작품마다 앱을 두고 서버와 대시보드는 함께 씁니다.",
      "highlights": [
        "날다 · 풍선 의자 체험의 Swift 현장 앱",
        "나무블럭 · 이미지와 단어로 약 15초 영상을 만드는 서버 API",
        "비비히어로 · 사진으로 캐릭터 포스터를 만들고, 고른 모션으로 약 10초 영상을 만드는 서버 API",
        "릴스13 · 13초씩 세 번 찍은 영상에서 하나를 골라 AI 영상으로 만드는 서버 작업",
        "360도 풍선 체험 결과 웹 · 관람객이 QR로 영상을 받는 모바일 페이지",
        "운영 대시보드 · 매장·장치·서비스 단위로 주문, 실패, 재시도, AI 사용료 확인"
      ],
      "keywords": [
        "Swift",
        "SwiftUI",
        "Python",
        "FastAPI",
        "PostgreSQL",
        "AWS S3",
        "TypeScript"
      ],
      "startDate": "2026-06",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-ai-experience",
      "roles": [
        "Swift 현장 앱",
        "AI 생성 서버",
        "운영 대시보드",
        "결과 웹"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "스포츠 브랜드 국내 자사몰과 ERP의 판매 대사·연동 운영",
      "description": "스포츠 브랜드 국내 자사몰과 ERP의 월말 판매 대사를 맡고 있습니다. 58일치 기록 약 39만 행을 대조하는 대사 도구를 만들었습니다.",
      "highlights": [
        "주문·출고·반품·교환·쿠폰·포인트 기록을 키 단위로 대조",
        "교환 주문의 정산 누락 유형을 나눈 보정 절차",
        "우대권 가격을 ERP에서 받아 주문 항목별로 할인 계산"
      ],
      "keywords": [
        "Python",
        "Shopify",
        "마이크로서비스"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-commerce-erp",
      "roles": [
        "판매 대사",
        "대사 도구 개발",
        "연동 서버 운영",
        "정산 보정"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "Hermes Agent 기반 사내 운영 에이전트",
      "description": "직원이 슬랙과 텔레그램에서 부르는 Hermes Agent 기반 사내 운영 에이전트입니다. 요청을 역할별 에이전트 9개에 나눠 맡깁니다.",
      "highlights": [
        "업무 조회·등록과 연차·반차 신청을 슬랙 스레드에서 처리",
        "고객 채널의 요청을 업무로 올리는 관찰 에이전트 · 고객 채널에 쓰는 권한은 없음",
        "재직자마다 슬랙 대화로 매일 새로 고치는 개인 에이전트",
        "맥미니 한 대에서 launchd 작업 33개로 상시 실행 · 5분마다 설치본과 소스 대조"
      ],
      "keywords": [
        "Hermes Agent",
        "Python",
        "macOS",
        "launchd",
        "OpenViking",
        "BGE-M3",
        "Slack"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-ops-agent",
      "roles": [
        "에이전트 권한 설계",
        "운영 서버 구성",
        "장애 자동 처리",
        "모델 평가"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "오프온 · 전사 업무 관리 시스템",
      "description": "루쿠쿠의 전사 업무 관리 시스템입니다. 근태부터 CRM까지 슬랙 안에서 다루고, AI 에이전트의 MCP 창구도 맡습니다.",
      "highlights": [
        "슬랙 명령으로 출퇴근·휴식 기록, 정정 요청과 승인",
        "자정을 넘긴 근무, 휴일 제외, 연차 부여와 이월 자동 계산",
        "표·칸반·캘린더·간트로 보는 업무와 담당자별 상태",
        "넘긴 업무의 다음 확인일에 담당자에게 묻는 알림",
        "회의실 예약과 회의 10분 전 알림",
        "슬랙 대화 약 39만 줄을 근거로 찾는 에이전트용 검색"
      ],
      "keywords": [
        "Next.js 16",
        "React 19",
        "TypeScript",
        "Prisma",
        "PostgreSQL",
        "Vercel",
        "MCP",
        "OAuth 2.1"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/ko/portfolio/offon",
      "roles": [
        "설계",
        "풀스택 개발",
        "MCP 서버",
        "운영"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "스포츠 브랜드 국내 자사몰 · 대회 참가자 전용 우대권 주문",
      "description": "스포츠 브랜드 대회 참가자가 우대권으로 할인받아 사는 주문 백엔드입니다. 대회 전 약 일주일 만에 만들었습니다.",
      "highlights": [
        "우대권 가격을 적용할 수 있는 상품만 돌려주는 API",
        "주문 상품의 스타일·색상을 우대권 품목과 대조해 대상이 아니면 막는 주문 검증",
        "스테이징 테스트에서 판매 불가로 보이던 묶음 상품을 Shopify 관리자 상태와 맞춤"
      ],
      "keywords": [
        "Python",
        "Shopify"
      ],
      "startDate": "2026-04",
      "endDate": "2026-09",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-club-match",
      "roles": [
        "우대권 주문 API",
        "주문 검증",
        "중복 결제 방지",
        "우대권 종료 운영"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "브랜드 Shopify 스토어 기능 개발과 연동",
      "description": "브랜드별 Shopify 스토어를 유지보수하며 요청받은 기능과 외부 시스템 연동을 만들었습니다.",
      "highlights": [
        "스포츠 그룹 한국 법인의 브랜드 두 곳 · 쿠폰 만료 알림톡 배치",
        "언더웨어 브랜드 글로벌 스토어 · 체크아웃 확장과 언어별 문구",
        "유럽 수면 브랜드 한국 법인 · 국내 판매처 주문을 Shopify로 모으는 백엔드 설계와 시험 환경",
        "케이스 브랜드 · 쇼핑몰 상품 옵션과 ERP 품목을 짝짓는 조회 API",
        "뷰티 브랜드 · 수량 할인 앱의 앱 스토어 제출 작업과 새 테마 장바구니 대응"
      ],
      "keywords": [
        "Shopify",
        "Shopify Checkout UI extensions",
        "React",
        "카카오 알림톡"
      ],
      "startDate": "2026-04",
      "endDate": "2026-07",
      "url": "https://geonwoo.kim/ko/portfolio/lukuku-clients",
      "roles": [
        "배치",
        "Shopify 앱·확장",
        "연동 API"
      ],
      "entity": "루쿠쿠",
      "type": "application"
    },
    {
      "name": "AWS MSK 3.8 마이그레이션",
      "description": "운영 중인 AWS MSK 3.5를 3.8 신규 클러스터로 옮기고, 토픽 약 160개의 설정을 자동으로 다시 만들었습니다.",
      "highlights": [],
      "keywords": [
        "AWS MSK 3.8",
        "Kafka KRaft",
        "SASL/SCRAM",
        "AWS Secrets Manager",
        "Kafka UI"
      ],
      "startDate": "2025-08",
      "endDate": "2025-09",
      "url": "https://geonwoo.kim/ko/portfolio/msk-migration",
      "roles": [
        "아키텍처 설계",
        "개발·운영 클러스터 KRaft 도입",
        "SASL 인증 추가",
        "토픽·복제본 재구성",
        "발송 테스트",
        "Kafka UI 모니터링"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "BGMS 로그 마스킹 모듈",
      "description": "BGMS의 MSA 서버 14종에 공통으로 붙이는 로그 마스킹 모듈입니다. 로컬 캐시로 로그마다 하던 Redis 조회를 건너뜁니다.",
      "highlights": [
        "민감 고객사인지 먼저 판단하고, 로그 객체를 넘기기 전에 감싸 모듈 안에서 마스킹"
      ],
      "keywords": [
        "Java 8",
        "Spring Boot 2.7",
        "Redis",
        "Gson",
        "JaCoCo"
      ],
      "startDate": "2025-07",
      "endDate": "2025-07",
      "url": "https://geonwoo.kim/ko/portfolio/log-masking",
      "roles": [
        "기획",
        "모듈 설계",
        "Redis 병목 개선",
        "개발·테스트",
        "패치"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "채권 미납 안내 RPA",
      "description": "엑셀 수기 입력과 PDF 생성으로 2일 넘게 걸리던 미납 안내를 10분으로 줄인 RPA입니다.",
      "highlights": [
        "연체 고객사 조회부터 채권 등록·삭제까지 한 페이지에서 관리",
        "미납 고객사별 미납액과 납부기한을 채운 PDF 자동 생성",
        "메일·알림톡 고지를 버튼 하나로 발송"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot 3.5",
        "MyBatis",
        "MySQL",
        "poi-ooxml",
        "LibreOffice",
        "JavaMailSender",
        "Next.js 15",
        "React 19"
      ],
      "startDate": "2025-06",
      "endDate": "2025-07",
      "url": "https://geonwoo.kim/ko/portfolio/bond-rpa",
      "roles": [
        "기획",
        "DB·플로우 설계",
        "PDF 생성 자동화",
        "메일·알림톡 고지 자동화",
        "디자인",
        "클라이언트 페이지"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "BGMS 메시지 발송 시스템 개발과 운영",
      "description": "카카오 알림톡·브랜드메시지를 월 평균 약 4억 건 보내는 BGMS의 기능 개발과 운영을 맡았습니다.",
      "highlights": [
        "카카오톡 브랜드메시지 차단 기능",
        "카카오톡 브랜드메시지 타겟팅(N, I) 재처리 로직",
        "MSK 안의 Realtime 토픽 구축과 관련 로직 리팩터링"
      ],
      "keywords": [
        "Java",
        "Spring Boot",
        "AWS MSK",
        "Redis"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/ko/portfolio/biztalk-bgms",
      "roles": [
        "브랜드메시지 기능 개발",
        "MSK Realtime 토픽 구축",
        "관련 로직 리팩터링",
        "서비스 운영"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "배포 파이프라인 구축 및 사내 GitLab 마이그레이션",
      "description": "MSA QA 서버와 커머스 신사업의 배포 파이프라인 17종을 Jenkins로 만들었습니다. 사내 GitLab 서버도 마이그레이션했습니다.",
      "highlights": [
        "MSA QA 서버 13종, 커머스 신사업 QA·운영 4종(AWS CodeDeploy)으로 나눈 파이프라인",
        "QA 서버의 Nginx Proxy Manager·Portainer 구성",
        "사내 GitLab 서버 마이그레이션, 버전 11에서 18로 업그레이드"
      ],
      "keywords": [
        "Jenkins",
        "AWS CodeDeploy",
        "AWS ELB",
        "Nginx Proxy Manager",
        "Portainer",
        "GitLab"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/ko/portfolio/biztalk-ci-cd",
      "roles": [
        "Jenkins 파이프라인",
        "AWS CodeDeploy 배포",
        "ELB 이중화",
        "QA 서버 구성",
        "GitLab 마이그레이션"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "서버 설정 관리와 배포 자동화 스크립트",
      "description": "BGMS 운영 서버의 설정과 배포를 스크립트로 관리하게 바꿨습니다. 설정 파일의 민감 정보를 암호화하는 도구도 만들었습니다.",
      "highlights": [
        "설정 버전 관리",
        "설정 암복호화 라이브러리와 스크립트",
        "사내 암복호화 API 서버"
      ],
      "keywords": [
        "Shell script",
        "scp"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/ko/portfolio/biztalk-ops-automation",
      "roles": [
        "설정 표준화",
        "패치 자동화",
        "배포 스크립트",
        "설정 암복호화 도구"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "카카오톡 발송·템플릿 통계 수집 서버",
      "description": "알림톡·친구톡·브랜드메시지의 발송·템플릿 통계를 모으는 서버를 혼자 만들었습니다. 월 800만 건 이상의 발송 통계를 다룹니다.",
      "highlights": [],
      "keywords": [
        "Java 17",
        "Spring Boot 3.5",
        "Spring Batch",
        "MyBatis",
        "MySQL"
      ],
      "startDate": "2025-05",
      "endDate": "2025-06",
      "url": "https://geonwoo.kim/ko/portfolio/kakao-stats",
      "roles": [
        "DB·플로우 설계",
        "배치 스케줄러",
        "집계 API",
        "재수집 API",
        "데이터 재가공 스케줄러"
      ],
      "entity": "비즈톡",
      "type": "application"
    },
    {
      "name": "에이전트가 사업을 운영하는 AI 네이티브 커머스",
      "description": "사업 운영을 AI 에이전트가 맡는 AI 네이티브 커머스입니다. 3개월간 누적 주문 700건 이상을 기록했습니다.",
      "highlights": [],
      "keywords": [
        "Go",
        "Next.js",
        "PostgreSQL",
        "Hermes Agent"
      ],
      "startDate": "2026-07",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet",
      "roles": [
        "공동창업자 · 빌더",
        "제품 설계",
        "에이전트 운영 모델",
        "백엔드",
        "운영 도구 개발"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "광고 운영",
      "description": "쿠팡·토스쇼핑 광고를 한 콘솔에서 다룹니다. 토스쇼핑 광고는 성과·변경 이력을 모으고, 광고비와 광고로 들어온 주문을 손익에 반영합니다.",
      "highlights": [
        "토스쇼핑 광고의 일별 성과, 캠페인·광고그룹·광고, 채널 변경 이력",
        "광고로 들어온 주문의 표시와, 그 주문에 적용된 수수료율을 쓴 예상 손익",
        "광고비를 반영한 스토어 손익",
        "변경 작업의 원장과 중복 방지, 결과를 모르는 변경은 다시 보내지 않는 처리",
        "광고 충전을 비용으로 보지 않는 광고비 원장",
        "쿠팡 광고 메뉴와 계정 구조"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-10",
      "endDate": "2026-10",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-advertising",
      "roles": [
        "광고 연동",
        "성과·변경 이력 수집",
        "광고비 원장",
        "광고 유입 주문 표시"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "가격·프로모션·정산",
      "description": "목표 마진으로 판매가를 정하고, 프로모션 고객가와 정산·환불·은행 거래를 나눠 기록해 손익을 맞추는 원장입니다.",
      "highlights": [
        "공급가·채널 수수료·부가세로 목표 마진 판매가를 계산하고, 적용 뒤 공식 조회로 확인하는 가격 반영",
        "일반 판매가와 프로모션 고객가를 나누고, 쿠팡 쿠폰·즉시할인과 토스쇼핑 기간 판매가를 관리하는 가격 정책",
        "등록 판매가를 고정하고 프로모션 고객가의 범위를 정해 두는 가격 고정",
        "쿠팡·토스쇼핑 공식 정산 이력은 보존하고 새 기록만 추가하며, 공식 환불만 주문 손익에서 한 번 차감하는 정산 원장",
        "은행 거래내역 파일과 공급사 예치금을 위치별로 나눈 자금 원장",
        "상품·옵션별 손익과 배분되지 않은 비용을 보여 주는 손익 검산"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-08",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-pricing-settlement",
      "roles": [
        "판매가 정책",
        "프로모션 실행",
        "정산·환불 원장",
        "자금 원장",
        "손익 검산"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "라우팅·판매 상태 제어",
      "description": "판매 옵션마다 발주 경로를 고르고, 경로가 사라지면 판매를 멈췄다가 경로가 돌아오면 다시 여는 제어입니다.",
      "highlights": [
        "자동 선택 위에 고정(PIN)·선호(PREFER)·정지(HOLD)와 후보 제외를 두는 라우팅 정책",
        "품목·품종·중량·입수·등급·크기와 채널 옵션 식별자로 같은 상품을 판정하는 매칭",
        "기간이 끝난 선호 경로는 남은 적격 후보로 넘기는 처리",
        "발주 경로를 잃은 옵션의 판매 자동 중지와 경로 회복 뒤 재개",
        "채널별 재등록 기준과 운영자가 직접 켠 옵션의 재고 유지"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-07",
      "endDate": "2026-09",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-routing",
      "roles": [
        "라우팅 정책 설계",
        "상품 동일성 판정",
        "판매 상태 자동 제어",
        "재고 유지"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "에이전트 운영·조직 기억",
      "description": "총괄 에이전트가 회계·개발·상품 등록·고객 응대·광고 역할에 일을 나누고, 장애와 사업 기록을 재시작 뒤에도 남도록 관리하는 체계입니다.",
      "highlights": [
        "역할마다 할 수 있는 일과 금지 행동, 결과·재시도 규칙을 기계로 읽는 권한 목록",
        "재무 역할이 정해진 조회 스크립트와 읽기 도구만 쓰도록 도구 호출 전에 막는 훅",
        "장애를 원인별 고정 ID로 기록하고, 재시작을 새 장애로 세지 않는 장애 기록과 알림",
        "정전·재부팅·자동 업데이트 뒤 자동으로 기동하고 메신저 연결까지 확인하는 무인 운영",
        "검토된 사업 사실을 담은 Git 문서와, 그 문서에서 다시 만드는 대화 기억·검색 색인",
        "현재를 묻는 질문은 현재 상태 문서를 먼저 찾고, 과거 결정을 현재 사실로 올리지 않는 검색"
      ],
      "keywords": [
        "Hermes Agent",
        "Codex CLI",
        "Python",
        "Shell",
        "Telegram",
        "Discord",
        "launchd",
        "OpenViking",
        "Git"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-agent-ops",
      "roles": [
        "역할·권한 설계",
        "무인 운영과 복구",
        "장애 기록과 알림",
        "조직 기억"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "소싱 데이터",
      "description": "도매 공급사 가격과 검색 수요·경쟁을 모아, 실제로 공급할 수 있는 과일 가운데 다음에 팔 품목을 추천하는 데이터입니다.",
      "highlights": [
        "공급사 공식 엑셀을 먼저 읽고, 실패하면 API·웹 화면, 그다음 직전 성공본 순서로 가격을 남기는 수집",
        "품목·품종·중량·입수·등급으로 정규화하고 원문 상품명과 가격도 보존하는 공급가 원장",
        "네이버 월별 인기 키워드와 일별 트렌드, 키워드 온톨로지를 나눠 보관하는 시장 분석",
        "공급 가능성·수요·경쟁·시기 근거를 함께 보여 주는 소싱 추천",
        "토스쇼핑 인기 상품에서 품목·옵션별 대표 가격을 뽑는 경쟁 가격 관측",
        "사람이 연 쿠팡 검색·상품 화면만 구조화해 저장하는 Chrome 확장",
        "공급사 카카오톡 공지 원문을 보존하고, 반품·교환 제한을 공급사 상품과 발주 후보 판정에 잇는 공지 수집"
      ],
      "keywords": [
        "Python",
        "Playwright",
        "PostgreSQL",
        "MinIO",
        "NumPy",
        "TypeScript",
        "Chrome Extensions"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-sourcing",
      "roles": [
        "공급가 수집",
        "시장·키워드 분석",
        "소싱 추천",
        "브라우저 확장",
        "공급사 공지 수집"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "개발·인프라 운영",
      "description": "저장소 19곳의 변경을 vat로 묶어 바뀐 범위만 검증하고, Proxmox 서버의 배포·백업·복원까지 확인하는 개발·인프라입니다.",
      "highlights": [
        "여러 저장소에 걸친 변경을 참여 커밋·검증·되돌릴 지점과 함께 묶는 기록",
        "저장소 사이 연동 규약을 선언하고 기계로 검사하는 계약",
        "기준 커밋과 현재 파일의 해시, 의존 관계로 검사를 고르고 영향이 불명확하면 막는 검증",
        "코드 검증·푸시·배포·운영 재조회·사업 기록 반영까지 통과해야 끝나는 배포 절차",
        "검증, 이미지 전송, 마이그레이션, 서비스 기동, 실행 중인 커밋 대조로 이어지는 Jenkins 배포",
        "PostgreSQL 덤프와 필요한 객체를 암호화해 Cloudflare R2에 보관하고, 격리된 환경에 복원해 확인하는 백업",
        "SOPS로 암호화해 Git에 두는 자격증명"
      ],
      "keywords": [
        "Git",
        "Python",
        "Shell",
        "Proxmox",
        "Docker",
        "Jenkins",
        "PostgreSQL",
        "MinIO",
        "Cloudflare R2",
        "SOPS",
        "Prometheus",
        "Vercel"
      ],
      "startDate": "2026-07",
      "endDate": "2026-10",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-infra",
      "roles": [
        "저장소 간 연동 규약",
        "영향 기반 검증",
        "배포 절차",
        "서버 구성",
        "백업과 복원"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "운영 콘솔·고객 응대",
      "description": "주문·발주·가격·정산·고객 문의를 41개 업무 화면에서 처리하고, 고객 문자와 클레임을 주문 단위로 잇는 디핏의 내부 운영 웹입니다.",
      "highlights": [
        "메뉴 권한, 관리자 전용 조치, 허용한 경로만 넘기는 서버 중계 계층으로 나눈 3중 권한",
        "여러 사업자를 한 콘솔에서 전환하고, 주문·계정·공급사 실행은 사업자별로 격리",
        "연락처·주문번호를 화면에서 가리는 민감정보 숨김 모드와 좁은 모바일 화면용 배치",
        "직접 운영하는 회선 단말로 고객 문자를 주고받고 주문에 자동으로 잇는 문자 게이트웨이",
        "주문자 정보로 새 주문을 보류하는 블랙리스트",
        "문자·반품·교환·환불을 주문 단위 케이스로 묶고, 개인정보를 가린 입력으로 AI 분류 제안을 받는 클레임 처리"
      ],
      "keywords": [
        "Next.js 16",
        "React 19",
        "TypeScript",
        "Tailwind CSS 4",
        "Vercel",
        "Go",
        "PostgreSQL"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-console",
      "roles": [
        "운영 화면 설계",
        "서버 중계 계층",
        "권한·사업자 경계",
        "고객 문자",
        "클레임 케이스"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "상품 등록",
      "description": "상품 등록 에이전트가 기획 초안과 상세페이지 자산을 만듭니다. 확인을 통과한 상품은 쿠팡·토스쇼핑에 게시하고 공식 조회로 다시 확인합니다.",
      "highlights": [
        "기획 초안·상세페이지 자산·두 채널 게시·공식 조회 확인을 같은 등록 건으로 잇는 상태 흐름",
        "서로 다른 실제 상품 사진 세 장을 근거로 삼고, 맞지 않는 사진은 다른 후보로 바꾸는 기획",
        "자동 등록 전에 옵션마다 발주 경로를 2개 이상 확보하게 한 선행 조건",
        "정해진 절차 우회와 DB·판매채널 직접 쓰기, 공급사 발주를 막은 에이전트 권한",
        "운영자가 고른 사진과 등록 입력을 해시와 함께 보관하는 수동 등록 자료"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "MinIO",
        "Hermes Agent",
        "Node.js",
        "Playwright",
        "JSON Schema"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-listing-pipeline",
      "roles": [
        "상품 등록 에이전트 설계",
        "등록 상태 흐름",
        "상세페이지 생성과 검수",
        "채널 게시와 확인"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "발주 자동화",
      "description": "디핏이 가장 먼저 만든 기능입니다. 쿠팡·토스쇼핑 주문을 도매 공급사 발주와 결제, 송장 등록, 배송완료 확인까지 잇습니다.",
      "highlights": [
        "판매채널 주문을 중복 없이 받아 공통 모델로 저장하는 주문 수집",
        "주문 품목을 공급사 상품에 연결하고, 실제 발주 없이 후보와 비용을 보는 모의 발주",
        "공급사별 엑셀 양식에 맞춘 발주 파일",
        "작업 큐와 중복 발주 방지를 갖춘 무인 발주·결제·송장 회수",
        "판매채널의 공식 배송완료까지 확인하는 흐름",
        "주문·옵션 단위로 자동 발주와 결제를 멈추고 다시 켜는 중지·재개"
      ],
      "keywords": [
        "Go",
        "chi",
        "PostgreSQL",
        "pgx",
        "sqlc",
        "goose",
        "OpenAPI",
        "MinIO",
        "Xvfb"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/deepeet-order-engine",
      "roles": [
        "업무 정의와 도메인 설계",
        "판매채널·공급사 연동",
        "무인 발주 실행과 복구",
        "발주 추적"
      ],
      "entity": "디핏",
      "type": "application"
    },
    {
      "name": "보르테소 · 커피 기록 앱",
      "description": "마신 커피의 맛과 원두를 기록하는 앱입니다. Flutter 앱과 Spring Boot API를 만들었습니다.",
      "highlights": [
        "핫·아이스, 컵 노트, 메모를 남기는 컵 기록",
        "맛 감각 평가와 기록 분석",
        "기록 달력과 연속 기록",
        "Google 로그인"
      ],
      "keywords": [
        "Flutter",
        "Dart",
        "Java 17",
        "Spring Boot 3.5",
        "Spring Security",
        "JPA",
        "MariaDB",
        "Redis",
        "MinIO",
        "Google Cloud Vision",
        "OpenAI API",
        "Docker",
        "Jenkins",
        "Proxmox"
      ],
      "startDate": "2025-10",
      "endDate": "2026-03",
      "url": "https://geonwoo.kim/ko/portfolio/vortesso",
      "roles": [
        "기획",
        "Flutter 앱",
        "Spring Boot API",
        "홈서버 배포",
        "CI/CD",
        "모니터링"
      ],
      "entity": "개인",
      "type": "application"
    },
    {
      "name": "글로티커 · 거시경제 지표 크롬 익스텐션",
      "description": "거시경제 지표를 한곳에서 보는 크롬 익스텐션입니다. 7개국 이상에서 누적 사용자 300명 이상이 썼습니다.",
      "highlights": [
        "지수 실시간 시세: 나스닥, S&P 500, 다우존스, 러셀 2000, 국채 20년, VIX, 공포탐욕 지수",
        "주식 시세: Magnificent 7(애플, 엔비디아, 마이크로소프트, 아마존, 구글, 메타, 테슬라)",
        "암호화폐 시세: 비트코인, 이더리움, 솔라나, 도미넌스",
        "환율: 달러 지수, 원화 기준 달러·유로·위안·엔",
        "Redis 메시지 큐 기반 SSE 실시간 갱신",
        "ChatGPT API 시황 분석",
        "30일 일봉 차트",
        "숨김·테마·언어 설정"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot",
        "Python",
        "FastAPI",
        "Redis 7.2",
        "React",
        "Proxmox",
        "Docker",
        "Nginx Proxy Manager",
        "Jenkins",
        "Prometheus",
        "Grafana"
      ],
      "startDate": "2025-03",
      "endDate": "2025-05",
      "url": "https://geonwoo.kim/ko/portfolio/gloticker",
      "roles": [
        "기획·디자인",
        "FastAPI 수집 서버",
        "Spring Boot 스트리밍 서버",
        "프론트엔드",
        "홈서버",
        "CI/CD",
        "모니터링"
      ],
      "entity": "개인",
      "type": "application"
    },
    {
      "name": "언더더키 · 커스텀 키보드 플랫폼",
      "description": "실제 타건음으로 타자를 연습하는 커스텀 키보드 플랫폼입니다. 2일 만에 사용자 500명이 모였습니다.",
      "highlights": [
        "체리 축 샘플 기반 스위치 소스 13종",
        "키보드 배열별 입력 테스트",
        "imager: 사운드 공간감 시각화",
        "볼륨 조절과 언어 변경",
        "한국어 속담 약 5,000개와 영문 격언 약 300개를 언어·카테고리별로 내주는 공개 API",
        "요청당 최대 20문장 응답"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot 3.3.3",
        "Spring Data JPA",
        "Querydsl",
        "MariaDB",
        "Redis 7.2",
        "MinIO",
        "Next.js",
        "Web Audio API",
        "Proxmox",
        "Docker",
        "Nginx Proxy Manager",
        "Jenkins"
      ],
      "startDate": "2024-08",
      "endDate": "2024-11",
      "url": "https://geonwoo.kim/ko/portfolio/underthekey",
      "roles": [
        "기획·디자인",
        "스위치 녹음·믹싱",
        "랜덤 문장 공개 API",
        "MSA 코어 모듈",
        "프론트엔드",
        "홈서버",
        "CI/CD",
        "모니터링"
      ],
      "entity": "개인",
      "type": "application"
    },
    {
      "name": "서울팝 · 위치 기반 역사 탐방",
      "description": "사용자 위치를 따라 서울의 문화재와 사적지를 탐방하는 서비스입니다. 서버와 CI/CD를 구축했습니다.",
      "highlights": [
        "서울 역사 지도",
        "GPS 기반 주변 문화재·사적지 알림",
        "카메라 AR과 실시간 콘텐츠 렌더링",
        "위치·경로 안내",
        "크롤링한 데이터로 만든 역사 상세 정보",
        "방문 도감 스탬프"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot 3.2.5",
        "Spring Data JPA",
        "Spring Security",
        "Querydsl",
        "MySQL 8.0",
        "Redis 7.2",
        "AWS S3",
        "AWS EC2",
        "Nginx Proxy Manager",
        "Jenkins",
        "Docker",
        "Uber H3"
      ],
      "startDate": "2024-04",
      "endDate": "2024-05",
      "url": "https://geonwoo.kim/ko/portfolio/seoulpop",
      "roles": [
        "팀장",
        "백엔드 리드",
        "서버·CI/CD",
        "회원 API",
        "문화재·사적지 조회"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "리릭잇 · 노래 가사 기반 실시간 게임",
      "description": "가사 키워드를 보고 채팅으로 노래를 맞히는 실시간 게임입니다. 백엔드 리드로 실시간 통신과 인프라를 맡았습니다.",
      "highlights": [
        "실시간 방 정보 갱신과 채팅",
        "방 생성, 게임 준비·시작, 진행 방식 설정",
        "채팅으로 가장 먼저 정답을 맞힌 사람이 이기는 라운드",
        "가사 데이터 검색"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot 3.2.1",
        "Spring Data JPA",
        "WebSocket (STOMP)",
        "MySQL 8.0.35",
        "Redis 7.2",
        "AWS EC2",
        "Jenkins",
        "Docker"
      ],
      "startDate": "2024-02",
      "endDate": "2024-04",
      "url": "https://geonwoo.kim/ko/portfolio/lyricit",
      "roles": [
        "백엔드 리드",
        "CI/CD·인프라 총괄",
        "회원 API",
        "WebSocket 통신",
        "채팅",
        "방 생성·게임 참여 API",
        "게임 플로우 리팩터링",
        "게임 타이머 스케줄링"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "명절 잔소리 영수증",
      "description": "명절 잔소리와 대처 경험을 영수증과 통계로 나누는 서비스입니다. SSAFY 공통 프로젝트 1위로 우수상을 받았습니다.",
      "highlights": [
        "잔소리·대처 경험 피드",
        "좋아요·팔로우",
        "영수증 출력과 공유",
        "마이페이지",
        "통계 데이터 시각화",
        "GitLab Runner와 Docker Hub를 거친 EC2 배포",
        "Nginx 뒤 Next.js·Spring Boot·MySQL·Redis 컨테이너 구성"
      ],
      "keywords": [
        "Java 17",
        "Spring Boot 3.2.1",
        "Spring Data JPA",
        "Spring Security",
        "Spring Batch",
        "Querydsl",
        "MySQL 8.0.35",
        "Redis 7.2",
        "AWS EC2",
        "GitLab Runner",
        "Docker"
      ],
      "startDate": "2024-01",
      "endDate": "2024-02",
      "url": "https://geonwoo.kim/ko/portfolio/jansorry",
      "roles": [
        "팀장",
        "백엔드 리드",
        "인프라·기술 총괄",
        "잔소리·좋아요·팔로우·영수증 API",
        "배치"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "뉴집스 · 부동산 모의투자",
      "description": "가상 예산으로 부동산에 투자하고 2년 뒤 수익률을 확인하는 모의투자 서비스입니다. 백엔드와 서버를 혼자 맡았습니다.",
      "highlights": [
        "카카오 지도의 위·경도 클러스터 렌더링",
        "부동산 정보 조회",
        "랭킹",
        "공지사항과 부동산 뉴스",
        "JWT 기반 회원 인증",
        "Vue.js 프론트엔드의 Netlify 배포",
        "GitHub Actions로 Cloudtype·EC2에 올린 Spring Boot·MariaDB·Redis 컨테이너"
      ],
      "keywords": [
        "Java 8",
        "Spring Boot 2.7.16",
        "Spring Data JPA",
        "Spring Security",
        "MariaDB",
        "Redis",
        "AWS S3",
        "AWS EC2",
        "Cloudtype",
        "Docker",
        "GitHub Actions"
      ],
      "startDate": "2023-11",
      "endDate": "2023-11",
      "url": "https://geonwoo.kim/ko/portfolio/newjibs",
      "roles": [
        "팀장",
        "백엔드 단독",
        "서버·CI/CD",
        "모의투자·랭킹·회원·공지",
        "뉴스 크롤러 스케줄링"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "트리플랫 · 여행 금융 다이어리",
      "description": "환전 현금과 카드 외화 지출을 원화로 환산해 기록하는 여행 금융 다이어리입니다. 신한은행 해커톤에서 만들었습니다.",
      "highlights": [
        "여행 생성과 예산·보유 현금 설정",
        "환전 신청",
        "달력형 금융 다이어리",
        "이미지 업로드"
      ],
      "keywords": [
        "Java 11",
        "Spring Boot 2.7.10",
        "Spring Data JPA",
        "MySQL 8.0",
        "AWS S3",
        "AWS EC2",
        "Docker",
        "GitHub Actions"
      ],
      "startDate": "2023-09",
      "endDate": "2023-09",
      "url": "https://geonwoo.kim/ko/portfolio/triplet",
      "roles": [
        "백엔드 API(회원, 여행, 데일리, 이미지 업로드)",
        "서버·CI/CD"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "herdr-cockpit · orch 작업을 보는 Herdr 레이아웃과 모드",
      "description": "orch의 메인 세션과 작업 에이전트, 제공자별 남은 사용량을 한 화면에 띄우는 Herdr 레이아웃과 모드입니다.",
      "highlights": [
        "Codex·Claude·Gemini 남은 사용량과 초기화 시각, CPU·RAM을 보여 주는 상단 막대",
        "머신·스페이스·탭·창 트리와 메인 세션별 작업 에이전트 수를 보여 주는 에이전트 목록",
        "이 컴퓨터의 메인 세션 터미널을 격자로 모아 바로 입력하는 hub",
        "말이나 글로 한 지시를 알맞은 메인 세션에 전달하는 nexus와 한국어 음성 입력",
        "연결이 끊긴 원격 머신의 탭 숨기기와 복구",
        "원격 머신마다 사용량과 창 정보를 모으는 Go 수집 프로그램"
      ],
      "keywords": [
        "Go",
        "JavaScript",
        "Swift",
        "Herdr.app",
        "gopsutil"
      ],
      "startDate": "2026-11",
      "url": "https://geonwoo.kim/ko/portfolio/herdr-cockpit",
      "roles": [
        "설계",
        "Herdr 모드 개발",
        "Go 수집 프로그램"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "wiki-island · 벤더 중립 AI 메모리",
      "description": "여러 AI 도구가 Markdown 폴더 하나에 기억을 함께 쌓고 쓰게 하는 오픈소스 로컬 메모리입니다.",
      "highlights": [
        "MCP 도구 15개로 하는 검색·읽기·기록·수정·보관·복원",
        "wi setup 한 번으로 Claude Code·Codex·Cursor 등 AI 앱 10종 자동 연결",
        "띄어쓰기 없는 두 글자 한국어도 찾는 SQLite FTS5 검색",
        "Git으로 남기는 변경 이력과 이전 버전 복원",
        "Obsidian 폴더와 함께 쓰기, PDF·Word·PowerPoint·CSV·이미지 가져오기",
        "백그라운드 서비스가 맡는 편집 반영, 색인 복구와 정리"
      ],
      "keywords": [
        "Rust",
        "SQLite FTS5",
        "MCP",
        "Tokio",
        "Git",
        "Markdown"
      ],
      "startDate": "2026-11",
      "url": "https://geonwoo.kim/ko/portfolio/wiki-island",
      "roles": [
        "설계",
        "Rust 개발"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "orch · 멀티 에이전트 오케스트레이터",
      "description": "메인 세션이 판단하고 작업 에이전트가 실행하며, 다른 계열 모델이 결과를 검토하는 멀티 에이전트 실행기입니다.",
      "highlights": [
        "Codex·Claude·Gemini 계열 7개 모델 키 중에서 고르는 작업 배정",
        "작업 범위와 결과 형식을 적은 계약 파일, 결과 파일과 상태 기록",
        "창을 열지 않고 끝내는 단발 조사·수정, 실패만 요약하는 테스트 실행",
        "작성한 모델과 다른 계열에 맡기는 독립 검토",
        "의존 관계에 따른 순차·병렬 실행과 중단 뒤 이어서 실행",
        "Herdr 작업 창의 배치와 정리, 사용자 화면 포커스 보호"
      ],
      "keywords": [
        "Go",
        "YAML",
        "Herdr",
        "Claude Code",
        "Codex",
        "Antigravity"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/ko/portfolio/orch",
      "roles": [
        "설계",
        "Go CLI 개발"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "hermes-agent · Hermes Agent 오픈소스 컨트리뷰션",
      "description": "Hermes Agent에서 넓은 경로를 검색하면 macOS 권한 팝업이 뜨던 문제를 고친 컨트리뷰션입니다. 검색 전에 보호 폴더를 뺍니다.",
      "highlights": [
        "홈이나 /Users 같은 상위 경로 검색에서 Desktop·Documents·Downloads 등 보호 폴더 7곳 제외",
        "파일명 검색과 파일 내용 검색, ripgrep·grep·find 경로 모두에 같은 제외 적용",
        "보호 폴더를 직접 지정한 검색은 그대로 허용",
        "건너뛴 폴더와 직접 검색하는 방법을 알리는 경고",
        "macOS가 아닌 환경에서는 적용하지 않음"
      ],
      "keywords": [
        "Python",
        "ripgrep",
        "macOS"
      ],
      "startDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/hermes-agent",
      "roles": [
        "버그 수정",
        "테스트"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "vat · 상위 폴더 하나에서 여러 저장소를 개발하는 작업 공간 CLI",
      "description": "여러 저장소를 상위 폴더 하나에서 개발하며, 저장소 사이의 변경과 결정을 한곳에 기록하는 작업 공간 CLI입니다.",
      "highlights": [
        "상위 폴더의 vat.yaml 하나로 선언하는 저장소 목록과 저장소별 수정 범위",
        "로컬 변경을 건드리지 않고 안전할 때만 fast-forward하는 일괄 동기화",
        "여러 저장소에 걸친 변경의 복귀 지점, 검사 결과, 함께 검증된 커밋 기록",
        "출처 커밋과 확인 날짜가 붙은 결정 기록, 오래된 기록의 인용 중지",
        "역할 정의 하나에서 만드는 Claude Code·Codex용 에이전트 지침과 불일치 검사",
        "설정과 환경 문제를 진단하는 lint와 doctor"
      ],
      "keywords": [
        "Go",
        "YAML",
        "Git"
      ],
      "startDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/vat",
      "roles": [
        "설계",
        "Go CLI 개발"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "offon · 출퇴근·휴가를 관리하는 오픈소스 슬랙 앱",
      "description": "사내 업무 시스템에서 근태·휴가 기능만 떼어 낸 오픈소스 앱입니다. 슬랙과 웹에서 출퇴근과 휴가를 관리합니다.",
      "highlights": [
        "자정을 넘긴 근무와 하루 여러 번의 출퇴근, 근무·휴식·초과근무 시간 자동 계산",
        "시작할 때 끝나는 시각을 정하고 복귀 알림을 보내는 60분 식사",
        "주말·공휴일을 뺀 종일·반차 휴가 신청과 남은 연차 추적",
        "달력에서 하는 근태 정정 신청과 승인 뒤 시간 재계산",
        "휴가와 근태 정정을 한곳에서 처리하는 관리자 승인함",
        "슬랙 일회용 코드 로그인, 슬래시 명령 5개, 출퇴근 누락 알림"
      ],
      "keywords": [
        "Next.js 16",
        "React 19",
        "TypeScript",
        "Tailwind CSS 4",
        "shadcn/ui",
        "PostgreSQL",
        "Prisma",
        "Slack Web API",
        "Vercel Cron"
      ],
      "startDate": "2026-04",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/ko/portfolio/offon-oss",
      "roles": [
        "설계",
        "풀스택 개발"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    },
    {
      "name": "sshift · 점프 서버 접속과 비밀번호 저장을 묶은 SSH CLI",
      "description": "점프 서버 접속과 암호화한 비밀번호 저장을 묶은 SSH CLI입니다. 서버 50여 대 접속을 명령 하나로 줄였습니다.",
      "highlights": [
        "대화형 서버 선택, ID·이름으로 바로 접속, 원격 명령 실행",
        "서버와 점프 관계의 추가·수정·삭제·목록",
        "점프 서버와 대상 서버의 비밀번호·키 인증 조합 처리",
        "암호화한 비밀번호 저장과 사용자 지정 암호화 키",
        "서버와 점프 관계의 JSON 내보내기·가져오기",
        "Homebrew, 설치 스크립트, 릴리스 바이너리로 설치"
      ],
      "keywords": [
        "Go",
        "OpenSSH",
        "sshpass",
        "Homebrew"
      ],
      "startDate": "2025-07",
      "endDate": "2025-08",
      "url": "https://geonwoo.kim/ko/portfolio/sshift",
      "roles": [
        "설계",
        "Go CLI 개발",
        "Homebrew 배포"
      ],
      "entity": "도구와 오픈소스",
      "type": "application"
    }
  ],
  "meta": {
    "canonical": "https://geonwoo.kim/ko/resume.json",
    "version": "v1.0.0",
    "lastModified": "2026-11-15T21:09:07+09:00",
    "availability": "Open to good opportunities"
  }
}
