vladislav@rajtik:~$ whoami
Vladislav Rajtmajer
Senior PHP / Laravel Engineer
Plzeň, Czech Republic · remote · contract (IČO)
available now for new contracts
vladislav@rajtik:~$ cat about.md
12+ years building web applications and backend systems. I work mostly in Laravel: REST and user-facing API design, PostgreSQL, queues, and the boring reliability work that keeps APIs predictable. On the frontend I build with Livewire and Vue.js.
Before the web I spent a decade in embedded and IoT, writing firmware in C for Atmel AVR and PIC, binary protocols and telemetry pipelines. That is where I learned to keep data contracts strict and to treat edge cases as the normal case.
I use AI every day, in the products and in the editor, and I know where it breaks. So the model gets a strict schema and the boring tools, and the tests, not the model, say when the work is done.
# Open to long-term remote contracts on a modern PHP/Laravel stack.
vladislav@rajtik:~$ cat ai.md --in-production
Billify LLM in production Claude reads supplier PDF invoices into a typed schema: structured output, temperature 0. The exchange rate of the Czech National Bank (ČNB) comes from a tool backed by my own rate service, never from the model. Anything ambiguous lands in a review note and a human confirms every row. Per-team quota, audit log, the cheapest model that holds up (about $0.01 per PDF). pis-cesky open-source Claude Code plugin Teaches the model to write Czech that does not read like a translation. Not a blacklist of phrases: rules derived from human-written Czech, and a proofreading agent that never sees the brief, so it judges only the text. Daily workflow Claude Code AI is one of my tools, not the author. When it helps, I use it to analyse a codebase, weigh options, review a change or take over routine work. Design and decisions stay with me, and nothing merges until Pest and PHPStan pass and I have read the diff. I measure what it costs (token audits) and write about where it fails on blog.rajtik.com. vladislav@rajtik:~$ ls projects/
privacy CAPTCHA · EU Proof-of-work CAPTCHA, GDPR-first. No tracking, no Google. Ships with its own Laravel package and WordPress plugin.
invoicing API · LLM · CZ Issue invoices over a clean REST API. Built for developers who'd rather call an endpoint than click through accounting software. An LLM reads received PDF invoices into the monthly VAT return.
open-source product · PoE2 Free Path of Exile 2 companion built with Laravel, React and Inertia: build planner, passive-tree tools, loot-filter generator and shareable builds.
game tooling · OSS Framework-agnostic TypeScript toolkit for GGPK extraction, typed game-data extractors and a headless passive-tree geometry engine with a React renderer. Used by Exile to Exile.
writing · CZ/EN Workshop notes: I write about programming, electronics, AI tooling and freelancing. In Czech and English.
ESP32 · Laravel · PostgreSQL Balcony weather station, end to end. ESP32 firmware in C++ reads four sensors over I2C and I2S, hears rain in the microphone spectrum and keeps a day of readings on flash when the network drops; schematics in KiCad. A Laravel ingest API stores it in PostgreSQL. Sun heats the radiation shield, so a regression model calibrated against the Czech Hydrometeorological Institute (ČHMÚ) station Plzeň-Mikulka subtracts that heating from light and sun position. It only goes live after it beats the raw sensor on days it never saw.
vladislav@rajtik:~$ cat packages.json --published
ships across 3 ecosystems: Composer · WordPress.org · npm
vladislav@rajtik:~$ cat exile2exile app/Services/GameDataReleases.php
public function activate(string $version): void
{
if (! $this->has($version)) {
throw new RuntimeException("release {$version} is not staged");
}
$tmp = $this->currentLink().'.'.bin2hex(random_bytes(4));
if (! @symlink("releases/{$version}", $tmp)) {
throw new RuntimeException("could not create the swap symlink at {$tmp}");
}
if (! @rename($tmp, $this->currentLink())) {
@unlink($tmp);
throw new RuntimeException('could not swap the current symlink');
}
} Excerpt from Exile to Exile. Validated game-data releases activate through an atomic symlink swap: every request sees either the prior complete release or the new one, never partial data.
vladislav@rajtik:~$ git log --oneline --career
2022 - now PHP Developer · Freelance (OSVČ) Web apps, REST + user-facing APIs, Livewire, Vue.js, PostgreSQL.
2021 - 2022 PHP Developer · UBK s.r.o. Laravel development across multiple client products.
2018 - 2021 Developer · Freelance CMS for an international company. SCRUM, English-only daily comms. PHP 8, Nette, MariaDB.
2016 - 2018 Developer · MySolutions s.r.o. Dating platforms across 12 countries. SCRUM, English-only standups. PHP, Nette, MySQL.
2013 - 2015 IT Administrator & Developer · Yazaki In-house software for warehouse management of wiring harnesses, alongside IT administration.
before 2013 Embedded, IoT & systems engineering A decade of firmware in C (Atmel AVR / PIC) incl. a banknote validator, binary hardware protocols, telemetry APIs, LoRaWAN; Linux/Windows servers; Delphi/FoxPro business apps.
vladislav@rajtik:~$ cat stack.txt
PHPLaravelREST API designPostgreSQLMySQLRedisPest / PHPUnitPHPStanLivewireVue.jsInertiaTypeScriptLLM integration (Claude, laravel/ai)Claude CodeDockerLinuxembedded CIoT / LoRaWAN
English: working proficiency, years of English-only daily standups. Czech: native.
vladislav@rajtik:~$ contact --now
vladislav@rajtik:~$ cv --download
vladislav@rajtik:~$