vladislav@rajtik: ~/about

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/

CaptchaAPI

privacy CAPTCHA · EU

Proof-of-work CAPTCHA, GDPR-first. No tracking, no Google. Ships with its own Laravel package and WordPress plugin.

Billify

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.

Exile to Exile

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.

POE2 Toolkit

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.

blog.rajtik.com

writing · CZ/EN

Workshop notes: I write about programming, electronics, AI tooling and freelancing. In Czech and English.

Weather Station

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

captchaapi/laravel Composer · Packagist
captchaapi WordPress.org · reviewed plugin
poe2-toolkit · @poe2-toolkit/ggpk npm · GitHub

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:~$