{
  "$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
  "basics": {
    "name": "Geonwoo Kim",
    "label": "Builder",
    "image": "https://geonwoo.kim/images/profile.jpg",
    "email": "contact@geonwoo.kim",
    "url": "https://geonwoo.kim/en",
    "summary": "I am Geonwoo Kim (김건우), an AI-Native Builder. I use a multi-agent pipeline I built by combining Claude Code, Codex and Gemini CLI. I am a Product Engineer at Lukuku, and I build the agent operations system for deepeet.",
    "profiles": [
      {
        "network": "GitHub",
        "username": "takealook97",
        "url": "https://github.com/takealook97"
      }
    ]
  },
  "work": [
    {
      "name": "deepeet",
      "position": "Co-founder · Builder",
      "url": "https://deepeet.com",
      "startDate": "2026-07",
      "summary": "I build an AI-Native commerce business run by AI agents, along with the operations system behind it.",
      "highlights": [
        "Design and build an AI-Native commerce business where AI agents handle operations across the business.",
        "Agents and automated systems handle orders, purchasing, price changes, listing preparation and financial reconciliation.",
        "Gave each agent a separate role and set of execution permissions so it works only within those limits.",
        "Reached 700+ orders and over ₩10M in cumulative revenue within three months through automation."
      ]
    },
    {
      "name": "Lukuku",
      "position": "Product Engineer",
      "url": "https://www.lukuku.co/",
      "startDate": "2026-04",
      "summary": "I build Shopify integrations for clients, the company-wide work management system offon, a company ontology and an internal operations agent.",
      "highlights": [
        "Build backends for Shopify-based global e-commerce stores and own their ERP and logistics integrations.",
        "Gave staff and AI one place to look up company information scattered across 15 sources, including Slack, email and GitHub.",
        "Routed all ERP communication for the US subsidiary's B2B store through one integration server, so ERP changes touch less code.",
        "Handled month-end sales reconciliation between a sports brand's Korean online store and its ERP, reducing data mismatches."
      ]
    },
    {
      "name": "Biztalk",
      "position": "Backend Engineer",
      "url": "https://www.biztalk.co.kr",
      "startDate": "2025-05",
      "endDate": "2025-10",
      "summary": "I developed and operated servers, batch jobs and infrastructure for the BGMS messaging system.",
      "highlights": [
        "Built and ran the servers, batch jobs and infrastructure of BGMS, the messaging system that sends Kakao AlimTalk and brand messages.",
        "Turned the overdue payment notices the planning team sent by hand every month into a one-button task, owning it from planning onward.",
        "Replaced manual deployments on IDC servers with a single shell script and built Jenkins pipelines for QA and production.",
        "Built a tool that encrypts sensitive values in configuration files and rolled it out company-wide."
      ]
    },
    {
      "name": "CJ OliveNetworks",
      "position": "Development Intern",
      "url": "https://www.cjolivenetworks.co.kr",
      "startDate": "2024-06",
      "endDate": "2024-06",
      "summary": "I planned an OCR workflow to reduce manual entry of factory work records in the MES.",
      "highlights": [
        "Planned an OCR workflow to reduce manual entry of work records in the MES."
      ]
    }
  ],
  "volunteer": [
    {
      "organization": "Notion",
      "position": "Notion Ambassador",
      "startDate": "2024-07",
      "endDate": "2025-07",
      "highlights": [
        "Selected as a global ambassador",
        "Wrote articles on automating workflows with the Notion API",
        "Joined beta tests, QA and meetings with ambassadors abroad"
      ]
    }
  ],
  "education": [
    {
      "institution": "Dongguk University",
      "area": "Bachelor of International Trade",
      "startDate": "2017-03",
      "endDate": "2023-02"
    },
    {
      "institution": "Gimpo Foreign Language High School",
      "area": "English department",
      "startDate": "2013-03",
      "endDate": "2016-02"
    },
    {
      "institution": "Samsung Youth SW Academy (SSAFY)",
      "area": "Java track",
      "startDate": "2023-07",
      "endDate": "2024-06"
    },
    {
      "institution": "Codesquad",
      "area": "Backend course",
      "startDate": "2023-01",
      "endDate": "2023-06"
    }
  ],
  "awards": [
    {
      "title": "Project Excellence Award",
      "date": "2024-02",
      "awarder": "SSAFY",
      "summary": "1st place in the common project"
    }
  ],
  "certificates": [
    {
      "name": "OPIc IH",
      "issuer": "ACTFL"
    },
    {
      "name": "SQLD",
      "issuer": "Korea Data Agency"
    }
  ],
  "projects": [
    {
      "name": "space-l · client OS",
      "description": "A client OS that brings progress updates, once split across documents and messages, into one place. I built the server and deployment pipeline.",
      "highlights": [
        "Client login with an ID and password, staff login through Slack",
        "Local currency amounts shown with KRW reference amounts",
        "Schedule timeline and shared materials",
        "Internal CRM and inbound inquiries"
      ],
      "keywords": [
        "Next.js",
        "TypeScript",
        "Go",
        "Vercel",
        "AWS EKS",
        "AWS S3"
      ],
      "startDate": "2026-10",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-space-l",
      "roles": [
        "Architecture",
        "Go API server",
        "Deployment pipeline"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Shopify B2B store for a US subsidiary · B2B backend",
      "description": "A Shopify B2B store where a global sports brand's US subsidiary takes business orders. I built the B2B server and the ERP integration server.",
      "highlights": [
        "Account, location, product and inventory synchronization",
        "Account-specific order quantity rules",
        "Signature-verified webhook storage, retries on failure and quarantine of invalid messages"
      ],
      "keywords": [
        "Go",
        "chi",
        "pgx",
        "sqlc",
        "goose",
        "OpenAPI",
        "Shopify B2B"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-commerce-b2b",
      "roles": [
        "B2B backend",
        "ERP integration server",
        "Integration interface review"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Lukuku OS · company ontology and agent operations",
      "description": "A company ontology for staff and agents to query shared information, with an agent operations system for development work.",
      "highlights": [
        "A source archive that stores and searches more than 500,000 Slack messages"
      ],
      "keywords": [
        "Hermes Agent",
        "MCP",
        "PostgreSQL",
        "AWS S3",
        "BGE-M3",
        "launchd"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-os",
      "roles": [
        "Ontology design",
        "Knowledge graph",
        "Answer evaluation",
        "Agent operations"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "360° video app and AI video server for an installation art exhibition",
      "description": "A 360° video app and AI video server for an installation art exhibition. Each artwork has its own on-site app, and all share one server and dashboard.",
      "highlights": [
        "Nalda · Swift on-site app for the balloon-chair experience",
        "Namu Block · server API creating roughly 15-second videos from images and words",
        "Bibi Hero · server API creating a character poster from a photo, then a roughly 10-second video with the selected motion",
        "Reels13 · server job that turns one chosen take out of three 13-second takes into AI video",
        "360° balloon experience results website · mobile page for visitors to collect videos by QR",
        "Operations dashboard · orders, failures, retries and AI costs by location, device and service"
      ],
      "keywords": [
        "Swift",
        "SwiftUI",
        "Python",
        "FastAPI",
        "PostgreSQL",
        "AWS S3",
        "TypeScript"
      ],
      "startDate": "2026-06",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-ai-experience",
      "roles": [
        "Swift on-site app",
        "AI generation server",
        "Operations dashboard",
        "Results website"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Sales reconciliation and integration operations between a sports brand's Korean online store and its ERP",
      "description": "Month-end sales reconciliation for a sports brand’s Korean store and ERP, using a tool I built to compare about 390,000 rows across 58 days.",
      "highlights": [
        "Key-by-key matching of orders, shipments, returns, exchanges, coupons and points",
        "Settlement correction process organized by how exchange orders lose settlement data",
        "Voucher prices pulled from the ERP to calculate discounts per order item"
      ],
      "keywords": [
        "Python",
        "Shopify",
        "Microservices"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-commerce-erp",
      "roles": [
        "Sales reconciliation",
        "Reconciliation tool development",
        "Integration server operations",
        "Settlement corrections"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Internal operations agent built on Hermes Agent",
      "description": "An internal operations agent built on Hermes Agent that staff call from Slack and Telegram. It splits requests across nine role-specific agents.",
      "highlights": [
        "Task lookup, task creation and leave requests handled in Slack threads",
        "A monitoring agent that turns requests in client channels into tasks · no permission to post in client channels",
        "A personal agent for each employee, refreshed daily from their Slack conversations",
        "Always on through 33 launchd jobs on one Mac mini · installed files checked against source every 5 minutes"
      ],
      "keywords": [
        "Hermes Agent",
        "Python",
        "macOS",
        "launchd",
        "OpenViking",
        "BGE-M3",
        "Slack"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-ops-agent",
      "roles": [
        "Agent permission design",
        "Operations server setup",
        "Automated incident handling",
        "Model evaluation"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "offon · company-wide work management system",
      "description": "Lukuku's company-wide work management system. It handles everything from attendance to CRM in Slack and is the MCP access point for AI agents.",
      "highlights": [
        "Slack commands for attendance and break records, correction requests and approvals",
        "Automatic calculations for overnight work, holiday exclusions, leave grants and carry-over",
        "Table, kanban, calendar and Gantt views of tasks and assignee status",
        "Reminders asking assignees for updates on the next follow-up date",
        "Meeting room bookings and reminders 10 minutes before meetings",
        "Agent search backed by about 390,000 lines of Slack conversation"
      ],
      "keywords": [
        "Next.js 16",
        "React 19",
        "TypeScript",
        "Prisma",
        "PostgreSQL",
        "Vercel",
        "MCP",
        "OAuth 2.1"
      ],
      "startDate": "2026-04",
      "url": "https://geonwoo.kim/en/portfolio/offon",
      "roles": [
        "Design",
        "Full-stack development",
        "MCP server",
        "Operations"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Participant-only tournament voucher ordering for a sports brand's Korean online store",
      "description": "A voucher ordering backend for a sports brand’s tournament participants, built in about a week before the tournament.",
      "highlights": [
        "API that returns only the products eligible for the voucher price",
        "Order validation that checks each item's style and color against the voucher's item list and blocks anything else",
        "Bundle products that showed as unavailable in staging tests, matched to their Shopify admin state"
      ],
      "keywords": [
        "Python",
        "Shopify"
      ],
      "startDate": "2026-04",
      "endDate": "2026-09",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-club-match",
      "roles": [
        "Voucher ordering API",
        "Order validation",
        "Duplicate payment prevention",
        "Voucher close-out operations"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "Shopify store features and integrations for brands",
      "description": "Features, maintenance and external integrations built for brands running Shopify stores.",
      "highlights": [
        "Two brands run by a sports group's Korean subsidiary · coupon-expiry AlimTalk batches",
        "Underwear brand's global store · checkout extension and localized text",
        "European sleep brand's Korean subsidiary · backend design and test environment for collecting domestic marketplace orders in Shopify",
        "Case brand · lookup API matching store product options to ERP items",
        "Beauty brand · App Store submission work for a quantity-discount app and cart support for a new theme"
      ],
      "keywords": [
        "Shopify",
        "Shopify Checkout UI extensions",
        "React",
        "Kakao AlimTalk"
      ],
      "startDate": "2026-04",
      "endDate": "2026-07",
      "url": "https://geonwoo.kim/en/portfolio/lukuku-clients",
      "roles": [
        "Batch jobs",
        "Shopify apps and extensions",
        "Integration APIs"
      ],
      "entity": "Lukuku",
      "type": "application"
    },
    {
      "name": "AWS MSK 3.8 migration",
      "description": "Moved production AWS MSK 3.5 to a new 3.8 cluster and automatically recreated the settings of about 160 topics.",
      "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/en/portfolio/msk-migration",
      "roles": [
        "Architecture design",
        "KRaft adoption in development and production",
        "SASL authentication",
        "Topic and replica configuration",
        "Message sending tests",
        "Kafka UI monitoring"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "BGMS log masking module",
      "description": "A log masking module shared by 14 types of BGMS MSA servers. Local caching skips the Redis lookups each log entry used to make.",
      "highlights": [
        "Checks whether a customer needs masking first, then wraps the log object before it is passed on and masks it inside the module"
      ],
      "keywords": [
        "Java 8",
        "Spring Boot 2.7",
        "Redis",
        "Gson",
        "JaCoCo"
      ],
      "startDate": "2025-07",
      "endDate": "2025-07",
      "url": "https://geonwoo.kim/en/portfolio/log-masking",
      "roles": [
        "Planning",
        "Module design",
        "Redis bottleneck fix",
        "Development and testing",
        "Patching"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "Overdue payment notice RPA",
      "description": "An RPA that moved monthly overdue notices from Excel and hand-made PDFs onto one page, cutting the work from over 2 days to 10 minutes.",
      "highlights": [
        "Overdue customer lookup, receivable registration and deletion on one page",
        "PDFs generated per customer with their overdue amount and due date",
        "Email and AlimTalk notices sent with one button"
      ],
      "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/en/portfolio/bond-rpa",
      "roles": [
        "Planning",
        "DB and flow design",
        "PDF generation automation",
        "Mail and AlimTalk notice automation",
        "Design",
        "Client page"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "BGMS messaging system development and operations",
      "description": "Feature work and operations for BGMS, which sends about 400 million Kakao AlimTalk and brand messages a month.",
      "highlights": [
        "Blocking feature for KakaoTalk brand messages",
        "Reprocessing logic for KakaoTalk brand message targeting (N, I)",
        "Realtime topic in MSK and refactoring of the related logic"
      ],
      "keywords": [
        "Java",
        "Spring Boot",
        "AWS MSK",
        "Redis"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/en/portfolio/biztalk-bgms",
      "roles": [
        "Brand message features",
        "MSK Realtime topic setup",
        "Related logic refactoring",
        "Service operations"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "Deployment pipeline setup and internal GitLab migration",
      "description": "I built 17 Jenkins deployment pipelines for MSA QA servers and a new commerce business. I also migrated the internal GitLab server.",
      "highlights": [
        "Pipelines split into 13 for MSA QA servers and 4 for the new commerce business's QA and production (AWS CodeDeploy)",
        "Nginx Proxy Manager and Portainer on the QA servers",
        "Internal GitLab server migration and upgrade from version 11 to 18"
      ],
      "keywords": [
        "Jenkins",
        "AWS CodeDeploy",
        "AWS ELB",
        "Nginx Proxy Manager",
        "Portainer",
        "GitLab"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/en/portfolio/biztalk-ci-cd",
      "roles": [
        "Jenkins pipelines",
        "AWS CodeDeploy deployment",
        "ELB redundancy",
        "QA server setup",
        "GitLab migration"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "Server configuration management and deployment scripts",
      "description": "Scripts that manage configuration and deployment for BGMS production servers, and a tool that encrypts sensitive values in config files.",
      "highlights": [
        "Configuration versioning",
        "Configuration encryption and decryption library and scripts",
        "Internal encryption and decryption API server"
      ],
      "keywords": [
        "Shell script",
        "scp"
      ],
      "startDate": "2025-05",
      "endDate": "2025-10",
      "url": "https://geonwoo.kim/en/portfolio/biztalk-ops-automation",
      "roles": [
        "Configuration standards",
        "Patch automation",
        "Deployment scripts",
        "Configuration encryption and decryption tools"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "KakaoTalk sending and template statistics collection server",
      "description": "A server I built to collect sending and template statistics for AlimTalk, FriendTalk and brand messages. It covers over 8 million messages a month.",
      "highlights": [],
      "keywords": [
        "Java 17",
        "Spring Boot 3.5",
        "Spring Batch",
        "MyBatis",
        "MySQL"
      ],
      "startDate": "2025-05",
      "endDate": "2025-06",
      "url": "https://geonwoo.kim/en/portfolio/kakao-stats",
      "roles": [
        "DB and flow design",
        "Batch scheduler",
        "Aggregation API",
        "Re-collection API",
        "Data reprocessing scheduler"
      ],
      "entity": "Biztalk",
      "type": "application"
    },
    {
      "name": "AI-Native commerce run by agents",
      "description": "An AI-Native commerce business where AI agents run operations. It reached 700+ orders within three months.",
      "highlights": [],
      "keywords": [
        "Go",
        "Next.js",
        "PostgreSQL",
        "Hermes Agent"
      ],
      "startDate": "2026-07",
      "url": "https://geonwoo.kim/en/portfolio/deepeet",
      "roles": [
        "Co-founder · Builder",
        "Product design",
        "Agent operating model",
        "Backend",
        "Operations tooling"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Advertising operations",
      "description": "A shared console for deepeet’s Coupang and Toss Shopping ads, collecting Toss ad performance and linking ad spend and orders to profit.",
      "highlights": [
        "Toss Shopping daily ad performance, campaigns, ad groups and ads, and channel change history",
        "Tags for orders that came in through ads, with expected profit using the fee rate applied to each order",
        "Store profit with ad spend included",
        "A ledger and duplicate protection for change jobs, with changes of unknown outcome never resent",
        "An ad spend ledger that does not count ad top-ups as costs",
        "A Coupang ads menu and account structure"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-10",
      "endDate": "2026-10",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-advertising",
      "roles": [
        "Ad integrations",
        "Performance and change history collection",
        "Ad spend ledger",
        "Ad-driven order tagging"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Pricing, promotions and settlement",
      "description": "Ledgers that set sale prices by target margin and keep promotion prices, settlements, refunds and bank transactions apart to reconcile profit.",
      "highlights": [
        "Price updates calculated from supply cost, channel fees and VAT for a target margin, confirmed by official lookups after each update",
        "Separate policies for regular and promotional prices, including Coupang coupons and instant discounts and Toss Shopping limited-time prices",
        "Price freezing that fixes listed sale prices and bounds promotion prices",
        "An append-only settlement ledger for official Coupang and Toss Shopping settlements that deducts only official refunds from order profit, exactly once",
        "Cash ledger that separates bank statement files from supplier deposits by location",
        "Profit reconciliation that shows profit per product and option, plus unallocated costs"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-08",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-pricing-settlement",
      "roles": [
        "Pricing policy",
        "Promotion execution",
        "Settlement and refund ledger",
        "Cash ledger",
        "Profit reconciliation"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Routing and sales status control",
      "description": "Controls that choose a purchase route for each sales option and pause sales when the route disappears, reopening them when it returns.",
      "highlights": [
        "Routing policy with PIN, PREFER and HOLD plus candidate exclusions on top of automatic selection",
        "Matching that identifies the same product by item, variety, weight, count, grade, size and channel option IDs",
        "Fallback from expired preferred routes to the remaining eligible candidates",
        "Automatic sales pause for options that lose their purchase route, and resumption once it recovers",
        "Per-channel relisting thresholds and stock maintenance for options the operator turned on"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "TypeScript",
        "Next.js"
      ],
      "startDate": "2026-07",
      "endDate": "2026-09",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-routing",
      "roles": [
        "Routing policy design",
        "Product identity matching",
        "Automatic sales status control",
        "Stock maintenance"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Agent operations and organizational memory",
      "description": "A lead agent coordinates deepeet’s accounting, development, listings, support and advertising, with durable incident and business records.",
      "highlights": [
        "A machine-readable permission list per role covering allowed work, forbidden actions and result and retry rules",
        "A hook that checks tool calls in advance so the finance role can use only designated lookup scripts and read-only tools",
        "Incident records and alerts that log incidents under fixed IDs per cause and do not count restarts as new incidents",
        "Unattended operation that starts automatically after outages, reboots and automatic updates, and confirms messenger connections",
        "Git documents holding reviewed business facts, with conversation memory and search indexes rebuilt from them",
        "Search that looks in current-state documents first for questions about the present and never presents past decisions as current facts"
      ],
      "keywords": [
        "Hermes Agent",
        "Codex CLI",
        "Python",
        "Shell",
        "Telegram",
        "Discord",
        "launchd",
        "OpenViking",
        "Git"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-agent-ops",
      "roles": [
        "Role and permission design",
        "Unattended operation and recovery",
        "Incident records and alerts",
        "Organizational memory"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Sourcing data",
      "description": "Wholesale fruit prices, search demand and competition data help deepeet recommend what to sell among products suppliers can deliver.",
      "highlights": [
        "Collection that reads official supplier spreadsheets first, then APIs and web pages, then keeps the last successful copy",
        "Supplier price ledger normalized by item, variety, weight, count and grade, keeping the original product names and prices",
        "Market analysis that stores Naver monthly top keywords, daily trends and a keyword ontology separately",
        "Sourcing recommendations shown with evidence on supply, demand, competition and timing",
        "Competitive price watch that extracts representative prices per item and option from popular Toss Shopping products",
        "A Chrome extension that structures and saves only the Coupang search and product pages a person opened",
        "Notice collection that preserves supplier KakaoTalk notices and ties return and exchange limits to supplier products and purchase candidate checks"
      ],
      "keywords": [
        "Python",
        "Playwright",
        "PostgreSQL",
        "MinIO",
        "NumPy",
        "TypeScript",
        "Chrome Extensions"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-sourcing",
      "roles": [
        "Supplier price collection",
        "Market and keyword analysis",
        "Sourcing recommendations",
        "Browser extension",
        "Supplier notice collection"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Development and infrastructure operations",
      "description": "A release process that bundles changes across 19 repositories with vat, checks only what changed, and confirms Proxmox deploys, backups and restores.",
      "highlights": [
        "Records that bundle changes across repositories with participating commits, validation and rollback points",
        "Contracts that declare the integrations between repositories and check them by machine",
        "Validation that selects checks from the base commit, current file hashes and dependencies, and blocks when the impact is unclear",
        "A release process that ends only after code checks, push, deployment, production lookups and business record updates all pass",
        "Jenkins deployment that runs validation, image transfer, migrations, service start and a check of the running commit",
        "Backups that encrypt PostgreSQL dumps and required objects, store them in Cloudflare R2 and confirm them by restoring into an isolated environment",
        "Credentials encrypted with SOPS and kept in 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/en/portfolio/deepeet-infra",
      "roles": [
        "Cross-repository contracts",
        "Impact-based validation",
        "Release process",
        "Server setup",
        "Backup and restore"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Operations console and customer service",
      "description": "deepeet's internal app handles orders, purchasing, pricing, settlement and inquiries across 41 screens, linking customer texts and claims to orders.",
      "highlights": [
        "Three layers of permissions: menu access, admin-only actions and a server relay that passes only allowed paths",
        "Switching between several businesses in one console, with orders, accounts and supplier execution isolated per business",
        "A sensitive-data mode that masks contact details and order numbers on screen, and layouts for narrow mobile screens",
        "A texting gateway that sends and receives customer texts through a self-run handset line and links them to orders",
        "A blacklist that places new orders on hold when customer details match",
        "Claim handling that groups texts, returns, exchanges and refunds into order-level cases and gets AI classification suggestions from masked input"
      ],
      "keywords": [
        "Next.js 16",
        "React 19",
        "TypeScript",
        "Tailwind CSS 4",
        "Vercel",
        "Go",
        "PostgreSQL"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-console",
      "roles": [
        "Operations screen design",
        "Server relay layer",
        "Permissions and business boundaries",
        "Customer texting",
        "Claim cases"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Product listing",
      "description": "deepeet's listing agent drafts product plans and page assets, publishes to Coupang and Toss Shopping after checks, then verifies the listings.",
      "highlights": [
        "A state flow that ties the plan draft, detail page assets, publishing on two channels and official lookup checks to the same listing",
        "Planning based on three different real product photos, with unsuitable photos swapped for other candidates",
        "A precondition that each option has at least two purchase routes before automatic listing",
        "Agent permissions that block bypassing the defined procedure, direct database or channel writes and supplier orders",
        "Manual listing records that keep the operator's chosen photos and listing inputs with hashes"
      ],
      "keywords": [
        "Go",
        "PostgreSQL",
        "MinIO",
        "Hermes Agent",
        "Node.js",
        "Playwright",
        "JSON Schema"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-listing-pipeline",
      "roles": [
        "Listing agent design",
        "Listing state flow",
        "Detail page generation and checks",
        "Channel publishing and verification"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "Order automation",
      "description": "Order automation for deepeet: Coupang and Toss Shopping orders, supplier purchases, payments, tracking registration and delivery confirmation.",
      "highlights": [
        "Order collection that stores sales-channel orders in one shared model without duplicates",
        "Dry-run purchasing that links order items to supplier products and shows candidates and costs without placing orders",
        "Purchase files that follow each supplier's spreadsheet template",
        "Unattended purchasing, payment and tracking collection with a job queue and duplicate-order protection",
        "Tracking through the sales channel's official delivery confirmation",
        "Pause and resume of automatic purchasing and payment per order or option"
      ],
      "keywords": [
        "Go",
        "chi",
        "PostgreSQL",
        "pgx",
        "sqlc",
        "goose",
        "OpenAPI",
        "MinIO",
        "Xvfb"
      ],
      "startDate": "2026-07",
      "endDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/deepeet-order-engine",
      "roles": [
        "Workflow definition and domain design",
        "Sales channel and supplier integrations",
        "Unattended purchasing and recovery",
        "Purchase tracking"
      ],
      "entity": "deepeet",
      "type": "application"
    },
    {
      "name": "vortesso · coffee journal app",
      "description": "A coffee journal for recording taste and beans, built with Flutter and a Spring Boot API.",
      "highlights": [
        "Cup records with hot or iced preparation, tasting notes and memos",
        "Sensory ratings and journal analysis",
        "Journal calendar and recording streaks",
        "Google login"
      ],
      "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/en/portfolio/vortesso",
      "roles": [
        "Planning",
        "Flutter app",
        "Spring Boot API",
        "Home server deployment",
        "CI/CD",
        "Monitoring"
      ],
      "entity": "Personal",
      "type": "application"
    },
    {
      "name": "gloticker · macro indicators Chrome extension",
      "description": "A Chrome extension that shows macroeconomic indicators in one place. More than 300 users across 7+ countries have used it.",
      "highlights": [
        "Live index quotes: Nasdaq, S&P 500, Dow Jones, Russell 2000, 20-year Treasury, VIX, Fear and Greed Index",
        "Stock quotes: the Magnificent 7 (Apple, Nvidia, Microsoft, Amazon, Google, Meta, Tesla)",
        "Crypto quotes: Bitcoin, Ethereum, Solana, dominance",
        "Exchange rates: Dollar Index and the won against the dollar, euro, yuan and yen",
        "SSE live updates over a Redis message queue",
        "Market analysis with the ChatGPT API",
        "30-day daily candle charts",
        "Settings for hidden items, theme and language"
      ],
      "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/en/portfolio/gloticker",
      "roles": [
        "Planning and design",
        "FastAPI collection server",
        "Spring Boot streaming server",
        "Frontend",
        "Home server",
        "CI/CD",
        "Monitoring"
      ],
      "entity": "Personal",
      "type": "application"
    },
    {
      "name": "underthekey · custom keyboard platform",
      "description": "A custom keyboard platform for typing practice with real switch sounds. It reached 500 users in 2 days.",
      "highlights": [
        "13 switch sources based on Cherry-style samples",
        "Input tests per keyboard layout",
        "Imager: sound-stage visualization",
        "Volume and language settings",
        "Public API serving about 5,000 Korean proverbs and about 300 English quotes by language and category",
        "Up to 20 sentences per request"
      ],
      "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/en/portfolio/underthekey",
      "roles": [
        "Planning and design",
        "Switch recording and mixing",
        "Public random sentence API",
        "MSA core module",
        "Frontend",
        "Home server",
        "CI/CD",
        "Monitoring"
      ],
      "entity": "Personal",
      "type": "application"
    },
    {
      "name": "seoulpop · location-based history walks",
      "description": "A location-based walking guide to Seoul’s heritage and historic sites, with servers and CI/CD I set up.",
      "highlights": [
        "Seoul history map",
        "GPS alerts for nearby heritage and historic sites",
        "Camera AR with real-time content rendering",
        "Location and route guidance",
        "History details built from crawled data",
        "Visit stamp collection"
      ],
      "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/en/portfolio/seoulpop",
      "roles": [
        "Team lead",
        "Backend lead",
        "Server and CI/CD",
        "Member API",
        "Heritage and historic site lookup"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "lyricit · real-time game built on song lyrics",
      "description": "A real-time game where players guess songs from lyric keywords in chat. As backend lead, I handled real-time messaging and infrastructure.",
      "highlights": [
        "Live room info updates and chat",
        "Room creation, game preparation and start, game mode settings",
        "First correct answer in chat wins the round",
        "Lyrics data search"
      ],
      "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/en/portfolio/lyricit",
      "roles": [
        "Backend lead",
        "CI/CD and infrastructure owner",
        "Member API",
        "WebSocket communication",
        "Chat",
        "Room creation and game join API",
        "Game flow refactoring",
        "Game timer scheduling"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "jansorry · holiday nagging receipts",
      "description": "A service turning holiday nagging into receipts and statistics. It won first place among SSAFY common projects and the Project Excellence Award.",
      "highlights": [
        "Feed of nagging and responses",
        "Likes and follows",
        "Receipt printing and sharing",
        "Account page",
        "Statistics visualization",
        "Deployment to EC2 through GitLab Runner and Docker Hub",
        "Next.js, Spring Boot, MySQL and Redis containers behind Nginx"
      ],
      "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/en/portfolio/jansorry",
      "roles": [
        "Team lead",
        "Backend lead",
        "Infrastructure and tech owner",
        "Nagging, like, follow and receipt API",
        "Batch"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "newjibs · real estate investment simulator",
      "description": "A real estate investment simulator where users invest a virtual budget and check their returns two years later. I built the backend and servers alone.",
      "highlights": [
        "Kakao Map cluster rendering by latitude and longitude",
        "Real estate information lookup",
        "Ranking",
        "Notices and real estate news",
        "JWT-based member authentication",
        "Vue.js frontend deployed on Netlify",
        "Spring Boot, MariaDB and Redis containers shipped to Cloudtype and EC2 by GitHub Actions"
      ],
      "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/en/portfolio/newjibs",
      "roles": [
        "Team lead",
        "Backend (solo)",
        "Server and CI/CD",
        "Simulated investing, ranking, members and notices",
        "News crawler scheduling"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "triplet · travel expense diary",
      "description": "A travel expense diary that records foreign-currency cash and card spending in won. We built it at the Shinhan Bank hackathon.",
      "highlights": [
        "Trip creation with budget and cash on hand",
        "Currency exchange requests",
        "Calendar-style expense diary",
        "Image upload"
      ],
      "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/en/portfolio/triplet",
      "roles": [
        "Backend API (members, trips, daily, image upload)",
        "Server and CI/CD"
      ],
      "entity": "SSAFY",
      "type": "application"
    },
    {
      "name": "herdr-cockpit · Herdr layouts and mods for watching orch",
      "description": "Herdr layouts and mods that show orch's main session, worker agent sessions and remaining usage allowances by provider on one screen.",
      "highlights": [
        "Top bar with remaining usage allowances for Codex, Claude and Gemini, reset times, CPU and RAM",
        "Machine, space, tab and pane tree, with an agent list that counts workers per main session",
        "A grid of this computer's main-session terminals that takes input directly (hub)",
        "Routing spoken or typed instructions to the right main session, with Korean voice input (nexus)",
        "Hiding and restoring tabs of disconnected remote machines",
        "A Go helper on each machine that collects usage and pane data"
      ],
      "keywords": [
        "Go",
        "JavaScript",
        "Swift",
        "Herdr.app",
        "gopsutil"
      ],
      "startDate": "2026-11",
      "url": "https://geonwoo.kim/en/portfolio/herdr-cockpit",
      "roles": [
        "Design",
        "Herdr mod development",
        "Go helper"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "wiki-island · vendor-neutral AI memory",
      "description": "An open-source local memory that lets many AI tools share one Markdown folder instead of each keeping its own.",
      "highlights": [
        "Search, read, write, edit, archive and restore through 15 MCP tools",
        "A single wi setup run connects 10 AI apps, including Claude Code, Codex and Cursor",
        "SQLite FTS5 search that finds two-character Korean words without spaces",
        "Git history with restore to earlier versions",
        "Works alongside Obsidian folders and imports PDF, Word, PowerPoint, CSV and images",
        "A background service that picks up edits, repairs the index and tidies notes"
      ],
      "keywords": [
        "Rust",
        "SQLite FTS5",
        "MCP",
        "Tokio",
        "Git",
        "Markdown"
      ],
      "startDate": "2026-11",
      "url": "https://geonwoo.kim/en/portfolio/wiki-island",
      "roles": [
        "Design",
        "Rust development"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "orch · multi-agent orchestrator",
      "description": "A multi-agent runner where a main session judges, worker agents execute, and a model from a different family reviews each result.",
      "highlights": [
        "Work assignment across 7 model keys from the Codex, Claude and Gemini families",
        "Contract files with scope and result format, plus result files and status records",
        "One-off lookups and edits without opening a pane, and test runs that return only a failure summary",
        "Independent review by a model family other than the author's",
        "Sequential and parallel runs by dependency, resumable after interruption",
        "Herdr pane layout and cleanup that keeps the user's focus where it is"
      ],
      "keywords": [
        "Go",
        "YAML",
        "Herdr",
        "Claude Code",
        "Codex",
        "Antigravity"
      ],
      "startDate": "2026-09",
      "url": "https://geonwoo.kim/en/portfolio/orch",
      "roles": [
        "Design",
        "Go CLI development"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "hermes-agent · open-source contribution to Hermes Agent",
      "description": "A Hermes Agent contribution that leaves macOS protected folders out of broad file searches, so privacy prompts stop in unattended runs.",
      "highlights": [
        "Seven protected folders such as Desktop, Documents and Downloads skipped when searching home or /Users",
        "The same exclusion for file-name and content search across ripgrep, grep and find",
        "Searches that name a protected folder directly still run",
        "A warning that lists skipped folders and how to search them directly",
        "No change outside macOS"
      ],
      "keywords": [
        "Python",
        "ripgrep",
        "macOS"
      ],
      "startDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/hermes-agent",
      "roles": [
        "Bug fix",
        "Tests"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "vat · multi-repository workspace CLI",
      "description": "A workspace CLI for developing many repositories from one parent folder. It records changes and decisions across them in one place.",
      "highlights": [
        "Repository list and per-repository edit boundaries declared in one vat.yaml",
        "Batch sync that leaves local work alone and only fast-forwards when safe",
        "Return points, check results and the commits verified together across repositories",
        "Decision records with source commit and check date, and stale records taken out of citation",
        "Claude Code and Codex agent instructions generated from one role definition, with drift checks",
        "Configuration and environment checks with lint and doctor"
      ],
      "keywords": [
        "Go",
        "YAML",
        "Git"
      ],
      "startDate": "2026-08",
      "url": "https://geonwoo.kim/en/portfolio/vat",
      "roles": [
        "Design",
        "Go CLI development"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "offon · open-source Slack app for attendance and leave",
      "description": "An open-source Slack and web app for attendance and leave, split off from Lukuku's company-wide work management system.",
      "highlights": [
        "Shifts past midnight, several sessions a day, and automatic work, break and overtime totals",
        "60-minute meal breaks that set their end time at the start and send a return reminder",
        "Full-day and half-day leave excluding weekends and holidays, with remaining days tracked",
        "Attendance correction requests from the calendar, with times recalculated on approval",
        "One admin inbox for leave and correction approvals",
        "Slack one-time-code login, 5 slash commands and reminders for missed clock-ins and clock-outs"
      ],
      "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/en/portfolio/offon-oss",
      "roles": [
        "Design",
        "Full-stack development"
      ],
      "entity": "Tools and open source",
      "type": "application"
    },
    {
      "name": "sshift · SSH CLI with jump-server connections and password storage",
      "description": "An SSH CLI that combines jump-server connections and encrypted password storage. It cut jump-server access to 50+ servers down to one command.",
      "highlights": [
        "Interactive server picker, direct connection by ID or name, and remote commands",
        "Add, edit, delete and list servers and jump relations",
        "Password and key authentication combinations for jump and target servers",
        "Encrypted password storage with an optional custom key",
        "JSON export and import of servers and jump relations",
        "Install through Homebrew, an install script or release binaries"
      ],
      "keywords": [
        "Go",
        "OpenSSH",
        "sshpass",
        "Homebrew"
      ],
      "startDate": "2025-07",
      "endDate": "2025-08",
      "url": "https://geonwoo.kim/en/portfolio/sshift",
      "roles": [
        "Design",
        "Go CLI development",
        "Homebrew distribution"
      ],
      "entity": "Tools and open source",
      "type": "application"
    }
  ],
  "meta": {
    "canonical": "https://geonwoo.kim/en/resume.json",
    "version": "v1.0.0",
    "lastModified": "2026-11-15T21:09:07+09:00",
    "availability": "Open to good opportunities"
  }
}
