I'm Jacky,
and these are my frontend notes.

Breaking complex frontend problems into code we can maintain.

Problems from building with React, Next.js, and TypeScript, along with the trade-offs and fixes I found along the way.

Read all posts

Recent posts

Implementation problems, solutions, and the choices behind them.

All posts

How I approach the work

Give each component a clear job

When UI, data fetching, and effects start getting tangled, I sort out their responsibilities before deciding where to split the component.

Know where state belongs

I separate server data from UI state. TanStack Query handles fetching and caching; Zustand handles UI state that needs to be shared.

Automate the repeatable checks

Types, lint, and tests run in CI so they can be repeated with every change. That leaves review time for design and trade-offs.

Problems I have worked through

A few topics from implementation work that I keep writing about.

  • State refactoring — Separating fetching, caching, and UI state in existing projects to make data flow easier to trace.
  • Tests and CI — Using Vitest, Playwright, and CI to cover workflows that manual checks tend to miss.
  • Content websites — Working through metadata, sitemaps, images, and cache updates while balancing SEO and loading speed.
  • Permission boundaries — Keeping sensitive logic on the server with CSP, Route Handler authorization, and a data access layer.

Tools I use

Mostly React, Next.js, and TypeScript. The rest depends on the problem.

  • React
  • Next.js
  • TypeScript
  • TanStack Query
  • Zustand
  • Vitest
  • Playwright

Say hello

Working through frontend architecture, testing, or a content website? Feel free to get in touch.