Hi, I'm Kostya Ryadov. I build software, and the SDLC is my life — from the JVM tooling I spent years on to the AI agents I build now.
Latest posts
-
Back to School: Why Did Microservices Appear, and Where Did Polyglot Architecture Come From?
Microservices appeared to scale software development and the organizations doing it, not so that teams could pick different languages. Polyglot architecture followed from that.
Selected work
Inference TCO Calculator live
Works out what self-hosting Kimi, GLM, DeepSeek, Qwen or MiniMax actually costs — from accelerator count and parallelism scheme through racks, power and staffing to the price per million tokens. Every rejected configuration is reported with the size of the miss.
- TypeScript
- vLLM
- GPU
Lab live
Generative sketches that run in the browser: recursive fractals animated in p5.js at eight depths, a contact sheet of fourteen hand-built SVG spirals, and a loading spinner drawn along a single path.
- p5.js
- SVG
- Canvas
Video to Docs
Turns a YouTube link or a local video into a structured ODT, DOCX or PDF: speech recognised, slides pulled out of the frame, the whole thing organised by a language model.
- Python
- Whisper
- FFmpeg
Yet Another Labyrinth
A first-person maze game in Java 21 and JavaFX 3D. Every level generates a fresh maze; reach the animated exit and the next one grows.
- Java
- JavaFX
- FXGL
People Search Agent
A LangGraph state machine searches public profiles, stops to ask which candidate is the right one, then assembles a profile card with cited evidence. Public sources only.
- Python
- LangGraph
- Chainlit
Payara MCP Server
An MCP server in Java that lets an assistant drive a Payara application server over STDIO: domain status, deployed applications, per-application configuration.
- Java
- MCP
- Gradle
Enterprise Assistant on LangGraph
An assistant for a regulated environment: it answers from documentation, internal wikis, databases and component logs, under audit logging, personal-data anonymisation and prompt-injection screening.
What it does
The conversation runs as a LangGraph flow that gathers from several sources at once and keeps context across turns. Requests and responses pass through a screening layer: personal data is detected and anonymised before it reaches a model, and prompts are checked for injection attempts. Access is authenticated and rate-limited per user, and every exchange is written to an audit trail. Anything the assistant cannot answer confidently is escalated rather than guessed.
- Python
- LangGraph
- Presidio
JVM Vulnerability Service
Watches running JVM applications for publicly disclosed vulnerabilities and tells the owning team what to do about them.
What it does
A Java agent attached to a running process reports what the JVM actually loaded, rather than what the build file claims. The service matches that inventory against open vulnerability databases and notifies the owning team, ranked by severity, with remediation options attached. Nodes are enrolled by an administrator and report their status over JMX and the service UI. Findings carry the evidence that produced them, so a team can see which loaded artefact triggered a match before deciding to act. The point is the gap it closes: dependency manifests and running processes drift apart, and only the second one is exploitable.
- Java
- JMX
- CVE
Osteopathic Examination
A Flask application for running a full osteopathic examination across the five WHO models, in eight interface languages. A language model turns the findings into a clinical summary, a working diagnosis and a prioritised treatment plan.
- Python
- Flask
- Bootstrap
You should know IT live
Conversations with IT people about what they actually do — architects, analysts, SRE, testers, designers, founders. Three seasons and 45 episodes, indexed here by topic, in audio and video.
- Podcast
Everything else
Nothing matches that combination.
AI engineering & agents
-
People Search
An earlier take on the same problem as the people search agent: FastAPI, DuckDuckGo, a confirmation loop and an LLM-written report, with the graph written out procedurally instead of with LangGraph.
-
Website to Docs
Crawls a site within one domain and exports what it finds as a single PDF, DOCX or ODT. Deliberately dependency-light: no headless browser, plain heuristics for pulling readable text.
-
AI Book Writer
A desktop-first fiction editor in Flutter with the manuscript modelled as book, part, chapter and scene. Assistance comes from whichever provider you point it at — Ollama locally, or OpenAI, Gemini, Perplexity, OpenRouter.
-
PDF to MP3
Turns a PDF into an audiobook: a language model cleans the extracted text into something worth listening to, then a GPU renders it to speech.
-
Multilingual Transcriber
Transcribes audio and video locally with speaker diarisation, handling files that switch between Russian and English mid-sentence. Nothing leaves the machine.
-
Podcast Translator
Takes a speaker-labelled transcript, translates it, marks it up as SSML and renders a new MP3 — the same episode in another language, with a voice per speaker.
-
Workspace RAG Search
Retrieval over documents with workspaces kept genuinely separate, built on PostgreSQL and pgvector rather than a dedicated vector store.
-
Vanna v2 Reference Server
A minimal reference server for Vanna v2: FastAPI, a built-in chat UI, and the same conversation available over server-sent events, polling or a WebSocket, against four LLM providers.
-
AI Discovery Chat
An interview assistant that walks a financial-sector company through an AI adoption discovery, built as a deliberately small AWS stack: one Lambda, Bedrock, DynamoDB.
-
IT Trends MCP Server
An MCP server that gathers signals about which technologies are gaining ground — Reddit, Google Trends, GitHub Trending, Stack Overflow — and renders them as HTML, PDF or Excel reports.
-
IT Trends Telegram Bot
The consumer side of the trends server: an aiogram bot that runs the analysis on a schedule and publishes the result to a channel.
-
vLLM on Windows
Batch scripts that get vLLM running on Windows without the usual afternoon of yak-shaving, with a launcher per model.
-
Shazam Artist Stats
A zero-dependency CLI that reports how many times an artist has been Shazamed, per track. Shazam publishes no such API; this walks the iTunes catalogue and reads the counts off the public song pages.
-
Multi-Agent Analytics Assistant
A multi-agent analytics assistant that answers business questions by pulling from databases, documents and REST services at once. A planner decides the route, specialised agents fetch, and a critic checks the answer before it is returned.
What it does
The orchestrator is deliberately stateless: it loads and saves state externally at each step, so a conversation can be resumed or moved between workers. Tools are discovered rather than hard-wired, and each is rate-limited independently. A question is decomposed into sub-questions that run in parallel where they do not depend on one another, which is what keeps a multi-source answer inside a usable response time. The critic agent exists because the failure mode that matters in analytics is not a crash but a confident wrong number. When the critic cannot support a figure from the retrieved evidence, the assistant says so rather than smoothing it over.
-
Text2SQL for PostgreSQL
Natural-language questions turned into SQL against PostgreSQL, reachable from a CLI, a web UI or Slack, with a training pipeline that ingests schema, worked examples and prose documentation.
What it does
Training data is treated as a first-class artefact rather than a prompt: schema definitions, question-and-query pairs and documentation are ingested into a local vector store and versioned alongside the code. The model provider is swappable, which matters when the database is not allowed to be reached by a hosted model. Generated SQL is shown before it runs, and read-only credentials keep an unlucky generation from becoming an incident. The three front ends share one service, so a query answered in Slack and the same query in the web UI take the identical path. What made it useful in practice was less the generation than the training loop: every corrected query goes back into the store and the same question stops being wrong.
-
Multi-Agent Assistant on AG2
An earlier multi-agent assistant, built on AG2, splitting the work across a manager, a database agent, a documentation agent, a caching agent and a security agent that vets both requests and responses.
What it does
Requests are classified and routed to a specialist rather than handled by one general agent, and the database agent retries its own failed queries instead of surfacing them. A caching agent matches new questions against previous ones by similarity, which cuts both cost and latency on the questions people actually repeat. The security agent sits on both sides of the exchange, screening what goes to a model and what comes back, so a single component owns that concern instead of it being sprinkled through the others. Splitting the roles this explicitly made each one testable on its own, which is the part that carried over into the later version. Its limitation was the flip side of the same choice: the routing lived inside agent conversations, and when it went wrong there was no graph to look at.
-
PDF Audiobook Bot
The PDF-to-audiobook converter as a Telegram bot for many users at once: a Celery and Redis queue, live progress with an estimate, per-user access tokens and history.
What it does
Converting a book takes minutes on a GPU, so the interesting part is not the conversion but everything around it. The queue has to survive a restart without losing a job someone has been waiting ten minutes for, and progress has to mean something to the person watching rather than jumping from nothing to done. Access is handled with time-limited tokens issued per user, because a single GPU cannot serve an unbounded audience and the limit needs to be a policy rather than a queue that quietly grows. An admin side shows worker health and the current backlog, which is what tells you whether a stuck job is the file or the machine. The conversion itself is the same pipeline as the single-user tool; nearly all the code here is the operational shell around it.
-
Book Club Voice Assistant
A voice assistant that joins a Zoom call as an ordinary participant, listens for its name, and answers about the book under discussion — out loud and in the chat, quoting the passage it relied on.
What it does
The book is split into passages and indexed for full-text search before the call, so an answer can cite a specific place rather than paraphrase the whole thing. Audio is recognised locally and the reply is spoken through the system voice; the call itself is joined through the Zoom web client under browser automation, which avoids needing anything installed on the meeting side. Recognition runs continuously but the assistant only acts when it hears its own name, because a book club is a conversation between people and an assistant that answers unbidden ruins it. Latency is the real constraint: an answer that arrives after the discussion has moved on is worse than no answer, so retrieval is local and the index is built ahead of time. Quoting the source passage turned out to matter more than the answer itself — it lets the group argue with the book rather than with the assistant.
-
Attendee List Enrichment
A skill for coding agents that takes a spreadsheet of seminar attendees and fills in what is publicly known about the companies they work for, returning a validated report with every claim carrying its source.
What it does
The work is split into independent units so an agent can dispatch them in parallel and each result can be validated on its own. Every piece of evidence carries the source it came from, and sources are labelled by how open they are, so whoever consumes the report can discard any tier they do not want to rely on. The output is schema-validated rather than free text, which is what makes it usable as an input to something else instead of as something a person has to read and retype. Anything the sources do not support is left empty rather than guessed — a blank cell is information, an invented one is a liability. Written as an agent skill rather than an application, it is a set of instructions and schemas a coding agent executes, so it fits wherever that agent already runs.
JVM & security
-
Vulnerable Class Finder
Given a CVE identifier, works out which Java classes are actually the vulnerable ones, by reading the advisory, the linked commits and whatever references exist, and returns the fully qualified names with citations.
What it does
A CVE record tells you a library and a version range; it rarely tells you which classes matter, and that is the thing you need to know whether your code is exposed. The agent pulls from advisory databases and source hosting, matches descriptions against class names, and returns structured output rather than prose. Where a fix commit is linked, the changed classes are the strongest available signal, so the commit is read in preference to the prose description. It works without search API keys, falling back to a simpler retrieval path when they are absent. Every class it names carries the reference that produced it, because an unsourced list of class names is not something anyone should act on.
-
CVE Analyser
The second generation of the same idea, rebuilt on LangGraph: the same question about vulnerable Java classes, answered through an explicit graph with pluggable model providers and search backends.
What it does
Rebuilding the agent as an explicit graph made the retry and fallback behaviour visible instead of buried in control flow. It processes repositories and commits linked from a CVE record, extracts what it can from non-repository references, and emits JSON. Both the model provider and the search backend are swappable, which is what lets the same graph run against a hosted model or a local one without touching the logic. When a node fails it degrades to a weaker source rather than aborting, so a partial answer with named sources beats no answer. Together with its predecessor and the JVM vulnerability service, it is the third pass at the same problem, each one moving further from manual work.
-
Zulu Tomcat Images
A build matrix of Tomcat container images on Azul Zulu: three Tomcat and JDK generations across five base distributions, all generated from one configuration file.
-
Java Modules Example
A two-part worked example of the Java module system: dependent modules first, then a module that deliberately depends on components with known vulnerabilities, packaged with jlink.
Interactive & graphics
-
Replax
An Android application built with Expo. Its privacy policy and terms still live in this repository and are still served from it.
What it does
The application itself is closed, but two artefacts of it remain public and must stay reachable: the privacy policy and the terms and conditions, both linked from outside this site. They are the reason those two files are excluded from every cleanup, and the reason this entry exists at all rather than being dropped. Expo was chosen to get one codebase onto Android without a native toolchain, which was the right trade at the time and is why the project shipped. What is left is the least interesting part of the work and the only part that still has to run. It is listed here because a portfolio that quietly omits the things that ended is not an honest one.
Teaching
-
ML Practice Track
A year of machine learning practice kept in public from day one, from NumPy vectorisation to training on a GPU — the repository is the portfolio.
-
GPT Tutorial
A numbered walk through working with language models, with the same ground covered in Python, Java and Node so a reader can follow it in their own language.
-
Vibecoding, episode 1
The artefact from the first live coding episode: a weather CLI with no third-party dependencies, historical averages bundled and a live source behind a flag.
-
Vibecoding, episode 2
The artefact from the second episode: a currency lookup built as a React front end over a TypeScript service, written in the same sitting.
Medicine & osteopathy
-
Five Osteopathic Models
A bilingual teaching app for the five osteopathic models: each one explained, then quizzed, with the next locked until you clear eighty per cent and a review mode that keeps returning your mistakes.