본문으로 건너뛰기
Younghoon Kim
  • Home
  • Blog
  • About

Younghoon KimResearch notes

I document what I learn while solving product problems with React and TypeScript.

Navigation

HomeBlogAbout

Elsewhere

GitHubLinkedInEmail

© 2026 Younghoon Kim. All rights reserved.

Built with Next.js

What I learn while building

Notes on building software, solving problems, and learning new tools.

/
Topics and year

Reading paths

Topic

34 results

  • Which render does useEffectEvent read its latest values from?

    useEffectEvent reads the latest values while keeping a subscription alive. A reproduction and the React source show why it reads a different value from a ref during an uncommitted render.

    Oct 27, 202611 min readReactuseEffectuseEffectEvent

  • I Told AI "Just Build It" Instead of "Give Me Ideas"

    Asking AI for creative ideas kept falling short across models. When I gave it three months of my logs and asked it to build something on its own, I got a tool I use every day. The difference was giving it evidence first and judging the result.

    Oct 3, 202612 min readaideveloperreflection

  • If AI Can Do It All, What Can I Add?

    If AI writes the code, what is my role? Looking back at development work and a one-off demo helped me explore what I need to understand and what I can contribute.

    Sep 16, 202616 min readaideveloperreflection

  • How I turned bug reports into reproducible links

    A case study of replacing written account and screen directions with URL state in a QA workflow, including why I ruled out localStorage, how I split responsibilities with TanStack Query, and what I tested.

    Aug 31, 20267 min readfrontendurl-state

  • Does a global AGENTS.md really eat into the project-doc budget?

    I understood project_doc_max_bytes to apply to the combined size of global and project documents, and wrote the same thing in my wiki. Measuring the model-visible prompt with codex debug prompt-input produced a different result. This post traces how I varied the limit, identified its scope, and retested the finding after the files changed.

    Aug 15, 20269 min readaicodexagents-md

  • Why I separated data processing and UI responsibilities from React Query custom hooks

    Server response mapping, error handling, cache synchronization, and UI feedback had become mixed inside custom hooks. This post explains how I reassigned them to React-independent data functions, query and mutation options, and components.

    Jul 21, 202611 min readReact Queryfrontend

  • I upgraded DOMPurify, so why did I end up fixing happy-dom?

    After deleting pnpm-lock.yaml and reinstalling, caret-range packages all jumped at once and sanitize tests broke. I isolated them one by one and pinned DOMPurify as the culprit, but the same version was fine on jsdom. Here is how I separated the version from the environment and traced it down to the root cause.

    Jul 14, 202617 min readTestingdompurifyhappy-dom

  • Why replacing window.confirm with a React Dialog is not just a UI swap

    What broke when I replaced blocking window.confirm with a React Dialog. I learned to separate confirmation, cancellation, and execution into request/cancel/confirm flows.

    Jul 9, 202611 min readReactfrontend

  • Why you should not start coding when you get a feature request

    How do you handle vague requests like "make it faster" or "make it prettier"?

    May 26, 202610 min readfrontendspec

  • Why should good tests make failures believable?

    When tests in React Router or TanStack Query fail, I usually inspect my code first. When tests I wrote fail, I sometimes end up re-checking the test itself as well. That difference made me rethink the boundary between unit, integration, browser, and e2e tests.

    Mar 27, 202610 min readTestingVitestplaywright

  • useRef holds values not needed for rendering, so why should you not read it during render?

    Two sentences in the React docs looked contradictory at first. useRef stores values not needed for rendering, yet React says not to read ref.current during render. Tracing the source code shows these are about two different dimensions of rendering: trigger vs consistency, all the way to tearing.

    Mar 1, 20266 min readReactuseRefrendering

  • Why is Next.js source code so complex? -- The cost of keeping Pages Router

    Tracing just next/navigation through the source reveals where the complexity comes from: re-export entry points, context adapters, and .react-server.ts splits.

    Feb 21, 20267 min readNext.jsSource reading

  • Minor optimizations found in React source code

    Small React source-level optimizations explained: Object.freeze in DEV, Hidden Class effects, branch ordering, and Smi/Double choices.

    Feb 13, 202616 min readReact

  • ESM is asynchronous, so how is static analysis possible?

    ESM can be asynchronous and still statically analyzable. This post explains why through the Construction, Instantiation, and Evaluation phases.

    Feb 10, 20268 min readjavascriptesmmodule-system

  • Why Map and Set are known to have better performance than Array

    Why Map and Set often outperform Array: hash-based lookup complexity, insertion behavior, and traversal trade-offs including cache locality.

    Feb 1, 20265 min readjavascriptdata-structurePerformance

  • Measure and improve the performance of the AI ​​tool you created

    Rather than judging the quality of AI tools solely by feel, we have a record of quantifying the extent of improvement through datasets and automatic scoring.

    Jan 23, 20264 min readaiprompt-smith