dobrovolskyi.com.ua
Available for work · just outside Kyiv

I build stuff.

I build MCP servers and the harnesses that make AI agents safe to run on real systems, Telegram bots, and fast websites. Freelance, just outside Kyiv, remote-friendly. Most of it is still in production.

Projects16
StackGo · Python · TypeScript · C# · C++ · PHP
Harnesses for AI agents Three MCP servers, and the scaffolding around them

Agents are easy to start and hard to trust.

I build what goes around the model — the locks, the previews, the undo and the review gates that turn something with write access into something you can leave running.

blockwright

MCP · TypeScript

Lets an assistant build real structures on a live Minecraft server over RCON — no client mod, no bot account. It previews every build, reads the world back from region files, and snapshots before each write so it can undo.

undoon every write
0client mods

agent-coord

MCP · zero-deps

Several coding agents, one repository, no clobbering. File locks, task claims and status through a shared board — hard edit-blocking for Claude Code, voluntary cooperation for Codex.

0dependencies
Nagents, one repo

nethunt-mcp

MCP · Python

A CRM under natural-language control: the official MCP Python SDK over two transports, a Telegram sidecar, and an allowlist so only named accounts can reach it.

2transports
Gemini APIClaude CodeCodexMCP blind model evals

Stack

What the projects are actually built from
Languages
GoPythonTypeScriptC#C++PHP
Web
AstroTailwind v4React islandsNode.jsWordPressWooCommerceFrankenPHP
Data
SQLitePostgresMS SQLRedisMinIO
Agents & LLM
MCPClaude CodeCodexGemini APIOpenAI APIgrammYaiogram 3telego
Infra & networking
DockerDebianCaddyCloudflareStalwart mailsystemdDNS / TLSPaper / Geyser
I sometimes take photos

// projects

16 entries

wood-way.expert

Wholesale timber shop on WordPress with a custom theme: 1,463 products, 360 categories, and three full catalogue trees rather than a language toggle. It sells by request, not by cart — the list of items carries on into the CRM, and quantities are cubic and square metres, so volume and weight calculators drop their result straight into the order. Moved off Prom.ua onto its own domain via a 2,332-URL redirect map. Lighthouse: 100/100/100, performance 87.

WordPressWooCommercePHP 8.5FrankenPHPRedis

woodway-expert.com

Export storefront for the same manufacturer — European hardwood for the US market. Separate domain, its own design, 279 products: deliberately not a translation of the Ukrainian shop, because export works differently — different volumes, different logistics, a different path from enquiry to deal. Only the theme codebase is shared.

WordPressWooCommercePHP 8.5FrankenPHP
WCactive

woodway CRM

The CRM the WoodWay Expert sales team works in, built in front of VMS — an ERP with a Windows client and no web UI. It syncs orders from the ERP's API and reads its SQL Server directly, and holds everything the ERP has no concept of: website leads, call transcripts, Telegram threads, routing, and a coach that flags clients going quiet.

TypeScriptReactViteSQLiteMS SQLNodesystemdCaddyGemini APItelego
internal · no public repo

prolisky.in.ua

Bilingual site for my home village outside Kyiv. Static Astro, near-zero JS, Lighthouse 100 across the board. Live air-raid + weather in the header via a server-side poller, seasonal themes, and a button-driven Telegram bot that publishes straight into git — only on my tap.

AstroTailwind v4TypeScriptgrammYhomelab
VMactive

VMS

WoodWay Expert's ERP, and my day job — inventory, logistics and reporting over millions of rows, with data analysis and fraud detection on top. A Windows desktop client and no web UI at all, which is why the CRM beside it exists. The unglamorous backbone that simply has to work.

C#.NETMS SQLWPFT-SQL
internal · no public repo
ACactive

agent-coord

Zero-dependency MCP server + Claude Code hook that lets multiple coding agents work the same repo in parallel without clobbering each other. File locks, task claims and status through a shared board.json — hard edit-blocking for Claude Code, voluntary coop for Codex.

Node.js ≥18MCPzero-deps
JXactive

JxrAutoCleaner

Windows background service that auto-converts NVIDIA ShadowPlay's HDR screenshots (.jxr) into Ultra HDR JPEGs — ~90% smaller while keeping the HDR pop. Lives in the tray, self-starts, and pauses itself when you're gaming fullscreen.

C++libultrahdrWin32WiX MSI

Checkers UA

PvP bot for Ukrainian draughts with the real ruleset — mandatory captures, flying kings and multi-jumps. ELO rating, matchmaking and game replays. Fully in Ukrainian.

PythonDocker

між нами

A synchronized card game for couples. Both partners answer the same prompt, and answers unlock only once both have replied. About closeness and honest conversations — not swiping.

GoSQLiteRedisMinIO

Pisun Bot

Dumb-fun group-chat bot: check in daily, climb the leaderboard, talk trash with the boys. Purely for active chats. Not to be taken seriously — the eggplant says it all.

PythonPostgresRedisaiogram 3

screening

Ukrainian-language screening questionnaires: autistic traits (AQ-50, AQ-10, RAADS-R, CAT-Q) on one site, ADHD (ASRS v1.1 at 6 and 18 items, DIVA-5) on the other. Two sites, one binary — the Host header decides everything. Built on one rule: answers never leave the browser. There is no request that could carry them and no endpoint that could accept them, and an E2E test fails if a single request during a run carries an answer. Item texts and cut-offs come from the primary publications, and every instrument ships a golden test. The pages load nothing external — no cookies, no CDN fonts, no analytics.

AstroReact islandsTypeScriptSQLiteTailwind v4

obrobka

Image processing that happens entirely in the browser: conversion between PNG, JPEG, WebP and AVIF (plus HEIC in), exact sizing, background removal, ×2/×4 upscaling, a brush, layers and batch-to-ZIP. It all runs as WebAssembly in a worker — no server, no upload, no account. The same core, with no DOM and no Node APIs, powers both the tab and an MCP server for agents. Models were picked by measurement, not model cards: U²-Netp turned out general-purpose at 4.4 MB.

AstroSvelteTypeScriptWebAssemblyONNX RuntimeMCPCloudflare Pages

Matsuri

Private Minecraft survival server (Java 26.2 & Bedrock) with live 3D web map, proximity voice chat, player chest shops, armor stand poses, and balanced hardcore progression.

Paper 26.2Java 25GeyserBlueMapCaddyDebian

Instander Revived

An unofficial Instagram mod for Android, the revival of Instander: ghost mode for stories and Direct, no ads or suggestions, downloads from everywhere, Material You. Two APKs — a clone beside Instagram or a replacement — with in-app updates.

AndroidsmaliJavaapktool
GRdeceased 🪦

gryag

Once a sharp, sarcastic Telegram bot with a hard Ukrainian attitude, running on Gemini Flash 2.5 — remembered users, held context, juggled tokens to stay free. Then Google killed the free tier, and that was that. Kept here as a monument to the free-tier era. F.

GoPythonGemini API 🪦
VC

Vitamin check

A symptom questionnaire for which vitamins and minerals are worth testing: iron, D, B12, magnesium, folate, zinc, plus iodine, calcium and the thyroid. Weights come from medical sources (NIH, NICE, MSD), and a nutrient appears only when both a symptom and a risk factor point to it. The result is a list of tests to discuss with a doctor, never a diagnosis or a dose. Answers never leave the browser.

AstroReact islandsTypeScriptSQLite

// about & connect

// about

Vsevolod Dobrovolskyi, based just outside Kyiv. By day I run the ERP and CRM of a timber exporter; the rest of the time I build harnesses for AI agents, Telegram bots and small tools, and keep a homelab that runs more than it should. I take on remote projects in English or Ukrainian and reply within a day.

// connect