For 15 years my job has been the same underneath the job titles: take a system that
does not work well, find out why, and fix the process behind it. First with a
soldering iron. Then inside the Google advertising ecosystem.
Now with AI agents and automation.
The chapters below start with what I do now.
The present: process work at scale, and automation applied to it.
As a Senior Process Executive at Cognizant I review user-generated content and reports
against policy, procedure and regulatory requirements, in a high-volume environment with strict
quality and productivity targets. The interesting cases are the ambiguous ones, where policy
doesn't map cleanly onto the situation and the decision still has to be consistent and defensible.
The rest of the job is reading operational data for recurring patterns and turning them into
concrete process suggestions.
I apply AI-assisted tooling and automation to the repetitive parts of case handling, research and
reporting, within approved tooling and data-handling policies, because client data does not go
into somebody else's model. Outside work the same stack goes further: agents with real tool
calling, browser and API automation, custom MCP servers, local models via Ollama when data must
never leave the room. The interesting part isn't the model, it's the wiring.
Python
LLM Automation & AI Agents
MCP
Browser Automation (Playwright)
REST API Integration
Local LLMs (Ollama)
Process & KPI Analysis
Quality Assurance
2019-nowSenior Process ExecutiveCognizant Technology Solutions, Kraków
volobado@studio : zsh
CH.02
The Traffic Ecosystem
2017-2019 inside the Google advertising ecosystem, on the vendor side. Still in it, on the client side.
At Arvato CRM Solutions, on the Google Ads support programme, I worked with advertisers
across Google Ads, Analytics, Merchant Center, Tag Manager and Google Partners, by phone, email
and chat. Technical, product, billing and payment issues, end to end, then escalated and senior-tier
cases that standard support flows didn't cover.
Then Majorel Polska, as Service Revenue Program Lead: team-level performance for 20 agents
covering CIS markets, weekly reporting by business segment used for staffing and priority calls, and
ramping up new hires. What I kept from all of it: reporting a number is the easy half.
The job is finding the reason behind it.
That did not end when I left the vendor side. I have been running Google Ads for my own
clients ever since: campaigns, conversion tracking, product feeds, and the reporting that
explains what actually moved and why. The same clients, year after year, which is the part
that matters. An advertising account is not a project you deliver, it is a mechanism somebody
has to keep running. Accounts I have run for years, not campaigns I ran once.
2017Customer Service RepresentativeArvato CRM Solutions, Google Ads support programme, Kraków
2018-2019Senior Customer Service RepresentativeArvato CRM Solutions, Google Ads support programme, Kraków
2019Service Revenue Program LeadMajorel Polska, Kraków
CH.03
The Build Log
A running side practice, not a weekend hobby. Everything here shipped, and nearly all of it is still in use.
2026CLIENT WORK
Bestek Makina · B2B Site Rebuild
A full rebuild of the website of a Turkish industrial automation manufacturer, in seven languages, without losing a single page of existing content or the search weight behind it. Custom WordPress build, a repeatable translation pipeline, and contact routing that depends on the visitor's language.
/
/tr/
/de/
/es/
/fr/
/ru/
/uk/
7languages, English at the root
66catalogue products carried over
944interface strings per language
WordPress
Multilingual (7)
Translation pipeline
Docker
A manufacturer with Renault and Siemens among its case studies, behind a website that did not look like it.
Problem
Bestek Makina builds vibratory bowl feeders and parts feeding systems for factory lines. In B2B engineering, the website is the first credibility check before a six figure enquiry, and theirs was not passing it. The brief came with a hard constraint: nothing already written may be lost, and neither may the search weight the domain had accumulated over years. A redesign that quietly drops pages is a redesign that costs the client their traffic.
Approach
Audit first, rebuild second. The product catalogue was kept as it was rather than recreated, so identifiers, addresses and existing translations all survived. Content types and taxonomies moved into a plugin instead of the theme, so the site does not lose its structure if the design is ever replaced. English sits at the root and the other six languages behind prefixes, which is the arrangement that keeps the existing pages ranking. Translation became a pipeline rather than a task: interface strings through the standard catalogue format, database content through export and import, both passing through a glossary so the same term is never rendered two different ways. Enquiries are routed by the language they were written in, because a Turkish customer should reach the Turkish desk.
Result
Seven languages covering the markets the client sells into: 944 interface strings and around 480 database values per language, the complete catalogue of 66 products, and every case study. Built and reviewed on a Docker stand running the current site and the new one side by side, so every change could be compared against the original before anything reached production. The paid consent platform was replaced by one built in house.
7languages, English at the root
66catalogue products carried over
944interface strings per language
Client project. In review before launch, so the rebuilt site is not public yet.
2026AGENT
AI Telegram Operator
An LLM-driven assistant that executes real tasks from a chat interface: tool calling, multi-step execution, structured outputs, error handling and recovery. Runs unattended on a home server, covered by an automated test suite.
140+automated tests
Python
Tool calling
Telegram
An assistant that does things, rather than one that describes how they could be done.
Problem
A chat model becomes an operator only when it can call tools, recover from a failed call, and be trusted to run unattended. Hosted models and local models disagree about how tool calling works, which is where most of the real work sits.
Approach
Multi step execution with real tool calling and structured outputs, one dialect adapter per model family, and error handling that retries deliberately instead of guessing.
Result
Runs unattended on the home server, covered by an automated suite of over a hundred tests so a broken tool call is caught before the user sees it.
Private project, no public repository.
2026OSS · MIT
Lagrange · Gemini CLI Usage
Desktop widget that reverse-engineers and visualises what a Gemini CLI session actually costs: live quota windows, token spend, context-window depth, and an account switcher. Python, no runtime dependencies, single-file Windows build.
The CLI gives you no meter, so you discover the rate limit by hitting it in the middle of a task.
Problem
Gemini CLI reports nothing about the quota it spends. The limits are two rolling windows over weighted tokens, and the heaviest consumers are the invisible ones: the chat history replayed on every call, and the depth of the reasoning mode.
Approach
Read the same quota endpoint the CLI itself calls, then go further than it does. The endpoint returns fractions only, so token spend and context depth are read out of the CLI's own local conversation database.
Result
A desktop widget with live quota windows, token spend, context depth and a switcher across several accounts. Single file Windows build, no runtime dependencies.
Several accounts side by side: quota windows, token spend and context depth. Addresses are placeholders.
2026OSS · MIT
Lagrange · Claude Code Usage
The same idea for Claude Code: session and weekly limits, token spend and context depth, read straight out of the CLI's own local data. Ported to ChromeOS Crostini as well, off Win32 ctypes onto X11.
The same blind spot in a different tool, plus a third party widget that kept going stale without saying so.
Problem
The widget I used would freeze: its poller stopped while the process stayed alive, so the numbers on screen quietly stopped being true. A wrong number is worse than no number.
Approach
Session and weekly limits come from the official usage endpoint, token spend from the transcripts the CLI already writes to disk. Then the interface was ported off Win32 ctypes onto X11 so the same widget runs under ChromeOS Crostini.
Result
One widget, two platforms, and a visible heartbeat so a stalled poller can never pass for fresh data.
Session and weekly limits with the spend curve, plus how full the context window is.
2026OSS
Video Grabber for Chrome
One-click video downloader: direct MP4 and WebM straight from the page, YouTube in maximum quality through a native yt-dlp host, cookies carried over for anything behind a login.
Every downloader either wants money, wants your data, or breaks the week the video site changes something.
Problem
Direct files and YouTube need completely different handling, and anything behind a login needs the session you already have in the browser.
Approach
Two paths in one extension: direct MP4 and WebM straight from the page, and YouTube in maximum quality through a native yt-dlp host running outside the browser, with cookies carried over.
Result
A download service with a queue and playlist support. The browser kills its child processes on exit through a job object, so the host is started around that restriction through WMI.
The popup: one button for the best quality, a whole playlist into its own folder, and the download queue.
2026OSS
AIDA64 Temperature Widget
CPU, GPU and SSD temperatures on the desktop, read out of AIDA64's shared-memory sensor export so AIDA64 itself can stay closed and out of sight.
AIDA64 knows every sensor in the machine, but only while it is on your screen.
Problem
Monitoring software wants to be the thing you look at. I wanted the three numbers that matter and none of the program around them.
Approach
Read the sensor values straight out of the shared memory block AIDA64 exports, so AIDA64 itself can stay minimised and hidden.
Result
CPU, GPU and SSD temperatures always visible on the desktop in a small widget, with the program that produces them out of sight.
Processor, graphics and drives, read from AIDA64 shared memory while AIDA64 itself stays hidden.
2026LIVE
Dual Online Timer
Two independent timers on one screen, built after failing to find one that wasn't ad-choked. Vanilla JS, no framework, no build step: one static file does all three layouts.
Built after failing to find an online timer that was not buried in advertising.
Problem
Every free timer site is ad choked, and none of them run two independent timers side by side, which is exactly what a kitchen, a workout or a studio session needs.
Approach
Vanilla JavaScript, no framework. Three layouts (left, right and centre) from a single file, each page keeping its own saved state, served as plain static files with nothing to build.
Result
Live and in daily use, loads instantly, and shows nothing on screen that is not the clock.
The left layout: a 999 minute timer and a 99 minute timer running independently.
2026OSS · MIT
Always-On Virtual Display
Windows utility that guarantees a headless machine always has an active display, so remote desktop sessions never drop to a black screen. Works directly against the Windows display configuration API.
A machine with no monitor attached has no active display, and remote desktop then connects to nothing.
Problem
Headless servers drop remote sessions to a black screen, or refuse to start one at all. The usual answer is a hardware dummy plug, which does not help when the machine is in another city.
Approach
Create a virtual display through the Windows display configuration API, then keep a watchdog on it that notices when the picture disappears and brings it straight back.
Result
Remote sessions always have a picture. Released as open source together with the parts of the CCD API that are badly documented: how modes are chosen, and how cloning between adapters really behaves.
2026OSS · MIT
Full-Page Screenshot for Chrome
Captures a whole page by scrolling it, then stitches the frames by the scroll offset each one was really taken at. Paced to the two-per-second limit the browser enforces, so nothing is lost silently. Annotation editor on top, and a PDF writer built from scratch rather than pulled in.
Chrome hands you the visible viewport only, and only about twice a second.
Problem
Naive stitching ignores that limit and assumes every scroll step produced a frame. The result is a tall image with repeated or missing strips, and nothing warns you that it happened.
Approach
Scroll, capture, and stitch by the scroll offset each frame was actually taken at, paced to the browser's own rate limit so no frame is lost silently.
Result
Whole page capture with an annotation editor on top, and a PDF writer built from scratch rather than pulled in as a dependency.
2026PIPELINE
News Pipeline with LLM Drafting
Source collection, LLM drafting, human review and approval inside Telegram, scheduled publishing. Built around human-in-the-loop approval rather than fully autonomous posting. On purpose.
0posts without a human approving them
LLM orchestration
Human-in-the-loop
Python
Fully autonomous publishing does not save time, it publishes mistakes at scale.
Problem
Automated news channels either post everything and lose credibility, or need someone watching a console. Neither is a process you can leave running.
Approach
Collection, drafting by a language model, then review and approval inside Telegram itself, on a phone, followed by scheduled publishing. Drafting and publishing run as separate bots so neither can act for the other.
Result
Nothing reaches the channel without a person pressing approve, and approving takes a few seconds rather than a session at a desk.
Private project, no public repository.
2026LIVE
Personal Book Reader
My own replacement for a reading service I stopped trusting. Handles EPUB, PDF, FB2 and TXT, remembers position, and belongs to nobody but me. Self-hosted, with uploads up to 2 GB.
4book formats, uploads up to 2 GB
EPUB / PDF / FB2
PHP + Caddy
Self-hosted
My own replacement for a reading service I stopped trusting with my library.
Problem
A reading service can change its terms, lose your position, or disappear, and your library goes with it. Mine was becoming unreliable in all three directions at once.
Approach
A reader of my own on my own machine: EPUB, PDF, FB2 and TXT, reading position remembered per book, uploads up to two gigabytes, served by PHP behind Caddy.
Result
The whole library belongs to nobody but me, reachable from any device, with no terms of service that can change overnight.
Private instance, access is behind a login.
2026TOOL
AutoDubber
Video dubbing pipeline: SRT in, dubbed track out. Azure Neural TTS and MicMonster back-ends, auto speed-matching per subtitle, GUI launcher. Every language works.
2speech engines behind one interface
Python
Azure TTS
Playwright
Subtitles in, a dubbed audio track out, with every line landing in its own slot.
Problem
Synthesised speech never fits the subtitle it belongs to. A line that runs half a second long pushes the whole track out of sync, and fixing that by hand is the entire job.
Approach
Each subtitle is synthesised separately and speed matched to the gap it has to fill, with two text to speech back ends behind one interface and a launcher that needs no command line.
Result
Dubbing that stays in sync for a full length video, in every language tried so far.
Private project, no public repository.
2026OSS
MCP Server Suite
Model Context Protocol servers that give AI agents real hands: Gemini WebAPI (image gen + chat), Flux, MicMonster TTS (12 tools), NotebookLM automation.
4MCP servers, 12 tools in the largest
MCP
Python
Playwright
Model Context Protocol servers that give an agent real hands instead of advice.
Problem
An agent is only as useful as the tools it can actually call. Most of what I needed had no API at all, only a web interface built for a human.
Approach
One server per capability, each exposing a small set of well described tools: image generation and chat, text to speech with subtitle timed dubbing, and research notebook automation driven through a real browser session.
Result
Tools that any MCP capable agent can use, so the same capability does not have to be rebuilt for every assistant.
Some servers are public, others are private.
2026PRODUCT
Extension Factory
A generator for Chrome new-tab extensions: one engine, six themes, a build script that stamps out a full store-ready package, plus landing page and payment flow.
6extensions from one engine
Chrome MV3
Build pipeline
Gumroad
One engine, six themes, and a build script that stamps out a store ready extension.
Problem
Building a second new tab extension from scratch means copying the first one and then maintaining two copies of the same bug.
Approach
The behaviour lives in a single engine, everything visual lives in a themes file, and a build script assembles a complete packaged extension from the pair, with landing page and payment flow around it.
Result
A new variant is a theme entry rather than a project, and a fix in the engine reaches every variant at once.
Private project, no public repository.
2026PIPELINE
Book-to-Video Pipeline
Turns a book into a 35-minute YouTube script: NotebookLM extraction, structural scaffolding, humanising passes, then auto-split into teleprompter files.
9full length scripts shipped
NotebookLM
LLM orchestration
Python
A book at one end, a script a person can actually read out loud at the other.
Problem
The slow part of long form video is not research, it is turning research into thirty five minutes that sound like a person talking rather than a summary being recited.
Approach
Extraction from a research notebook in parallel passes, a structural scaffold (logline, climax, obstacles, emotional turns), then rewriting passes that break the cadence machine generated text falls into, and an automatic split into teleprompter files.
Result
Nine full length scripts produced end to end, each one ready to shoot without further editing.
Private project, no public repository.
2026RUNNING
Home AI Studio
A second machine turned into a 24/7 server: local LLMs on Ollama, a news bot on Telegram, a remote browser for the family, a private ebook library. Everything reachable from anywhere, nothing exposed.
24/7running at the cost of electricity
Ollama
Docker
Cloudflare Tunnel
SSH
A second machine turned into a server that runs whether or not anyone is at a desk.
Problem
Everything I build needs somewhere to run continuously, and renting a server for each experiment is both expensive and a way to hand over data that should stay at home.
Approach
One machine running local language models, a news bot, a remote browser for the family and a private ebook library, each reachable from anywhere through tunnels and SSH, with nothing exposed directly to the open internet.
Result
Running continuously, hosting several of the projects on this page, and costing the price of electricity.
Private infrastructure.
2026ARCHIVED
One More Pomodoro Timer
The same engine as the dual timer, rebuilt around focus cycles: bigger targets, softer motion, nothing on screen that isn't the clock.
JS
UX
Focus cycles
The same engine as the dual timer, rebuilt around focus cycles instead of raw countdowns.
Problem
A countdown and a focus cycle look identical and behave differently: one is a number, the other is a rhythm of work and rest that has to survive being ignored.
Approach
Bigger targets, softer motion, and nothing on screen that is not the clock. The timer engine was reused wholesale, only the interface around it was rebuilt.
Result
Shipped and used, then retired: the free host removed the account for inactivity. The code is kept and the engine still runs in the dual timer.
Demo offline, the free hosting account was removed for inactivity.
Five worlds, one map. Hover or tap a cluster: everything is connected.
AI
Python
LLM Automation
AI Agents
MCP
Playwright
REST APIs
Local LLMs
Traffic
Google Ads
Analytics
Merchant Center
Tag Manager
Google Partners
KPI Analysis
Reporting
Hardware
Soldering & BGA
Diagnostics
Firmware
3D Printing
Reverse Eng.
Networking
Production
Scriptwriting
Lighting
Editing
Content Strategy
Localization
Human
Systems Thinking
Process Analysis
Team Leading
Onboarding
UA·RU·EN·PL·TR
Curiosity
CH.05
Reverse Engineering
Where all of it started: technology understood at the physical level, one board at a time.
Seven years on the bench in Odesa, Ukraine: diagnosing and repairing PCs, laptops,
tablets and office equipment, configuring networks for small businesses and schools,
escalation point for whatever nobody else could fix. At Lenovo it went down to component
level: professional soldering and board-level work, the kind where a schematic and a steady
hand decide whether a board lives.
In 2017 the bench stayed in Odesa and the habit moved with me to Kraków. What broke
here was not boards but processes: queues that stalled, numbers nobody trusted, work redone
because nobody had looked for the real cause. Same job, different instrument.
Underneath all of it there is a diploma that explains every chapter above: Specialist,
Engineer of Automated Production Control Systems, Odesa National Academy of Food
Technologies, 2010-2015, automated management of technological processes. Fifteen years later
I am doing exactly that again, with entirely different tools. The bench taught me the discipline
every chapter above borrows. Trace the signal until you find where it actually breaks.
Component-level Repair & Soldering
Hardware Diagnostics
Firmware Updates
Network Configuration
Windows & Linux Administration
2009-2011Technical Service EngineerService Center Destine, Odesa
2011-2014Senior Technical Service EngineerService Center KM-Service, Odesa
2015-2016Senior Technical ExpertCitrus, Odesa
2016Senior Technical Support EngineerLenovo, Odesa
CH.06
Production & Content Architecture
A home studio, long-form scripts, and meaning rebuilt in four languages.
A studio built out of an empty room: lighting, sound, camera, set. Then the harder part: the
writing. Long-form scripts, structure, pacing, the moment where a viewer decides to stay.
Production is engineering with a different set of tolerances.
These days most of the pipeline is automated: source extraction, script scaffolding, teleprompter
splitting, subtitle-timed dubbing in any language. Working across UA · RU · EN · PL taught
me that a message isn't translated, it's rebuilt. The same idea needs different scaffolding in
every language to land the same way.
Open to work where the problem crosses more than one domain: process and automation,
AI and the rules it has to live by, software and the hardware under it. Also happy to just talk shop.