<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Frontend on Codeslog</title>
    <link>https://www.codeslog.com/en/categories/frontend/</link>
    <description>Recent content in Frontend on Codeslog</description>
    <image>
      <title>Codeslog</title>
      <url>https://www.codeslog.com/images/default-cover.png?v=20260114T1436</url>
      <link>https://www.codeslog.com/images/default-cover.png?v=20260114T1436</link>
    </image>
    <generator>Hugo -- 0.168.0</generator>
    <language>en-US</language>
    <lastBuildDate>Sat, 24 Oct 2026 02:02:00 +0900</lastBuildDate>
    <atom:link href="https://www.codeslog.com/en/categories/frontend/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Accessible Modals: From dialog showModal() to Focus Traps</title>
      <link>https://www.codeslog.com/en/posts/modal-dialog-implementation/</link>
      <pubDate>Sat, 24 Oct 2026 02:02:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/modal-dialog-implementation/</guid>
      <description>Compare dialog showModal() with a div modal: inert, focus trap, ESC, scroll lock, focus restoration, and why Tab leaves a dialog (measured in Chrome).</description>
    </item>
    <item>
      <title>Form Validation Timing: From Blur to aria-invalid</title>
      <link>https://www.codeslog.com/en/posts/form-ux-validation/</link>
      <pubDate>Tue, 15 Sep 2026 11:31:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/form-ux-validation/</guid>
      <description>Forms that flash errors on focus, or stay silent until submit, fail users. Get validation timing, aria-invalid, and aria-describedby right for accessible forms.</description>
    </item>
    <item>
      <title>Focus Management in SPAs: Keeping Screen Readers on Track After Route Changes</title>
      <link>https://www.codeslog.com/en/posts/spa-focus-management/</link>
      <pubDate>Tue, 15 Sep 2026 11:26:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/spa-focus-management/</guid>
      <description>Why screen readers stay silent after SPA route changes, and how to fix it in React and Next.js with focus management, aria-live, and focus restoration patterns.</description>
    </item>
    <item>
      <title>Safari 27 Fixed top-level await — Retested, and Loading Doubled</title>
      <link>https://www.codeslog.com/en/posts/safari-top-level-await-fix/</link>
      <pubDate>Thu, 03 Sep 2026 11:25:33 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/safari-top-level-await-fix/</guid>
      <description>Reran WebKit&amp;#39;s top-level await repro on Safari 26.6 and iOS 26.5. Past the ReferenceError, modules declared after a TLA one wait for it — loading doubled.</description>
    </item>
    <item>
      <title>When aria-live Stays Silent — Getting ARIA Live Regions Right</title>
      <link>https://www.codeslog.com/en/posts/aria-live-regions/</link>
      <pubDate>Wed, 02 Sep 2026 01:14:30 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/aria-live-regions/</guid>
      <description>You added aria-live correctly, but the screen reader stays silent. Why the container must exist before its content, and when to use focus instead.</description>
    </item>
    <item>
      <title>Scroll-Driven Animation: When Scroll Becomes the Timeline</title>
      <link>https://www.codeslog.com/en/posts/scroll-driven-animation/</link>
      <pubDate>Wed, 12 Aug 2026 01:34:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/scroll-driven-animation/</guid>
      <description>Scroll-Driven Animation treats scroll not as an event but as the timeline itself. This post compares three implementations — native CSS, IntersectionObserver, and requestAnimationFrame — covering how each works, their tradeoffs, and accessibility.</description>
    </item>
    <item>
      <title>Test Culture, Interviews, and What Comes Next — Wrapping Up the Frontend Testing Series</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-wrap/</link>
      <pubDate>Sat, 08 Aug 2026 01:12:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-wrap/</guid>
      <description>Wrapping up the frontend testing series: the five layers stacked on one small app, what testing means for team culture and interviews, how to start on legacy code with no tests, and where to go next.</description>
    </item>
    <item>
      <title>The Traps in AI-Made Code — Missing Accessibility and Edge Cases</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-ai-pitfalls/</link>
      <pubDate>Fri, 07 Aug 2026 14:59:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-ai-pitfalls/</guid>
      <description>AI-written code is wrong in plausible ways. The accessibility and edge cases AI repeatedly drops, and how the test suite from this series reports each hole automatically — with a real before and after.</description>
    </item>
    <item>
      <title>Playwright × AI — codegen, MCP, Self-Healing Selectors</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-ai-playwright/</link>
      <pubDate>Thu, 06 Aug 2026 01:11:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-ai-playwright/</guid>
      <description>AI now drives the browser itself. A practical map of Playwright codegen and MCP agents: why Playwright MCP reads the accessibility tree rather than screenshots, and why self-healing selectors aren&amp;#39;t a Playwright feature.</description>
    </item>
    <item>
      <title>Generating Tests with AI — Verification Stays Human</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-ai-generate/</link>
      <pubDate>Thu, 06 Aug 2026 00:46:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-ai-generate/</guid>
      <description>How good is AI at writing tests? Practical ways to generate and extend tests with LLMs, what AI reliably misses, and the checklist for trusting AI-written tests.</description>
    </item>
    <item>
      <title>Popover, Anchor Positioning, Dialog: Are They Accessible Enough to Use Yet?</title>
      <link>https://www.codeslog.com/en/posts/browser-features-accessibility-2026/</link>
      <pubDate>Wed, 05 Aug 2026 15:07:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/browser-features-accessibility-2026/</guid>
      <description>A green support table doesn&amp;#39;t mean everyone can use it. Here&amp;#39;s a 2026 accessibility check on popover, anchor positioning, dialog, and view transitions — and what you still have to do yourself for each.</description>
    </item>
    <item>
      <title>How to Read Coverage — and the Metrics Beyond It</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-coverage-metrics/</link>
      <pubDate>Tue, 04 Aug 2026 09:08:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-coverage-metrics/</guid>
      <description>How should you read a coverage report, and how far should you trust it? The difference between line and branch coverage, finding untested forks, and the team-health metrics numbers can&amp;#39;t show.</description>
    </item>
    <item>
      <title>Building Test and Accessibility Gates with GitHub Actions</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-ci-github-actions/</link>
      <pubDate>Mon, 03 Aug 2026 01:59:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-ci-github-actions/</guid>
      <description>A pipeline where unit tests, E2E, and accessibility checks run on every PR. Set up a merge gate with GitHub Actions in one workflow file — CI beginners welcome, terms explained in three minutes.</description>
    </item>
    <item>
      <title>Visual Regression Testing — Screenshot Comparison</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-visual-regression/</link>
      <pubDate>Wed, 29 Jul 2026 15:01:36 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-visual-regression/</guid>
      <description>&amp;#39;The feature works but the layout broke.&amp;#39; Catch what only eyes used to catch: implement visual regression tests with Playwright screenshot comparison, stable snapshots, and the environment trap to avoid.</description>
    </item>
    <item>
      <title>Accessibility E2E — Scanning with @axe-core/playwright</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-axe-e2e/</link>
      <pubDate>Mon, 27 Jul 2026 14:38:51 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-axe-e2e/</guid>
      <description>Catch page-wide accessibility violations automatically, in a real browser. What axe-core is and how it works, how to integrate it into Playwright E2E, and what automation catches — and can&amp;#39;t.</description>
    </item>
    <item>
      <title>Traces, Debugging, and Retries — Tracking Down the Cause</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-playwright-debug/</link>
      <pubDate>Wed, 22 Jul 2026 01:30:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-playwright-debug/</guid>
      <description>What do you look at when a test fails only on CI? Playwright&amp;#39;s trace viewer and debugging tools track the real cause — with evidence, not guesswork — and turn retries into a signal instead of a fix.</description>
    </item>
    <item>
      <title>Fixtures, Auth Reuse, and Parallel Runs</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-playwright-fixtures/</link>
      <pubDate>Tue, 21 Jul 2026 01:25:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-playwright-fixtures/</guid>
      <description>Repeating the same setup in every test? Playwright&amp;#39;s custom fixtures (base.extend) and Page Object pattern remove it, storageState logs in once, and fullyParallel keeps the suite fast and isolated.</description>
    </item>
    <item>
      <title>The Color Is Right but the Contrast Is Wrong: The Accessibility Trap CSS opacity Sets</title>
      <link>https://www.codeslog.com/en/posts/opacity-contrast-trap/</link>
      <pubDate>Tue, 21 Jul 2026 00:30:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/opacity-contrast-trap/</guid>
      <description>You put a dark gray in your CSS, yet the accessibility checker flags it for low contrast. The culprit is opacity. Here&amp;#39;s how opacity mixes your text color into the background and quietly kills contrast — with a real case, the math, and the fix.</description>
    </item>
    <item>
      <title>Locators and auto-wait — Taming Flaky Tests</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-playwright-locators/</link>
      <pubDate>Sat, 18 Jul 2026 23:06:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-playwright-locators/</guid>
      <description>Why E2E tests fail only sometimes, and the actual fix. Understand Playwright locators, auto-wait, and strict mode, and cut flakiness at the root with robust selectors.</description>
    </item>
    <item>
      <title>Supporting High Contrast Mode Properly: forced-colors and System Colors</title>
      <link>https://www.codeslog.com/en/posts/high-contrast-mode/</link>
      <pubDate>Sat, 18 Jul 2026 22:47:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/high-contrast-mode/</guid>
      <description>Dark mode is about choosing colors; high contrast mode is about responding to the colors the OS forces. How to support low-vision users with the forced-colors media query, system color keywords, and prefers-contrast — with practical code.</description>
    </item>
    <item>
      <title>Dark Mode Done Right: CSS Variable Design to Contrast Verification</title>
      <link>https://www.codeslog.com/en/posts/dark-mode-implementation/</link>
      <pubDate>Sat, 18 Jul 2026 02:44:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/dark-mode-implementation/</guid>
      <description>Design dark mode with CSS custom properties, implement prefers-color-scheme with JS toggle, and verify color contrast in both modes. A practical guide to dark mode that works for everyone.</description>
    </item>
    <item>
      <title>Getting Started with Playwright E2E — Your First Scenario</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-playwright-intro/</link>
      <pubDate>Sat, 18 Jul 2026 02:25:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-playwright-intro/</guid>
      <description>E2E verifies whole user flows in a real browser. Install Playwright, understand the webServer config, and write and pass your first scenario — with a clear role split against unit and component tests.</description>
    </item>
    <item>
      <title>Folding Accessibility into Tests — Role-Based Queries</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-a11y-queries/</link>
      <pubDate>Fri, 17 Jul 2026 01:37:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-a11y-queries/</guid>
      <description>A well-written test is an accessibility check. Use role-based queries and accessible names to catch accessibility regressions with the tests you already write — no new tools required.</description>
    </item>
    <item>
      <title>?? vs ||: Why Your Zero Keeps Disappearing</title>
      <link>https://www.codeslog.com/en/posts/javascript-nullish-coalescing/</link>
      <pubDate>Tue, 14 Jul 2026 23:52:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/javascript-nullish-coalescing/</guid>
      <description>The decisive difference between the nullish coalescing operator (??) and || — it&amp;#39;s why 0 and empty strings get swallowed by defaults. Falsy traps, ??= assignment, optional chaining combos, and why mixing the two throws a SyntaxError.</description>
    </item>
    <item>
      <title>Mocking the Network with MSW — Isolating the API</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-msw/</link>
      <pubDate>Tue, 14 Jul 2026 01:05:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-msw/</guid>
      <description>Calling a real API in tests is slow and unstable. Isolate the network layer with MSW (Mock Service Worker) and simulate success and failure responses at will — a real reception desk for your requests.</description>
    </item>
    <item>
      <title>Testing Forms, Interaction, and State — with user-event</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-user-event/</link>
      <pubDate>Mon, 13 Jul 2026 23:39:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-user-event/</guid>
      <description>Reproduce real user interactions — typing, clicking, selecting — with user-event, and test forms and state changes from render to result, the way a user would actually drive them.</description>
    </item>
    <item>
      <title>The Testing Library Philosophy — Querying Like a User</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-testing-library/</link>
      <pubDate>Fri, 10 Jul 2026 01:27:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-testing-library/</guid>
      <description>React Testing Library&amp;#39;s core philosophy: test like a user. Learn the query priority built around getByRole, and how testing behavior instead of implementation makes tests survive refactoring.</description>
    </item>
    <item>
      <title>mock, stub, spy — Understanding Test Doubles Properly</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-test-doubles/</link>
      <pubDate>Fri, 10 Jul 2026 00:44:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-test-doubles/</guid>
      <description>mock, stub, spy, fake… the confusing test-double vocabulary, sorted out. Cover all three with a single Vitest vi.fn() (Jest is nearly identical), and learn the one rule for how much to fake.</description>
    </item>
    <item>
      <title>TypeScript 7 Is Here — The 10x Native Compiler, and Whether You Should Switch Now</title>
      <link>https://www.codeslog.com/en/posts/typescript-7-native-compiler/</link>
      <pubDate>Thu, 09 Jul 2026 23:05:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/typescript-7-native-compiler/</guid>
      <description>TypeScript 7 has shipped, reborn in Go. Real benchmarks (VSCode: 125s to 10s), the new strict-by-default config, side-by-side installs with 6.x — everything you need to decide whether to switch today.</description>
    </item>
    <item>
      <title>Testing Async Code, Timers, and Errors</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-async/</link>
      <pubDate>Wed, 08 Jul 2026 00:27:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-async/</guid>
      <description>Promises, setTimeout, and failure cases. Test async code with Vitest&amp;#39;s resolves/rejects matchers and fake timers, building a debounce test — and see why a missing await lets a broken test pass anyway.</description>
    </item>
    <item>
      <title>Unit Testing Basics — Pure Functions, Edge Cases, and the AAA Pattern</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-unit-basics/</link>
      <pubDate>Mon, 06 Jul 2026 00:20:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-unit-basics/</guid>
      <description>The sturdiest foundation there is: unit tests. Learn how to test pure functions, hunt edge cases, and structure every test with the AAA (Arrange-Act-Assert) pattern — with real-world examples.</description>
    </item>
    <item>
      <title>Wiring Vitest into the Demo App — All the Way to the First Green Light</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-setup-vitest/</link>
      <pubDate>Sun, 05 Jul 2026 00:05:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-setup-vitest/</guid>
      <description>Install Vitest and Testing Library in a React &#43; Vite &#43; TypeScript demo app and walk all the way to your first passing test — with the common setup pitfalls mapped out.</description>
    </item>
    <item>
      <title>What to Test, and How Much — The Trap of 100% Coverage</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-strategy-coverage/</link>
      <pubDate>Sat, 04 Jul 2026 22:34:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-strategy-coverage/</guid>
      <description>Are more tests always better? A guide to what deserves tests first, plus three traps that inflate coverage without protecting users: assert-less tests, snapshot piles, and implementation-detail spies.</description>
    </item>
    <item>
      <title>Testing Terms, All in One Place — A Frontend Testing Glossary (Appendix)</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-glossary/</link>
      <pubDate>Sat, 04 Jul 2026 22:30:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-glossary/</guid>
      <description>From unit tests to flaky, fixtures, and MCP — every term in the Frontend Testing, Done Right series, explained for beginners and ordered the way you&amp;#39;ll meet them. Bookmark this page and come back whenever a word looks unfamiliar.</description>
    </item>
    <item>
      <title>Why Frontend Testing, Why Now — A Seatbelt for the AI Era</title>
      <link>https://www.codeslog.com/en/posts/frontend-testing-why-now/</link>
      <pubDate>Fri, 03 Jul 2026 16:33:17 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/frontend-testing-why-now/</guid>
      <description>The faster AI writes code, the more testing matters. In this opener of the Frontend Testing, Done Right series, we cover what tests really give you, pyramid vs. trophy strategy, and the full curriculum ahead.</description>
    </item>
    <item>
      <title>Promise.all vs Promise.allSettled: The Difference That Matters</title>
      <link>https://www.codeslog.com/en/posts/javascript-promise-methods/</link>
      <pubDate>Wed, 08 Apr 2026 01:00:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/javascript-promise-methods/</guid>
      <description>One failing Promise can take down your entire dashboard. Compare Promise.all and Promise.allSettled with real-world examples, and learn when to use which.</description>
    </item>
    <item>
      <title>Function Declarations vs Expressions: Hoisting Explained</title>
      <link>https://www.codeslog.com/en/posts/javascript-function-hoisting/</link>
      <pubDate>Sat, 04 Apr 2026 02:30:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/javascript-function-hoisting/</guid>
      <description>Learn the difference between function declarations and expressions, how hoisting works under the hood, and when to use arrow functions in practice.</description>
    </item>
    <item>
      <title>Code Block Accessibility Improvement: Line Numbers That Screen Reader Users Can Choose</title>
      <link>https://www.codeslog.com/en/posts/code-block-accessibility-improvement/</link>
      <pubDate>Fri, 09 Jan 2026 20:00:00 +0900</pubDate>
      <guid>https://www.codeslog.com/en/posts/code-block-accessibility-improvement/</guid>
      <description>A record of improving code blocks on a Hugo PaperMod blog. We replaced table-based line numbers with CSS counters so screen reader users can read code without the noise of table markup — a more semantic, accessible approach.</description>
    </item>
  </channel>
</rss>
