한국어English

<Kihwan Kim / >

AI Product Engineer

AI Product Engineer with 6+ years of experience building the interfaces of AI products in React and TypeScript: state design for streaming LLM chat, browser-agent automation with verifiable results, and rendering performance and server-driven UI at scale. On my current team I am the frontend lead for AI chat and the de facto part lead, setting technical direction, reviewing code, and mentoring.

From HCI and Visual Analytics research to explainable-AutoML interfaces and contributions to LLM observability tooling, I keep working on one problem: making what AI systems produce understandable and verifiable, so people can trust and act on it.

Resume PDFhttps://kihwan.kimjuljin1875@gmail.comLinkedInGitHub

Selected Work

Recoverable AI chat

Separated streamed responses from saved history; handled regeneration, retries, and stale refetches. The product is preparing for launch.

State design (Korean)

Experience

Levvels
Frontend Engineer
Jul 2025 – Present

Acted as part lead of a three-person frontend team regardless of title, setting technical direction, reviewing code, and mentoring. Frontend lead for an AI character chat product, designing its conversation UI and streaming state ahead of launch; also built Vuddy commerce and browser-agent automation for CS/QA. Planned and led a company-wide internal talk, AI Agent Study 101, to help every team put AI to real use.

React
Next.js
TypeScript
TanStack Query
Zustand
SSE
Playwright
Sentry
Mixpanel
ChannelTalk
PageAgent
Generative UI
AI Character Chat Service
May 2026 – Present
Led the frontend of an AI character chat product preparing to launch in Korean, Japanese, and English. Owned chat, story detail, and support inquiries, and built the Admin for authoring and reviewing character content.
  • Designed the conversation runtime as an eight-state machine (sending, persisted, streaming, completed, send failed, stream failed, blocked, and idle); TanStack Query holds server state, Zustand holds runtime state, and token deltas never enter the Query cache
  • Kept each turn provisional until the DONE event; treated five failure classes (prohibited content, network, engine timeout, internal error, safety filter) and streams closed without DONE as failures, rolling back provisional messages while preserving the user's draft
  • Blocked overlapping sends and regenerations with single-flight, cancelled stale refetches with a request sequence, and kept server snapshots from overwriting an active stream; verified the runtime hook and reducer with 55 tests
  • Derived 61 QA scenarios from 25 Figma policy nodes and automated 10 of them as Playwright E2E tests named by scenario ID
  • Wrote 10 frontend specs and 23 ADRs documenting design decisions, and found and catalogued API contract gaps while generating the SDK from Swagger, including 11 operations with untyped responses
  • Built authoring and review tools for stories, lorebooks, and search keywords
PageAgent-based Internal Operations Automation
Mar 2026 – Present
CS/QA checks needed developers, planners, and operators to confirm asynchronously: ten minutes at best, half a day often, and after someone's vacation at worst. A browser agent now finishes them in about a minute. Used by three operators, two QA engineers, and three planners.
  • Ran Vuddy's 80-case sanity checklist and 19 route-level machine specs through the agent; deterministic checks on data-qa selectors decide each verdict, and a person confirms the final PASS/FAIL
  • Automated how operators investigate Google Play in-app payments that were charged but left as failed because the app never reported completion to the server
  • Gathered account, payment, and mapping data from several internal tools into one comparison view, separating LLM summaries from execution evidence so operators can re-check every source
  • Forked Alibaba PageAgent into a Chrome extension deployed through Chrome Enterprise policy; the agent pauses and asks when a person must decide, such as which login provider or account to use
Jul 2025 – Present
Built and maintained Vuddy’s customer web, Creator Studio, and internal Admin. Worked across the commerce flow from class discovery and checkout to orders, cancellations, returns, and exchanges.
  • Built a generative-UI AI dashboard for the Admin: natural-language requests become query plans validated by Zod schemas, and the values the LLM may choose are limited to an allowlist enum derived from API types instead of a blocklist
  • Built class discovery, video, and checkout flows along with Studio order management and Admin tools for products, students, and passes
  • Updated the cart, identity verification, secondary-creator onboarding, and cancellation, return, and exchange flows as policies and APIs changed
  • Fixed HLS home-carousel and mobile WebView issues involving safe areas, scrolling, and back navigation
React
Next.js
TypeScript
TanStack Query
Zustand
SSE
Playwright
Sentry
Mixpanel
ChannelTalk
PageAgent
Generative UI
RIDI Corp.
Frontend Engineer
May 2022 – Jul 2025

Member of an eight-person frontend team. Took part in the team's server-driven UI and incremental migration work, which decoupled operational UI changes and A/B tests from release cycles. Interviewed engineering candidates.

Next.js
React
TypeScript
Emotion
Jest
PHP
Twig
Sentry
Virtualization
May 2022 – Jul 2025
Helped move business-critical pages such as the genre home and title home to React incrementally with server-driven UI and islands. UI changes and A/B tests that took about a week because they needed a release now ship the same day through configuration.
  • Separated UI composition from business data with GraphQL Grid/Cell interfaces and reconstructed the tree on the client
  • Extended schemas while preserving compatibility with existing clients; reused the structure across landing, search, and detail pages
  • Introduced React islands into PHP/Twig pages to migrate incrementally without a full rewrite
  • Cached UI responses with Redis and reduced the coupling between operational UI experiments and frontend releases
  • Extended the approach to marketing landing, search, and title-detail pages, and used a middleware bottleneck found during partial migration to make the case for full migration
Large-scale List Rendering Optimization
May 2022 – Jul 2025
A screen designed for 250 titles had to handle 6,000+, and its initial render took over 10 seconds. Reworked it with virtualization, dynamic heights, and scroll restoration so it renders without perceptible delay.
  • Separated network-transfer costs from CPU and DOM-rendering costs and virtualized the list to render only the required range; confirmed gzip could cut large JSON payloads to about one-eighth
  • Handled dynamic heights and scroll restoration with window-based scrolling
  • Used SVG-background skeletons to separate loading presentation from content rendering
User Environment Stabilization
May 2022 – Jul 2025
Reduced instability caused by differences in browsers, devices, and extensions, and improved operational response.
  • Tracked real-user errors with Sentry
  • Handled translation-plugin conflicts
  • Improved E-ink rendering and UX issues
Next.js
React
TypeScript
Emotion
Jest
PHP
Twig
Sentry
Virtualization
TmaxEnterprise
Researcher
Feb 2020 – May 2022

Currently TmaxBizAI

Formerly TmaxData

On a six-person team, designed product flows, visualizations, and interactions that let non-experts use AI and analytics, and built UIs that show predictions together with their reasons. Started reviewing the team's code here.

React
TypeScript
Material-UI
Sass
Python
jQuery
Legacy System React Migration
Jan 2021 – May 2022
Moved a tightly coupled internal UI library toward React to create a more consistent and extensible foundation for platform interfaces.
  • Modularized legacy UI code and improved interface structure
  • Developed reusable components to replace bespoke legacy widgets
AutoML Platform
Feb 2020 – May 2022
Designed and implemented codeless studio flows and explainable AI visualizations so users without model-development experience could explore and operate AI capabilities.
  • Implemented a codeless studio for non-expert model builders
  • Visualized global feature importance, local prediction explanations, and What-if flows, and shipped a prediction-explanation UI showing the prediction, rule path, and feature contributions together
  • Researched interfaces between AutoML engines and model developers
  • Clarified requirements for an early-stage platform
React
TypeScript
Material-UI
Sass
Python
jQuery

Open Source

Author
May 2026 – Present

Building a social simulation runtime in Elixir for persistent AI characters that remember, form relationships, and interact with each other and with users. Deterministic, testable rules own state, memory, and relationship changes; the LLM is only an expression layer. Released v0.1.0 alpha.

Elixir
OTP
LLM
Design
  • The runtime owns character, relationship, memory, and scheduled-behavior state so the LLM never improvises facts; events flow through rule evaluation and state updates into structured outputs
  • LLM calls happen only when a host app renders an output into language. State still advances when a call fails, and an LLM response can change the world only by re-entering as a new event that passes the rules again
  • Kept the deterministic core process-free so it is testable without a supervision tree, then added a thin OTP layer: a GenServer runtime server and a time_tick scheduler. Includes JSON persistence and branched and interactive CLI demos
Elixir
OTP
LLM
Contributor
Jul 2026 – Present

Contributing to an open-source MMORPG where AI agents and humans play through the same protocol (Rust · Svelte · Three.js · WebAssembly). Game development was new to me; I started with client tests and now work mostly on the Rust server, and all ten PRs have been merged.

TypeScript
Svelte
Rust
WebAssembly
Vitest
Server
  • Bounded terrain tile caches that only ever grew, sweeping by generation under a capacity fuse while leaving the read path lock-free (#68)
  • Built account-level ban and unban for operators, cutting sessions by account rather than character so an alt cannot walk back in, and closing the window where a connection past the check still registers (#95)
  • Refused trade with a sleeping merchant: her sleep schedule is agent-side data the server never sees, so the bed-occupancy interaction it does see stands in for sleep. The check sits in the one validator every trade path already passes through, which also stops a shop window opened before bedtime from charging the buyer (#103)
  • Added a night merchant who opens a stall after dark, since the town's only shop sleeps and nothing was open at night. A merchant is defined across two files, so a test now catches the half-added case that would leave a shop no agent can run (#111)
More contributions, analysis & reviews
Client
  • Agreed on constraints and v1 scope with the maintainer, building a HUD minimap from existing terrain tiles and rotation conventions without server changes. Excluded party markers that required polling and fixed a missing store update found during review (#11, #77)
  • Filled test gaps around fishing state transitions, bilinear water-surface sampling, and click-intent routing. An out-of-range water click now walks toward the target, with the server constant exposed through WebAssembly so both sides read one value, and scheduled sounds are cancelled when the session ends (#56, #64, #65)
Docs & onboarding
  • Documented the terrain bake step in the dev setup after hitting the black-world onboarding gap myself (#78)
  • Wrote a CONTRIBUTING guide gathering what new contributors learned the hard way — the checks CI runs, which lived only in the workflow file, and the pre-start checks that avoid duplicate work — linked from all three README translations (#118)
TypeScript
Svelte
Rust
WebAssembly
Vitest
Contributor
Aug 2026 – Present

Contributing to vite-plus, the toolchain from VoidZero (the team behind Vite and Vitest), a Rust · TypeScript hybrid. Started with a merged shell-integration fix on the Rust side; now working on the vite-task task runner's cache on the TypeScript side, alongside issue analysis and PR review across both repos.

Rust
TypeScript
Shell
Shell integrations
  • Generated shell wrappers didn't recognize a vp env use that followed the global -C <dir> flag (-C <dir> · -C<dir> · -C=<dir>), so the environment change never applied to the current shell session; fixed in setup.rs. Also made vpr completions preserve the working-directory option across zsh, Fish, Nushell, and PowerShell, and pinned the four shells' integration templates with snapshot tests. Review rounds added set -u/NO_UNSET hardening of the generated scripts and a PowerShell type-safety fix, each covered by executable regression tests (#2508, issue #2056).
More contributions, analysis & reviews
Task runner cache (vite-task)
  • Tracked bulk env queries were validated against the full unfiltered environment, so per-run CI variables such as ACTIONS_ORCHESTRATION_ID invalidated the cache on every GitHub Actions run. Extended the existing untrackedEnv contract to bulk queries — filtered when recording and validating, served unchanged — with unit and e2e snapshot coverage (vite-task#693, in review, maintainer-filed issue vite-task#505).
Analysis & review
  • Root-caused the task runner not exposing npm lifecycle env to package.json scripts and showed why a vite-plus-side fix can't reach cache-enabled tasks (vite-task#692). Reviews on vite-plus surfaced the same env-fingerprint filtering silently stripping the proposed lifecycle-env fix (#2385).
  • Reviewed the dynamic Oxlint/Oxfmt config migration PR with three empirically-verified findings the author adopted, then co-authored the PR's PTY snapshot test for its new hard-error path and ran the full 154-case migration suite as its final verification (#2483, in review). Triage along the way produced a PTY-suite flakiness report backed by a five-run reproduction matrix (#2565).
Rust
TypeScript
Shell
Contributor
Sep 2026 – Present

Started contributing to Langfuse, an LLM observability and evaluation platform, through its React and TypeScript frontend. Reproduced a Korean IME bug in the Tracing search bar and submitted a fix, currently awaiting review.

React
TypeScript
Vitest
Playwright
Korean IME input in Tracing search
  • Fixed duplicated text and broken deletion caused by browser composition mutations diverging from React’s contenteditable token tree. Reconciled the DOM after composition while preserving the caret (#17628, awaiting review).
  • Added five regression cases and verified native Chromium composition, deletion, full-selection replacement, and filter preservation in the local app. Included before/after screenshots and reproduction steps in the PR.
React
TypeScript
Vitest
Playwright

Education

Ulsan National Institute of Science and Technology (UNIST)
Master of Science in Computer Science
Mar 2018 – Feb 2020
Bachelor of Science in Technology Management (Multi-disciplinary major in Computer Science)
Mar 2013 – Feb 2018
Jan 2019 – Feb 2020
Studied how recommender systems should communicate algorithmic exploration so users can understand the system and provide higher-quality feedback.
  • Measured the impact of transparency on data quality in the explore-exploit problem of recommendation systems
  • Analyzed how disclosure patterns for exploratory items affect user perception and data quality
  • Proposed a metric to evaluate the value of user logs from an AI perspective
  • Implemented a web-based movie recommendation system for experimental environments
  • Designed data-driven UI experiments to observe interaction between people and recommendation algorithms
Python
Flask
Surprise
jQuery
Feb 2019 – Feb 2020
Modeled decision-making and behavior patterns in complex web environments to better understand interaction between people and systems.
  • Estimated user reward functions from behavior logs through Inverse Reinforcement Learning
  • Dealt with various web environments such as data analysis tools like Tableau, history education tools based on Wikipedia documents, and card games
  • Utilized data analysis tools such as Tableau and implemented a history education tool based on Wikipedia documents
Python
TensorFlow
Keras
scikit-learn

Publications

An Empirical Analysis on Transparent Algorithmic Exploration in Recommender Systems

Kihwan Kim

A Computing Research Repository (CoRR), 2108.00151, 2021

  • Investigated how to deliver random items to capture user preferences in recommendation systems
  • Implemented a web-based movie recommendation system used as an experimental environment
  • Proposed a metric to evaluate the value of user logs from an AI perspective
  • Measured the impact of transparency on data quality in the explore-exploit problem of recommendation systems
  • Recruited 94 participants from Amazon MTurk
  • Collected real usage log data and survey responses by having participants use a Netflix-like experimental environment

ST-GRAT: A Novel Spatio-temporal Graph Attention Networks for Accurately Forecasting Dynamically Changing Road Speed

Cheonbok Park, Chunggi Lee, Hyojin Bahng, Yunwon Tae, Kihwan Kim, Seungmin Jin, Sungahn Ko, Jaegul Choo

ACM International Conference on Information and Knowledge Management (CIKM), 2020

  • Preprocessed vehicle detection sensor data installed on the road surface by Korea Expressway Corporation
  • Categorized cases where attention worked effectively by patterns

Modeling Exploration/Exploitation Decisions through Mobile Sensing for Understanding Mechanisms of Addiction

Kihwan Kim, Sanghoon Kim, Chunggi Lee, Sungahn Ko

ACM International Conference on Mobile Systems, Applications, and Services (MobiSys), 2019

  • Proposed a system to detect addiction disorders from smartphone usage logs through Inverse Reinforcement Learning

An Empirical Study on the Relationship Between the Number of Coordinated Views and Visual Analysis

Juyoung Oh, Chunggi Lee, Hwiyeon Kim, Kihwan Kim, Osang Kwon, Eric D. Ragan, Bum Chul Kwon, Sungahn Ko

A Computing Research Repository (CoRR), 2204.09524, 2018

  • Conducted experiments to see how the number of visualization charts affects data visual analysis
  • Had 44 participants use a visual analysis tool and solve data analysis tasks
  • Categorized users' analysis patterns through think-aloud protocol, recorded screens, and log data
  • Observed a positive correlation between the number of charts and task scores

A Survey of Visualization Techniques for Interpreting Deep Learning

Jaesung Lee, Kihwan Kim, Chunggi Lee, Sungahn Ko

Noise & Vibration, Vol.27 No.6, 2017.11

  • Summarized and investigated visualization techniques for interpreting deep learning models