{
  "schemaVersion": "1.0",
  "portfolio": {
    "title": {
      "ko": "이호민 | 포트폴리오",
      "en": "Homin Lee | Portfolio",
      "ja": "イ・ホミン | ポートフォリオ",
      "zh": "李浩民 | 作品集",
      "pl": "Homin Lee | Portfolio"
    },
    "tagline": "Actionable AI, Physical Precision.",
    "description": {
      "ko": "하드웨어와 소프트웨어의 경계를 넘나들며 만든 다양한 프로젝트를 소개하는 이호민의 포트폴리오입니다.",
      "en": "Homin Lee's portfolio introducing various projects created at the boundary of hardware and software."
    },
    "author": {
      "name": "Homin Lee (이호민)",
      "handle": "suapapa",
      "email": "i@homin.dev",
      "url": "https://homin.dev/portfolio/",
      "github": "https://github.com/suapapa",
      "youtube": "https://youtube.com/@vibetinker"
    },
    "ogImage": "https://homin.dev/portfolio/assets/og-image.png",
    "endpoints": {
      "html": "https://homin.dev/portfolio/",
      "json": "https://homin.dev/portfolio/works.json",
      "apiJson": "https://homin.dev/portfolio/api/works.json",
      "queryJson": "https://homin.dev/portfolio/?format=json",
      "queryFilteredExample": "https://homin.dev/portfolio/?format=json&lang=ko&category=ai",
      "yaml": "https://homin.dev/portfolio/works.yaml",
      "llmsTxt": "https://homin.dev/portfolio/llms.txt"
    }
  },
  "filter": {
    "lang": "all",
    "category": "all"
  },
  "totalCount": 12,
  "categoryCounts": {
    "all": 12,
    "ai": 3,
    "app": 3,
    "make": 6,
    "system": 1
  },
  "supportedLanguages": [
    "ko",
    "en",
    "ja",
    "zh",
    "pl"
  ],
  "works": [
    {
      "id": "rusty-balcon",
      "index": 0,
      "title": {
        "ko": "rusty-balcon - 발로 밟는 AI 음성 입력 키보드",
        "en": "rusty-balcon - Foot-Operated AI Voice Input Keyboard",
        "ja": "rusty-balcon - 足で踏むAI音声入力キーボード",
        "zh": "rusty-balcon - 用脚踩的 AI 语音输入键盘",
        "pl": "rusty-balcon - Sterowana nogą klawiatura do głosowego wprowadzania AI"
      },
      "desc": {
        "ko": "ESP32-H2와 Rust로 만든, 발로 AI 음성 입력을 조작하는 3 페달 BLE 키보드",
        "en": "A 3-pedal foot-operated BLE keyboard for AI voice input, built with Rust on ESP32-H2",
        "ja": "ESP32-H2とRustで作った、足でAI音声入力を操作する3ペダルBLEキーボード",
        "zh": "用 Rust 在 ESP32-H2 上打造的三踏板脚控 BLE AI 语音输入键盘",
        "pl": "Trzy-pedałowa, sterowana nogą klawiatura BLE do wprowadzania głosowego AI, napisana w Rust na ESP32-H2"
      },
      "categories": [
        "make"
      ],
      "image": "assets/images/rusty-balcon.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/rusty-balcon.webp",
      "youtubeId": "l1PMaWwNNzU",
      "youtubeUrl": "https://www.youtube.com/watch?v=l1PMaWwNNzU",
      "webLink": null
    },
    {
      "id": "kitt-eye",
      "index": 1,
      "title": {
        "ko": "kitt-eye - 실제로 작동하는 K.I.T.T. 스캐너!",
        "en": "kitt-eye - K.I.T.T. Scanner That Actually Works!",
        "ja": "kitt-eye - 実際に動作するK.I.T.T.スキャナー！",
        "zh": "kitt-eye - 真正可用的 K.I.T.T. 扫描器！",
        "pl": "kitt-eye - Skaner K.I.T.T., który naprawdę działa!"
      },
      "desc": {
        "ko": "AI 코딩 에이전트의 상태를 MQTT로 수집하여, ESP32 기반 K.I.T.T. 스캐너 LED 바로 시각화하는 홈랩 모니터링 시스템",
        "en": "A homelab status monitoring system that captures lifecycle events from AI coding agents, aggregates their states via a Go daemon over MQTT, and visualizes them on an ESP32 K.I.T.T. scanner LED bar",
        "ja": "AIコーディングエージェントの状態をMQTTで収集し、ESP32ベースのK.I.T.T.スキャナーLEDバーで可視化するホームラボ監視システム",
        "zh": "通过 MQTT 采集 AI 编程智能体的生命周期状态，并通过基于 ESP32 的 K.I.T.T. 扫描器 LED 灯条进行可视化的家庭实验室监控系统",
        "pl": "System monitoringu homelab zbierający stany agentów AI przez MQTT i wizualizujący je na pasku LED K.I.T.T. opartym na ESP32"
      },
      "categories": [
        "make",
        "ai"
      ],
      "image": "assets/images/kitt-eye.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/kitt-eye.webp",
      "youtubeId": "wyhWsYbmHZ8",
      "youtubeUrl": "https://www.youtube.com/watch?v=wyhWsYbmHZ8",
      "webLink": "https://kitt-eye.homin.dev"
    },
    {
      "id": "upbit-bridge",
      "index": 2,
      "title": {
        "ko": "Upbit Bridge",
        "en": "Upbit Bridge",
        "ja": "Upbit Bridge",
        "zh": "Upbit Bridge",
        "pl": "Upbit Bridge"
      },
      "desc": {
        "ko": "업비트 OpenAPI를 MCP, REST, WebSocket으로 연결하는 통합 게이트웨이",
        "en": "An integrated gateway connecting Upbit OpenAPI via MCP, REST, and WebSocket",
        "ja": "Upbit OpenAPIをMCP、REST、WebSocketで接続する統合ゲートウェイ",
        "zh": "通过 MCP、REST 和 WebSocket 连接 Upbit OpenAPI 的综合网关",
        "pl": "Zintegrowana brama łącząca Upbit OpenAPI przez MCP, REST i WebSocket"
      },
      "categories": [
        "ai"
      ],
      "image": "assets/images/upbit-bridge.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/upbit-bridge.webp",
      "youtubeId": null,
      "youtubeUrl": null,
      "webLink": "https://upbit-bridge.homin.dev/"
    },
    {
      "id": "openscad-wasm-mcp",
      "index": 3,
      "title": {
        "ko": "OpenSCAD WASM MCP",
        "en": "OpenSCAD WASM MCP",
        "ja": "OpenSCAD WASM MCP",
        "zh": "OpenSCAD WASM MCP",
        "pl": "OpenSCAD WASM MCP"
      },
      "desc": {
        "ko": "AI 에이전트를 위한 OpenSCAD, 네이티브 설치 불필요",
        "en": "OpenSCAD for AI agents, no native installation required",
        "ja": "AIエージェントのためのOpenSCAD、ネイティブインストール不要",
        "zh": "面向 AI 智能体的 OpenSCAD，无需本地安装",
        "pl": "OpenSCAD dla agentów AI, brak wymaganej instalacji natywnej"
      },
      "categories": [
        "ai"
      ],
      "image": "assets/images/openscad-wasm-mcp.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/openscad-wasm-mcp.webp",
      "youtubeId": "SMOajTSFkgk",
      "youtubeUrl": "https://www.youtube.com/watch?v=SMOajTSFkgk",
      "webLink": "https://suapapa.github.io/openscad-wasm-mcp"
    },
    {
      "id": "croquing",
      "index": 4,
      "title": {
        "ko": "Croquing",
        "en": "Croquing",
        "ja": "Croquing",
        "zh": "Croquing",
        "pl": "Croquing"
      },
      "desc": {
        "ko": "크로키 모임에서 사진과 시간을 동기화하는 웹 앱",
        "en": "A web app that synchronizes photos and time for croquis gatherings",
        "ja": "クロッキーの集まりで写真と時間を同期するウェブアプリ",
        "zh": "在速写聚会中同步照片和时间的网页应用",
        "pl": "Aplikacja internetowa synchronizująca zdjęcia i czas podczas spotkań rysunkowych"
      },
      "categories": [
        "app"
      ],
      "image": "assets/images/croquing.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/croquing.webp",
      "youtubeId": "vb_F3cJAVBc",
      "youtubeUrl": "https://www.youtube.com/watch?v=vb_F3cJAVBc",
      "webLink": "https://croquing.homin.dev/"
    },
    {
      "id": "hangul-wordle",
      "index": 5,
      "title": {
        "ko": "한글 워들",
        "en": "Hangul Wordle",
        "ja": "ハングル・ワードル",
        "zh": "韩文 Wordle",
        "pl": "Hangul Wordle"
      },
      "desc": {
        "ko": "한글 단어 맞히기 웹 게임",
        "en": "A web-based word puzzle game for guessing Korean words",
        "ja": "ハングルの単語を当てるウェブゲーム",
        "zh": "猜韩语单词的网页游戏",
        "pl": "Internetowa gra słowna polegająca na odgadywaniu koreańskich słów"
      },
      "categories": [
        "app"
      ],
      "image": "assets/images/hangul-wordle.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/hangul-wordle.webp",
      "youtubeId": null,
      "youtubeUrl": null,
      "webLink": "https://hangul-wordle.homin.dev"
    },
    {
      "id": "si-gnal",
      "index": 6,
      "title": {
        "ko": "시-그날",
        "en": "Poem-Signal",
        "ja": "詩 - その日",
        "zh": "今日之诗",
        "pl": "Wiersz na Dzień"
      },
      "desc": {
        "ko": "그날의 시를 읽어주는 전화기",
        "en": "A rotary telephone that reads the poem of the day",
        "ja": "その日の詩を朗読してくれる電話機",
        "zh": "朗读今日诗歌的电话机",
        "pl": "Telefon tarczowy, który czyta wiersz na ten dzień"
      },
      "categories": [
        "make"
      ],
      "image": "assets/images/si-gnal.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/si-gnal.webp",
      "youtubeId": "4-npsIITtVo",
      "youtubeUrl": "https://www.youtube.com/watch?v=4-npsIITtVo",
      "webLink": null
    },
    {
      "id": "otl",
      "index": 7,
      "title": {
        "ko": "OTL - OBD2 Telemetry Logger",
        "en": "OTL - OBD2 Telemetry Logger",
        "ja": "OTL - OBD2 Telemetry Logger",
        "zh": "OTL - OBD2 Telemetry Logger",
        "pl": "OTL - OBD2 Telemetry Logger"
      },
      "desc": {
        "ko": "OTL은 차량 OBD2 포트에서 데이터를 수집하고 기록하는 앱",
        "en": "OTL collects and logs telemetry data from a vehicle's OBD-II port",
        "ja": "OTLは車両のOBD2ポートからデータを収集して記録するアプリ",
        "zh": "OTL 是一款从车辆 OBD2 端口收集并记录数据的应用",
        "pl": "OTL to aplikacja, która zbiera i zapisuje dane telemetryczne z portu OBD-II pojazdu"
      },
      "categories": [
        "app"
      ],
      "image": "assets/images/otl.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/otl.webp",
      "youtubeId": "efYKA8Utu9k",
      "youtubeUrl": "https://www.youtube.com/watch?v=efYKA8Utu9k",
      "webLink": "https://apps.homin.dev/otl"
    },
    {
      "id": "rusty-hangulclock",
      "index": 8,
      "title": {
        "ko": "한글시계 - RustyHangulClock",
        "en": "Hangul Clock - RustyHangulClock",
        "ja": "ハングル時計 - RustyHangulClock",
        "zh": "韩文字画钟 - RustyHangulClock",
        "pl": "Zegar Hangul - RustyHangulClock"
      },
      "desc": {
        "ko": "한글시계 15주년 기념 리메이크",
        "en": "A 15th-anniversary remake of the Hangul Clock, written in Rust",
        "ja": "ハングル時計15周年記念リメイク",
        "zh": "韩文字画钟15周年纪念重制版",
        "pl": "Remake zegara Hangul na 15. rocznicę, napisany w języku Rust"
      },
      "categories": [
        "make"
      ],
      "image": "assets/images/rusty-hangulclock.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/rusty-hangulclock.webp",
      "youtubeId": "dWWVg34_vlA",
      "youtubeUrl": "https://www.youtube.com/watch?v=dWWVg34_vlA",
      "webLink": "https://rhangulclock.homin.dev/"
    },
    {
      "id": "sevensplit",
      "index": 9,
      "title": {
        "ko": "개인용 주식 자동매매 시스템",
        "en": "Personal Auto Stock Trading System",
        "ja": "個人向け株式自動売買システム",
        "zh": "个人股票自动交易系统",
        "pl": "Osobisty system automatycznego handlu akcjami"
      },
      "desc": {
        "ko": "세븐스플릿 매매를 서버에서 웹까지 구현한 개인용 주식 자동매매 시스템",
        "en": "A personal automated stock trading system that implements the 'Seven Split' trading strategy from server to web",
        "ja": "セブンスプリット売買をサーバーからウェブまで実装した個人用株式自動売買システム",
        "zh": "实现从服务器到网页的“七分割”个人股票自动交易系统",
        "pl": "Osobisty system automatycznego handlu akcjami wdrażający strategię handlową „Seven Split” od serwera do sieci"
      },
      "categories": [
        "system"
      ],
      "image": "assets/images/sevensplit.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/sevensplit.webp",
      "youtubeId": "TIWcA2wqG9k",
      "youtubeUrl": "https://www.youtube.com/watch?v=TIWcA2wqG9k",
      "webLink": "https://ss.homin.dev/"
    },
    {
      "id": "huma",
      "index": 10,
      "title": {
        "ko": "HUMA - 손으로 조립하는 아두이노 보드",
        "en": "HUMA - Solder-It-Yourself Arduino Board",
        "ja": "HUMA - 手で組み立てるArduinoボード",
        "zh": "HUMA - 亲手组装的 Arduino 开发板",
        "pl": "HUMA - Ręcznie montowana płytka Arduino"
      },
      "desc": {
        "ko": "라디오 키트를 조립하듯 모든 부품을 손수 납땜하여 완성할 수 있도록 설계된 오픈소스 아두이노 호환 보드",
        "en": "An open-source, Arduino-compatible board designed to be hand-soldered and assembled like a classic radio kit",
        "ja": "昔のラジオキットのように、すべての部品を自分ではんだ付けして組み立てられるFreeduinoベースのオープンソースArduino互換ボード",
        "zh": "基于 Freeduino 的开源 Arduino 兼容开发板，设计上可像经典收音机套件一样亲手焊接全部零件完成组装",
        "pl": "Płytka kompatybilna z Arduino oparta na Freeduino, zaprojektowana do samodzielnego lutowania i montażu jak klasyczny zestaw radiowy"
      },
      "categories": [
        "make"
      ],
      "image": "assets/images/huma.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/huma.webp",
      "youtubeId": null,
      "youtubeUrl": null,
      "webLink": "https://suapapa.github.io/HUMA/"
    },
    {
      "id": "hangulclock",
      "index": 11,
      "title": {
        "ko": "한글시계",
        "en": "Hangul Clock",
        "ja": "ハングル時計",
        "zh": "韩文字画钟",
        "pl": "Zegar Hangul"
      },
      "desc": {
        "ko": "2011년 MAKE:Korea 아두이노 공모전에서 2등을 차지한, 한글 단어로 만든 시계",
        "en": "A clock that displays time in Korean words, which won 2nd place in the 2011 MAKE:Korea Arduino Contest",
        "ja": "2011年 MAKE:Korea アルドゥイーノ公募展で2位を受賞した、ハングルの単語で作られた時計",
        "zh": "在 2011 年 MAKE:Korea Arduino 大赛中荣获二等奖的韩文单词时钟",
        "pl": "Zegar wyświetlający czas w słowach w alfabecie Hangul, który zajął 2. miejsce w konkursie Arduino MAKE:Korea w 2011 roku"
      },
      "categories": [
        "make"
      ],
      "image": "assets/images/hangulclock.webp",
      "imageUrl": "https://homin.dev/portfolio/assets/images/hangulclock.webp",
      "youtubeId": "ApymC7qAVTI",
      "youtubeUrl": "https://www.youtube.com/watch?v=ApymC7qAVTI",
      "webLink": "https://homin.dev/blog/post/20221009_hangulclock_is_re-written_in_golang/"
    }
  ]
}
