Hi, I'm
Štěpán Zrník
PHP Oracle && AI Operator
AI is part of my workflow — bugs start sweating, and I pretend this was the plan all along. (It usually was.)
What I do
Backend
PHP 8+, Symfony, Nette, Doctrine ORM, MySQL, PostgreSQL — the part I actually know.
Frontend
React, Vue, TypeScript, Bootstrap, Tailwind CSS — I survive, but don't expect a UI designer.
Tools
Git, Docker, CI/CD, Linux, PHPStan MAX, nginx, React Native.
What about AI?
I treat AI as a normal part of the workflow, not as a LinkedIn sticker. I use Claude, Codex, and other tools for research, solution drafts, code review, writing, automation, and AI API work. The code and decisions still stay with me — AI is a faster teammate, not an unsupervised autopilot.
Where I left fingerprints
Recruitis
ATS — complete solution for managing candidates and the entire recruitment process.
Where exports have moods, integrations have egos, and bugs prefer Fridays.
recruitis.ioDatixo
Campaign aggregation and evaluation in one place.
Lots of code, lots of Docker, lots of OpenAPI — surprisingly few reasons to cry under the desk.
datixo.comTescoma
ShopSys e-shop — first time working in a larger team on a shared codebase.
Big team, big e-shop, big monolith — excellent training for humility and code review faces.
Receptoid.cz
Recipe website — vibe coded from scratch, because I wanted to see how far I'd get.
A “what’s the worst that could happen?” experiment that somehow became a public website.
receptoid.czXeMeL
E-shop XML feed management and conversion — XML hurts, but I survived.
XML feeds: proof that brackets can have trauma and pass it on.
BiddingTools
Bidding tools for Heureka and Zboží.cz — project is dead, the code lives on.
Bidding, prices, and e-shops — math where a mistake is not a bug, it’s an invoice.
Code Samples
Things born from laziness, stubbornness, and the sentence: “fine, I’ll write it myself”.
zweist
OpenAPI routing for Slim 4 — self generating router from OpenAPI attributes on Slim controller methods.
Because writing routes twice is exactly the kind of activity robots were invented for.
View on GitHubCNB-Exchange
Production tool for fetching and parsing CNB (Czech National Bank) text files for moneyphp/money exchange rates.
CNB has a text file. I have a parser. We all pretend this is a normal way to distribute rates.
View on GitHubphp-attribute-reflection
PHP 8 attributes are cool — reading them? Not so much. This wrapper makes it a little bit less painful.
Reflection API with a reduced urge to throw the laptop out the window.
View on GitHubPHPUnit-Exceptions
Trait that saves you from rewriting assertThrows over and over. Nothing more, nothing less.
A tiny trait against repetition. Copy-paste is a gateway drug to suffering.
View on GitHubtoggl-to-clickup-time-tracking-sync
Toggl → ClickUp sync — ClickUp UI sucks, so I track time in Toggl and let this handle the rest.
ClickUp UI failed to convince me, so I routed around it. Diplomatically speaking.
View on GitHubclaude-usage-windows-taskbar-widget
Vibe coded C# taskbar widget tracking Claude API usage — so the invoice doesn't surprise me.
A widget watching the Claude bill before the Claude bill starts watching me.
View on GitHubContact
A project, a bug report, hello, or a ritual stacktrace sacrifice?