( 01 — Approach )
Most portfolios list tools. This one shows what broke, and what I did about it.
( 02 — Selected work )
( 03 — Background )
I have been on both sides of a hiring pipeline. That is why I build tools for it.
I started as a Python developer in 2022, building Telegram bots. In 2025 I moved into IT recruitment in Prague: first at a large systems integrator, then at a staffing company, sourcing and screening engineers for enterprise clients.
Two years of watching how much of that work is done by hand sent me back to code. Now I build the tools I wished I had: automation, LLM applications, internal systems. Everything on this page is shipped and in use.
Python, TypeScript, JavaScript, SQL, Bash, HTML, CSS
Anthropic API and SDK, Claude models, prompt design, guardrails and forbidden-phrase checks, structured JSON output, output validation in code, few-shot examples, retry loops with feedback, rejection logging for prompt tuning, LangChain
FastAPI, Uvicorn, Pydantic, REST API design, HTTP Basic auth, OAuth 2.0, background tasks, PostgreSQL, SQLite, Supabase, Row Level Security, triggers and SQL functions, sequences, realtime subscriptions
LinkedIn REST API, Telegram Bot API, Telegram public mirror, Google OAuth, requests, BeautifulSoup, lxml, ICS and JSON exports
React 18, hooks, Context API, Vite, TypeScript, vanilla JS SPAs, native drag-and-drop, Three.js, responsive CSS with custom properties, IntersectionObserver, no-framework pages like this one
Linux (Ubuntu), Hetzner VPS, systemd services and timers, nginx reverse proxy, Let's Encrypt, ufw, SSH and rsync, bash provisioning, GitHub Actions CI/CD, Vercel, DNS and custom domains, Docker, environment and secrets management
pandas, NumPy, Jupyter, matplotlib, seaborn, CSV pipelines, data cleaning, time-series aggregation
Git and GitHub, dry-run modes, TestClient smoke tests, pytest, testing on real accounts, Figma to code, design tokens, Claude Code as a daily tool
( 04 — How I work )
I test on real data and real accounts, not fixtures, and I fix what the real output shows. The first version ships early and gets corrected in the open.
With LLMs, the contract for what the model may not do matters more than the prompt for what it should. Anything the code can decide, the code decides.
A VPS, systemd and SQLite beat a platform whenever the platform's limits would become my problem. Fewer moving parts, fewer 3 a.m. surprises.
I build with Claude Code in the loop for design, implementation and review. I own the architecture, the verification and what ships.
( 05 — Looking for )
A remote developer contract in the EU. LLM application work or Python backend.
( 06 — Contact )
Let's talk.