---
title: "@asmyshlyaev177 - Personal blog"
description: "Technical articles on React, Next.js, TypeScript, testing, and frontend architecture by Aleksandr Smyshliaev."
canonical: "https://asmyshlyaev177.dev/blog"
image: "https://asmyshlyaev177.dev/og_image.png"
---

Writing

# Blog

Notes on React, Next.js, TypeScript, testing, and building frontends that hold up in production.

## Browse by tag

[Open source 4](https://asmyshlyaev177.dev/blog/tags/open-source.md) [Next.js 3](https://asmyshlyaev177.dev/blog/tags/next-js.md) [Playwright 3](https://asmyshlyaev177.dev/blog/tags/playwright.md) [React 3](https://asmyshlyaev177.dev/blog/tags/react.md) [TypeScript 3](https://asmyshlyaev177.dev/blog/tags/typescript.md) [AI 2](https://asmyshlyaev177.dev/blog/tags/ai.md) [Side project 2](https://asmyshlyaev177.dev/blog/tags/side-project.md) [State management 2](https://asmyshlyaev177.dev/blog/tags/state-management.md) [Testing 2](https://asmyshlyaev177.dev/blog/tags/testing.md)

-   ## [I counted every Bun bug before and after the Rust rewrite](https://asmyshlyaev177.dev/blog/bun-rust-rewrite-bug-count.md)
    
    August 10, 2026
    
    Bun ported a million lines of Zig to Rust in 11 days with ~50 Claude agents. I pulled 2,981 issues from the tracker to see what actually changed. The fix rate didn't budge, stable hasn't shipped since, and both facts point at the same uncomfortable thing about rigid languages.
    
    -   Rust
    -   Bun
    -   [AI](https://asmyshlyaev177.dev/blog/tags/ai.md)
    -   Opinion
    -   Data
    
    !    
-   ## [Your SPA probably leaks memory. Your Playwright suite can catch it](https://asmyshlyaev177.dev/blog/catch-spa-memory-leaks-playwright-soak.md)
    
    August 6, 2026
    
    playwright-soak repeats a user flow a few hundred times inside a Playwright test, forces GC, and fails the build if DOM nodes, listeners or heap keep piling up. A smoke alarm for the slow leaks that make a day-long tab drag.
    
    -   [Playwright](https://asmyshlyaev177.dev/blog/tags/playwright.md)
    -   [Testing](https://asmyshlyaev177.dev/blog/tags/testing.md)
    -   Memory leaks
    -   Performance
    -   [Open source](https://asmyshlyaev177.dev/blog/tags/open-source.md)
    
    !    
-   ## [See where any X account posts from, without leaving your feed](https://asmyshlyaev177.dev/blog/x-profile-location-extension.md)
    
    July 28, 2026
    
    Why I built X Profile Location: a browser extension that flags an X account's country inline, using X's own API through your existing session. Most of the design fell out of a 50-requests-per-15-minutes rate limit.
    
    -   Browser extension
    -   [TypeScript](https://asmyshlyaev177.dev/blog/tags/typescript.md)
    -   [Side project](https://asmyshlyaev177.dev/blog/tags/side-project.md)
    -   [Playwright](https://asmyshlyaev177.dev/blog/tags/playwright.md)
    -   SQLite
    
-   ## [Why I built llm-queue: one local model, one queue](https://asmyshlyaev177.dev/blog/why-i-built-llm-queue.md)
    
    June 28, 2026
    
    One local LLM (Ollama) behind an OpenAI-compatible HTTP API, so every process shares one serialized queue instead of thrashing the model. On my 6 GB GPU that made everything roughly four times faster.
    
    -   LLM
    -   Ollama
    -   [Open source](https://asmyshlyaev177.dev/blog/tags/open-source.md)
    -   [Side project](https://asmyshlyaev177.dev/blog/tags/side-project.md)
    -   [TypeScript](https://asmyshlyaev177.dev/blog/tags/typescript.md)
    
-   ## [Testing Next.js SSR with Playwright: record real responses instead of writing mocks](https://asmyshlyaev177.dev/blog/testing-nextjs-ssr-playwright-record-replay.md)
    
    June 17, 2026
    
    Playwright can mock browser requests, but not the fetches Next.js makes during SSR. How I record real API responses once and replay them on CI. It's the VCR pattern Ruby nailed years ago, rebuilt for SSR.
    
    -   [Playwright](https://asmyshlyaev177.dev/blog/tags/playwright.md)
    -   [Testing](https://asmyshlyaev177.dev/blog/tags/testing.md)
    -   [Next.js](https://asmyshlyaev177.dev/blog/tags/next-js.md)
    -   [Open source](https://asmyshlyaev177.dev/blog/tags/open-source.md)
    -   VCR
    -   Polly.js
    
-   ## [How I built state-in-url: turning the URL bar into real React state](https://asmyshlyaev177.dev/blog/how-i-built-state-in-url.md)
    
    April 13, 2026
    
    The story of building state-in-url: turning the browser URL bar into real, type-safe React state — the design decisions and trade-offs, from first prototype through the testing pain to launch.
    
    -   [React](https://asmyshlyaev177.dev/blog/tags/react.md)
    -   [State management](https://asmyshlyaev177.dev/blog/tags/state-management.md)
    -   [Open source](https://asmyshlyaev177.dev/blog/tags/open-source.md)
    
-   ## [Breakpoint variables with pure CSS](https://asmyshlyaev177.dev/blog/breakpoints-variables-with-pure-css.md)
    
    May 1, 2025
    
    Define and use responsive breakpoints as variables in pure CSS — no preprocessor or JS — for cleaner, DRY media queries. Works in plain stylesheets and slots straight into a Next.js app.
    
    -   CSS
    -   [Next.js](https://asmyshlyaev177.dev/blog/tags/next-js.md)
    
-   ## [The first really useful AI tool: AI code review](https://asmyshlyaev177.dev/blog/first-really-useful-ai-tool-ai-code-review.md)
    
    November 14, 2024
    
    My experience with CodeRabbit, an AI code review tool that actually adds value to pull requests — what it catches and where it helps, with real examples from my pull requests, and what it costs.
    
    -   [AI](https://asmyshlyaev177.dev/blog/tags/ai.md)
    -   Code review
    
-   ## [Automating npm package releases with CI/CD](https://asmyshlyaev177.dev/blog/automating-npm-package-release-with-cicd.md)
    
    September 13, 2024
    
    Automating npm package releases with GitHub Actions: versioning, changelogs, and publishing to npm from CI without manual steps. Includes the full workflow file, the tooling choices, and the trade-offs.
    
    -   CI/CD
    -   GitHub Actions
    -   npm
    
-   ## [Use cases for the useInsertionEffect React hook](https://asmyshlyaev177.dev/blog/use-cases-useinsertioneffect-react-hook.md)
    
    August 21, 2024
    
    Practical use cases for React's useInsertionEffect hook — what it's for, how it differs from useEffect and useLayoutEffect, and when to use it, with an honest look at the downsides.
    
    -   [React](https://asmyshlyaev177.dev/blog/tags/react.md)
    -   JavaScript
    
-   ## [Clean code vs bad code](https://asmyshlyaev177.dev/blog/clean-code-vs-bad-code.md)
    
    August 10, 2024
    
    What actually separates clean code from bad code — practical heuristics and examples, beyond the usual book quotes. It comes down to purpose, resilience to change, and accepting that nothing is ever done.
    
    -   Clean code
    
-   ## [TypeScript function overloading: a real-world example](https://asmyshlyaev177.dev/blog/ts-function-overloading-real-world-example.md)
    
    August 9, 2024
    
    TypeScript function overloading explained with a realistic, real-world example — when it beats union types and how to write overloads cleanly. The example is a hook straight out of my state-in-url library.
    
    -   [TypeScript](https://asmyshlyaev177.dev/blog/tags/typescript.md)
    
-   ## [Sharing state between unrelated React components](https://asmyshlyaev177.dev/blog/sharing-state-between-unrelated-react-components.md)
    
    July 11, 2024
    
    How to share serializable state between unrelated React components — including server and client components in Next.js — without prop drilling. The whole pattern is a plain object and a few lines of glue.
    
    -   [React](https://asmyshlyaev177.dev/blog/tags/react.md)
    -   [Next.js](https://asmyshlyaev177.dev/blog/tags/next-js.md)
    -   [State management](https://asmyshlyaev177.dev/blog/tags/state-management.md)

---

Site summary for LLMs: <https://asmyshlyaev177.dev/llms.txt> · Blog: <https://asmyshlyaev177.dev/blog>
