Work projects
-
Legal AI platform
ML / AI Engineer: search, backend, infrastructure
ThomasMore AI, Apr - Sep 2026
Search and an LLM assistant over 7M court cases
Lawyers search for similar cases and ask the assistant questions, and it answers with links to real court decisions. External AI agents use the same search through an MCP server. A team of two engineers, 19 services in production, 380 commits in 5 months.
I built the search the assistant runs on: it searches by meaning and by keywords, then reranks the results, about 100M vectors in total. I moved it to the bge‑m3 embedding model with zero downtime, re-embedding 44M text chunks, and median response time dropped from 4.5 to 2.7 s. Case number lookup went from 19.9 to 0.039 s, and search node memory from 13.5 to 1.6 GB.
Python, FastAPI, Qdrant, PostgreSQL, Redis, bge-m3, MCP, Docker, GCP, Azure, Prometheus, Grafana
-
Lead handling and data collection automation
AI Automation Engineer: LLM pipelines and agents
NDA, Feb 2025 - Feb 2026
Customers get a reply in 10 seconds instead of 2 hours
The goal was to take load off the sales team and the people who collected data from websites by hand.
Incoming requests are now handled by an LLM pipeline on n8n: it figures out what the customer needs, their budget and urgency, and replies right away. First contact with customers is no longer on the sales team.
An agent built with LangGraph and Playwright collects data from 200+ websites with about 98.5% accuracy. It plans its own steps, checks the result and fixes its mistakes, and finds buttons and fields by meaning, so it depends less on page layout.
Python, FastAPI, n8n, LangGraph, Playwright, PostgreSQL
-
On-premise document search
AI Automation Engineer: RAG and infrastructure
Intracom, Jan - Sep 2025
Company document search with no internet and no GPU
Employees needed to find answers fast across more than 50K internal documents, but data could not be sent to external services.
I built search with LLM answers (RAG) that runs entirely on the company server. It searches by keywords and by meaning and picks up new and changed documents on its own. I ran the embedding model on a regular CPU with ONNX Runtime, under 150 ms per query, so no GPU was needed.
Python, ONNX Runtime, BM25, PostgreSQL, Linux
-
Crypto exchange aggregator
Backend / ML Engineer: backend and forecasting models
NDA, Jun 2023 - May 2025
Trading on five exchanges through one API
The goal was to trade on Binance, Bybit, OKX, KuCoin and Gate.io from one system without dealing with each exchange’s quirks.
I built a single order format on top of all five. The key was never to lose or double money: a retry never creates a second order, every order’s state is reconciled with the exchange, and if it is unclear whether an order was filled, the system stops instead of guessing. Amounts are computed in Decimal with no rounding errors, and market data comes over WebSocket and survives exchange outages.
On top of that sits a forecasting layer: MLP, LSTM and Random Forest on price history plus FinBERT news scores over 500K headlines. About 63% accuracy on noisy data. The project became the basis of my master’s thesis.
Python, FastAPI, asyncio, PostgreSQL, WebSocket, PyTorch, scikit-learn
Personal projects
Outside work I build what I find interesting, from a poker bot to a Python IDE for a phone. When the data shows an idea does not work, I drop it instead of spending time and money on it.
-
Poker AI
Aug 2026 - present
10M solved game situations for $31 on rented GPUs
A no-limit hold’em bot in the style of DeepStack: on every move it solves the game again instead of looking the answer up in a precomputed table.
I wrote my own solver in CUDA and Rust and neural networks that evaluate positions so the whole game tree does not have to be searched. Their training data comes from a pipeline on 20 rented GPUs that restarts failed machines on its own. An opponent model in LightGBM, trained on 5.9M decisions by real players, predicts their moves 7% more accurately than standard frequency tables. Over 700 commits, still in progress.
Rust, CUDA, Python, PyTorch, LightGBM, Vast.ai
-
Whales on Solana
May - Jun 2026
Copying whale trades loses money, and the data shows it
Question: can you make money by copying the trades of big players, whales, on Solana?
For a month, a bot tracked whales around the clock and logged every token they bought and what happened to it next. Of 2,592 tokens, 62% turned out to be scams: the creator pulled the money, most often within the first hour. The model was decent at guessing which token would pump, but its most confident picks were scams 100% of the time, because the same tokens pump and then crash.
Conclusion: the whale sells first, while a copier sees the trade a minute later and exits last. Finding this out cost $0 instead of a blown deposit.
Python, asyncio, FastAPI, SQLAlchemy, Docker
-
Polymarket backtest
May 2026
A +20% strategy turned out to be a mirage
Question: are there strategies on Polymarket, a prediction market for events like the bitcoin price or elections, that make money consistently?
The first idea, buying yes on favorites, showed +20% on history. But the site only returns 10K markets, mostly ones that closed early, and that skewed the result. I worked around the limit and downloaded all 54K markets, and on the full history the same strategy lost money.
Conclusion: of 72 other strategies, only two survived testing with fees and slippage, both on crypto markets. Everything was tested on historical data, with no real money.
Python, DuckDB, Polars, scikit-learn
-
Radar for EVE Online
Oct 2026
Shows who hunts in a given area of space, based on the history of 453K pilots
In EVE Online, explorers are stalked by hunters who camp the same systems for months. If you know them in advance, you can avoid getting caught.
The site shows who hunts in a given region, checks every player in a system’s chat at once and adds hunters to in-game contacts via EVE account login. The database is built from 363 daily kill archives, 4M records of pilots by system.
Python, FastAPI, SQLite, OAuth with PKCE, Caddy, GitHub Actions
-
hh.ru employer scraper
Mar - Apr 2026
Employers from hh.ru and their contacts in one table
Goal: collect companies from hh.ru, the largest Russian job board, by industry and region and find their contacts.
A command-line tool pulls employers from the official hh.ru API with OAuth login, then a browser visits company websites, finds contact pages on its own and extracts emails and phone numbers. If a crawl is interrupted, it resumes where it stopped, and duplicates are dropped. Data is stored in SQLite, with export to CSV and JSON.
Python, Playwright, BeautifulSoup, SQLite, Typer, Rich
-
ScriptFlow
Feb - Mar 2026
Write and run Python right on an Android phone
Goal: write and run Python scripts when all you have is a phone.
A Kotlin app: a Python editor with syntax highlighting, opening and saving files, running scripts in the background with live console output, and stopping hung scripts. Python runs inside the app itself via Chaquopy, with no server and no internet.
Kotlin, Android SDK, Chaquopy, Material Components
-
News and bitcoin
2023 - 2025
News does not help predict the price, and that is a result too
Master’s thesis: can news predict the bitcoin price one hour ahead?
I collected the data with my own scrapers: 56.5K hours of prices and 265K news items. I turned the news into vectors with DistilBERT and trained three neural networks (MLP), testing them only on the period after training so the model could not peek into the future.
Conclusion: news did not improve accuracy. I defended the negative result as it was, and two papers on the topic were published in a scientific journal.
Python, PyTorch, Transformers, pandas, scikit-learn
-
Image steganography
Mar 2023
Text hidden in an image with no visible difference
University project: hide a message in an ordinary image so that nobody can tell.
The app writes the bits of the text into the least significant bit of the red, green and blue channels of each pixel, so a color changes by at most 1 out of 256. The start and end of the message are marked, which lets the program tell whether an image contains text and extract it cleanly.
C#, .NET Framework, WinForms, System.Drawing
-
Car service website
Dec 2022
Online booking for a car service with user accounts and an admin panel
University project: a website where customers sign up, book a service or order parts, and an administrator manages services, materials, customers and orders from an admin panel. Role-based access, data in MySQL.
C#, ASP.NET Core, Blazor Server, MySQL, Bootstrap
How I work
Measure first, conclude second
I traced a 5x slowdown through 13 hypotheses. The culprit was an unpinned package, not what everyone suspected.
Production must be observable
Monitoring from scratch with Prometheus and Grafana, about 30 targets, alerts in Telegram. Deploys with health checks and automatic rollback.
LLMs only where they work best
A TF-IDF and LinearSVC classifier gets the dispute type right in 97.4% of cases versus 92.5% for an LLM, 99.2% on an external test, and costs many times less. The LLM stayed only where nothing else would do.
AI writes code, I own production
I am not shy about using AI: it speeds up development a lot. People noticed that some documents were not being fully downloaded, and with the help of an LLM I fixed the two defects that were losing data without a single error in the logs. About 600K documents were recovered.