Articles
Typing with as const
25 September, 2025
Strict typing and immutability of objects in TypeScript: how to use as const and satisfies to validate object fields and lock literal values.
Modularity and visibility of exports
26 August, 2025
Exports from modules are visible globally, clutters autocomplete in the IDE, and prevents code encapsulation — analysis of the problem and possible workarounds.
Running TypeScript directly in Node.js
21 August, 2025
How to run TypeScript files directly, without intermediate transpilation, using modern Node.js versions.
Telegram Mini Apps: Quick Start
19 August, 2025
How to quickly create a Telegram Mini App — simple bot registration via BotFather and a link to your website.
Tracking metrics and dependencies of JS projects in GitHub
05 August, 2025
A web service for tracking metrics and dependencies of GitHub repositories: stars, forks, issues, dependencies. Quick setup, local storage, no deployment — a simple and intuitive dashboard for your pet projects.
ESLint plugins: pinia
31 July, 2025
A plugin for ESLint that helps monitor the style and architecture of Pinia stores. Supports recommended rules, structure checking, and naming.
ESLint plugins: markdownlint
29 July, 2025
A plugin for ESLint that checks Markdown files against markdownlint rules. Useful when working with documentation, README files, and articles. Supports configuration, custom rules, and autofix.
ESLint plugins: compat
24 July, 2025
ESLint plugin that checks the compatibility of your code with target browsers. Easy to install, supports polyfills, configurable via browserslist.
Automatic size labels for Merge Requests in GitLab CI
22 July, 2025
How to automatically assign size/M and size/XL labels to Merge Requests in GitLab CI based on the number of changes.
Why you can (and should) abandon Prettier
17 July, 2025
Abandoning Prettier — why the popular code formatter is losing relevance and how ESLint has become a convenient and flexible alternative.
How I wrote my Stylelint plugin
15 July, 2025
How to create a custom Stylelint plugin: from the basic API to autofix support. Parse CSS tokens using PostCSS without manual value replacement.
Vue, TypeScript, and imported types: what could go wrong?
10 July, 2025
Why do Vue components in defineProps not work correctly with imported types? How does props compilation work, and why does local type declaration help.
An alternative to Postman and Insomnia
08 July, 2025
Postman and Insomnia have become overloaded and overgrown with paid features. A new alternative is Yaak. A lightweight REST client with a basic set of features.
Downloading an app from RuStore without registration
03 July, 2025
Downloading an APK from RuStore without registration via the official API: how to get information about the app and download the APK from RuStore.
Display merged git branches and related tasks
01 July, 2025
How to find merged git branches and check related tasks in the tracker. Simplifies cleaning up the repository after releases and helps you not to lose anything important.
Adding an icon before a link
27 June, 2025
How to automatically add icons to links to external resources using CSS — without JavaScript and with security in mind.
Quick cleanup of node_modules
25 June, 2025
How to use npkill to find and delete node_modules folders with a single click — freeing up gigabytes of disk space in a couple of minutes.
Typed customEvents
23 June, 2025
How to implement a typed CustomEvent service in Vue with autocompletion, strict types, and useEventListener support from VueUse.
Spellcheck for any text
20 June, 2025
How to set up spell checking in code using cspell — support for Russian and English, dictionaries, masks, and integration into a project.
Cleaning node_modules of outdated polyfills
18 June, 2025
How to find and remove outdated polyfills from node_modules using nolyfill to speed up the installation, build, and launch of a JavaScript project.
Pinia: prohibiting implicit state mutation
16 June, 2025
How to prohibit implicit state mutation in Pinia using TypeScript so that changes are explicit and controllable, improving application stability.
Domain zone information aggregator
13 June, 2025
The convenient tld-list aggregator collects prices, terms, and WHOIS privacy options for domain zones to help you easily choose the best registrar and rate.
Pinia: is it worth using setup store
11 June, 2025
Let's figure out whether it's worth using setup store in Pinia: pros, limitations, and why option store remains a reliable choice for most projects.
Migrating from CommonJS to ESM
09 June, 2025
Why you should migrate from CommonJS to ESM, what advantages the new module format offers, and when migration may cause issues.
Annotations above text with the ruby tag
06 June, 2025
How to add superscript explanations to words using the <ruby> tag. Works for Japanese, Chinese, and any other languages.
querySelector typing
04 June, 2025
Improved typing for querySelector and querySelectorAll with typed-query-selector for accurate output of element types based on CSS selectors in TypeScript.
Improving TypeScript's default behavior
02 June, 2025
The ts-reset utility improves TypeScript's standard typing, making the API stricter and safer without changing existing correct code.
Auto-update npm dependencies
28 May, 2025
A convenient way to automatically update npm dependencies using npm-check-updates: more control, filters, and interactivity for easy project maintenance.