# Volodymyr's website > Full-stack software engineer based in Ukraine. Personal website with blog posts about algorithms, web platform fundamentals, and developer tools. This is the llms.txt index for https://chornonoh-vova.com/ — a personal website and blog by Volodymyr Chornonoh. The site covers algorithms and data structures, web APIs, developer tools, and software engineering topics. For the full content of every blog post concatenated into one file, see https://chornonoh-vova.com/llms-full.txt. ## Blog Technical writing on algorithms, data structures, web APIs, tools, and software engineering. - [Structured Concurrency in Java 25](https://chornonoh-vova.com/blog/structured-concurrency-java-25/): Build a parallel dashboard API, uncover wasted work after failures, and see how structured concurrency fixes it. - [Re-architecting an old service: Part 2](https://chornonoh-vova.com/blog/re-architecting-an-old-service-part-2/): How I structured a multi-PR migration for AI delegation, and what actually made it work - [Re-architecting an old service: Part 1](https://chornonoh-vova.com/blog/re-architecting-an-old-service-part-1/): Replacing an aging Java proxy with a Python subprocess, without touching the callers - [Building worklog, a CLI for my daily reports](https://chornonoh-vova.com/blog/building-worklog/): From idea to a simple but incredibly useful personal tool - [Building a tabata timer: state machines, wake locks, and haptic feedback](https://chornonoh-vova.com/blog/tabata-timer-app/): Building a tabata timer app - [env() function in CSS (and Tailwind)](https://chornonoh-vova.com/blog/env-function-in-css-and-tailwind/): Niche function that is incredibly useful - [ORMs vs query builders vs raw SQL](https://chornonoh-vova.com/blog/orms-vs-query-builders-vs-raw-sql/): Short story discussing each approach - [JSON + metadata = useful logs](https://chornonoh-vova.com/blog/json-structured-logging/): Improvements in the observability of the system - [Date parsing in JS](https://chornonoh-vova.com/blog/js-dates-bug/): The Date parsing bug that lived in production for years - [i18n-utils: CLI to simplify i18n file management](https://chornonoh-vova.com/blog/i18n-utils/): CLI utility to streamline operations on i18n files - [Advent of Code 2025, part 2](https://chornonoh-vova.com/blog/advent-of-code-2025-days-7-12/): My journey through AoC 2025, days 7-12 - [Advent of Code 2025, part 1](https://chornonoh-vova.com/blog/advent-of-code-2025-days-1-6/): My journey through AoC 2025, days 1-6 - [Bash "strict" mode](https://chornonoh-vova.com/blog/bash-strict-mode/): Essential options in bash scripts - [XSS security vulnerability](https://chornonoh-vova.com/blog/xss-security-vulnerability/): A real-world example of a classic security mistake, and how I tracked it down and fixed it. - [Building local-first app with IndexedDB](https://chornonoh-vova.com/blog/building-local-first-app-with-indexed-db/): Laying out the foundation for a robust app - [Storage in the browser](https://chornonoh-vova.com/blog/storage-in-the-browser/): What are the ways to persist data in the browser? - [Exploring Drag and Drop API](https://chornonoh-vova.com/blog/exploring-drag-and-drop-api/): Learning about web platform fundamentals and applying them on practice - [inert HTML attribute](https://chornonoh-vova.com/blog/inert-html-attribute/): What is inert and what problem does it solve? - [React performance hooks and compiler](https://chornonoh-vova.com/blog/react-performance-hooks-and-compiler/): Overview of React perf hooks and compiler - [Git Worktrees](https://chornonoh-vova.com/blog/git-worktrees/): Lesser-known but incredible Git feature - [Maze generation algorithms](https://chornonoh-vova.com/blog/maze-generation-algorithms/): Exploring different approaches to generate a maze - [Blog updates](https://chornonoh-vova.com/blog/blog-updates-1/): New things on the website and in the blog - [Levenshtein distance algorithm](https://chornonoh-vova.com/blog/levenshtein-distance-algorithm/): How do computers understand that two words are similar? - [Different line endings](https://chornonoh-vova.com/blog/different-line-endings/): A quick guide to line endings across operating systems - [Finally block not running - war story](https://chornonoh-vova.com/blog/finally-not-running-war-story/): What are the reasons when finally block might not run - [The GitFrag challenge](https://chornonoh-vova.com/blog/gitfrag-challenge/): A diary of the mini util that I've built as a challenge - [Pokémon MCP server](https://chornonoh-vova.com/blog/pokemon-mcp-server/): Exploring what MCP is and building an MCP server for fun - [Building a wizard form](https://chornonoh-vova.com/blog/building-wizard-form/): With react-hook-form, zod & zustand - [Trie data structure](https://chornonoh-vova.com/blog/trie-data-structure/): Deep dive into what trie is and its applications - [Making Sudoku game from scratch](https://chornonoh-vova.com/blog/making-sudoku-game/): Utilizing algorithms and data structures for fun - [Solving Sudoku](https://chornonoh-vova.com/blog/solving-sudoku/): Algorithm to solve Sudoku and visualization - [Sudoku verification](https://chornonoh-vova.com/blog/sudoku-verification/): Breaking down an algorithm to verify sudoku - [UTF-8 encoding](https://chornonoh-vova.com/blog/utf-8-encoding/): How text is encoded in UTF-8, visualized - [Warehouse simulator from scratch: Part 2](https://chornonoh-vova.com/blog/warehouse-simulator-part-2/): Finishing up the simulator inspired by Advent of Code 2024, Day 15 - [Warehouse simulator from scratch: Part 1](https://chornonoh-vova.com/blog/warehouse-simulator-part-1/): Building a simulator inspired by Advent of Code 2024, Day 15 - [TypeScript vs JavaScript private](https://chornonoh-vova.com/blog/typescript-vs-javascript-private/): Deep dive into differences between TS private modifier and native JS #private fields - [Flood fill algorithm](https://chornonoh-vova.com/blog/flood-fill-algorithm/): How flood fill algorithm works, visualized - [One of my favorite Java interview questions](https://chornonoh-vova.com/blog/one-of-my-favorite-java-interview-questions/): A deep dive into singleton implementation details - [The hardest day of AoC 2024 (for me)](https://chornonoh-vova.com/blog/the-hardest-day-of-aoc-2024-for-me/): Or how I learned about the Bron-Kerbosh algorithm - [LRU Cache: visualization & implementation](https://chornonoh-vova.com/blog/lru-cache-visualization-implementation/): What is LRU cache, hot to build it, and some visualizations for better understanding - [Better approach to automated UI testing](https://chornonoh-vova.com/blog/better-approach-to-automated-ui-testing/): Utilizing data-testid attributes to simplify automation ## Projects - [Readometer](https://chornonoh-vova.com/projects/#readometer): Simple app to manage your library of books and track your reading sessions. - [Tabata Timer](https://chornonoh-vova.com/projects/#tabata-timer): Tabata timer app, installable as PWA. - [GitFrag](https://chornonoh-vova.com/projects/#gitfrag): Sort GitHub profile contributions and learn about sorting algorithms. - [Sudoku](https://chornonoh-vova.com/projects/#sudoku): Small and simple Sudoku game, installable as PWA. - [Warehouse Simulator](https://chornonoh-vova.com/projects/#warehouse-simulator): Simulator inspired by Advent of Code 2024 Day 15, designed with pixel art. ## About - [About Volodymyr Chornonoh](https://chornonoh-vova.com/about/): Full-stack engineer (React, TypeScript, Java, Spring Boot). Based in Ukraine.