Oleksii Ilienko Email me

Available now: remote

Oleksii Ilienko, Kyiv

Full-stack Laravel developer PHP 8, Vue 3, TypeScript

Backend-leaning full-stack developer. I build systems where a mistake costs money: customs declarations, encrypted government APIs, ERP and warehouse integrations, with Vue 3 interfaces on top.

3+ years of commercial Laravel and Vue 3. English B2, Ukrainian native. CV (UA)

01 / Case files

Two production problems, short versions

ProCargo · queues

The fix the AI got wrong

  1. ProblemBackground jobs took 5-10 s each.
  2. Wrong turnClaude Code proposed a fix that looked plausible. It was wrong.
  3. Found byTimed each stage of the job in the logs and inspected the job payloads in the jobs table.
  4. Real causesThree of them: dispatchAfterResponse lost jobs under PHP-FPM, the chain carried 192+ serialized jobs instead of IDs, and a cache lock deadlocked.
  5. Result0.5-1 s per job, 10x faster.

ProCargo · customs API

A customs API you cannot safely retry

  1. ProblemThe customs API is not idempotent: a retried call creates a second shipment.
  2. RiskParallel workers could also hand out one track number twice.
  3. FixRedis locks with TTLs tuned to the API timeouts and lockForUpdate inside a transaction.
  4. RetriesA non-idempotent customs call gets exactly one attempt, no automatic retry. Other jobs retry as usual.
  5. ResultNo duplicate track numbers since release.
02 / Selected work

Two production platforms, one year

PSP Express, customs clearance and logistics, Jul 2025 - Aug 2026, until the company laid off its entire IT department, including the CTO. My team was two people, me and the Head of Engineering; I also reviewed pull requests from the company's other product teams. Main developer of ProCargo, lead developer of ICS from June 2026.

ProCargo

Closed source

B2B platform for customs declarations and shipment tracking. I took it over as legacy and became its main developer.

  • RoleMain developer, backend and frontend
  • StackLaravel 10, Inertia, Vue 3, TypeScript
  • Commits~70% of 1,000+
  • PeriodJul 2025 - Aug 2026
  • Background jobs 10x faster, from 5-10 s to 0.5-1 s per job. The case
  • KPI dashboard from 15 s to 1 s with aggregated queries and batched lookups instead of per-row loading.
  • Safe shipment creation over a non-idempotent customs API: one attempt per customs call, no automatic retry, no duplicate track numbers since release. The case
  • Designed the register pipeline across customs, ERP and WMS: a state machine on Bus::chain and Bus::batch with rollback.
  • Frontend rebuilt on Vue 3 and TypeScript, with a component library, light and dark themes and two full redesigns.
  • Two legacy PDF helpers (900+ and 870+ lines) replaced by one service, zero downtime.
ProCargo shipment registers table with filters, statuses and document actions
Shipment registers, filtered by AWB, track code, manifest, client and depot.
ProCargo depot cash desk with balance totals and a cash operation form
Depot cash desk.
ProCargo cashier receipts list with filters by operation type, status and date
Cashier receipts.
How it works engineering detail

Register pipeline

An Excel register flows through customs, ERP and WMS on Bus::chain and Bus::batch, modelled as a state machine with rollback, so a partial failure restarts safely.

KPI dashboard, 15 s to 1 s

Per-row loading replaced with GROUP BY aggregates, lookups batched by 500 to stay under the MySQL placeholder limit, and details lazy-loaded on demand.

Integrations

Saloon connectors, retries on 5xx only, typed exceptions. Customs over SOAP with encryption and qualified e-signatures, Cashalot fiscal service, Odoo ERP, OMS/WMS. A feature flag between two customs modes gives an instant rollback. Files on AWS S3.

PDF migration and security

The two PDF helpers moved into one service in 15 steps, covered by PHPUnit feature tests. Security pass: fail-closed webhooks, hash_equals, an IP allowlist that ignores X-Forwarded-For, 2FA attempt limits, hashed reset tokens.

ICS customs portal

Closed source

Multi-tenant portal between customs brokers and the Ukrainian customs system, holding about a million shipments.

  • RoleDeveloper, lead from Jun 2026
  • StackLaravel 12, Filament, Vue 3
  • Scale~1M shipments
  • PeriodAug 2025 - Aug 2026
  • Qualified e-signing moved into the browser: the private key never leaves the client. Ran in production.
  • Multi-tenancy with RBAC on a legacy codebase in a month: per-tenant branding, 6 roles, ~30 scoped permissions.
  • Set the ICS coding conventions with the Head of Engineering and reviewed pull requests from other teams.
  • Audit of ~2M counterparty records with an entity resolution rule: no false merges, borderline cases go to manual review.
ICS dashboard with a greeting, unread customs decisions, quick actions and counters
Dashboard: unread customs decisions, quick actions, counters, 7-day shipment chart.
ICS list of free import manifests with filters and a merge into project action
Free manifests, merged into projects.
ICS shipment card with general information, sender, recipient and goods, filled with test data
Shipment card, test data.
How it works engineering detail

Browser e-signing

Signing runs in a Web Worker through IIT EndUser. The server prepares deterministic XML bytes, the browser signs them, the server sends them unchanged, so the signature never breaks. A SHA-256 content key makes sending idempotent, retries never re-sign, and a scheduled, rate-limited queue sends in batches.

Encrypted customs transport

SOAP with an AES-256-CBC payload, an RSA-encrypted session key and qualified e-signatures. The register chain runs as a queue pipeline: send, poll with backoff, parse, feed the result into the next stage.

Entity resolution

Load-test rows found and excluded first. Match keys handle names in any word order, shared consolidator phones and addresses in mixed languages. A false merge is never acceptable, so anything borderline is queued for a person.

Tenancy and access

Each tenant gets its own users, shipment flow and branding: colours, text or SVG logo, live preview applied across the whole interface. RBAC with 6 roles and about 30 scoped permissions.

Before and after

Two redesigns, same data

Drag the handle across the screen, or focus it and use the arrow keys.

Customs request. Same data, regrouped into cards. Buttons in mixed colours became one button colour; taxes and HS code warnings get their own block.

Customs request screen after the redesign, grouped into cards
Customs request screen before the redesign, with competing button colours
BeforeAfter

Full size:before /after

Permissions. A flat table of raw keys became a role editor: roles on the left, permissions grouped by module with readable labels.

Role editor after the redesign, with roles on the left and grouped permissions on the right
Permissions list before the redesign, a flat table of raw keys
BeforeAfter

Full size:before /after

ProCargo public site

Closed source

WordPress marketing site that hands logged-in users to the Laravel app without a visible seam.

  • RoleDeveloper, built and maintained it
  • StackWordPress, Laravel
  • Builtin 2 months, maintained for a year
  • Shipped the WordPress site in 2 months, then maintained and upgraded it for a year.
  • Shared session with the Laravel app: a visitor goes from the landing page to a submitted shipment in one flow.
  • Tariff calculator and pricing tables fed from the application, two languages, both themes.
ProCargo landing page with a hero image and quick cargo actions
Landing page.
Shipping tariffs page with a quick price calculator
Tariffs and calculator.
Client shipment management page with totals and a shipments table, test data
Client shipments, test data.

incident-core

New service, 2026 · TypeScript frontend, Laravel backend, REST API

A service that collects incidents from every company system. Started from scratch, first version shipped in 2 weeks.

03 / How I work

What you get on a team

  1. ABackend to interface

    Schema, queues, API, interface, release. I took over a legacy product and became its main developer, the one who knows every part of it.

  2. BReliability by default

    I assume the other side will time out, retry and fail halfway, and design for it.

    idempotency keys · Redis locks · lockForUpdate · transactional outbox · state machines · fail-closed webhooks

  3. CAI-assisted delivery

    Claude Code with role-based subagents for planning, tests and review, every day. It drafts and checks; I decide. The queue case shows why.

  4. DTakes over legacy

    Read it, cover it with tests, then change it. The PDF helpers went in 15 steps behind feature tests.

04 / Earlier

Before PSP Express

Prof-IT, outsourcing · Jan 2023 - Apr 2025

NotAI: a game for a client Telegram Mini App with 10M+ registered users.

  1. BackendLaravel: data model and queue-based processing for high concurrency.
  2. ClientUnity WebGL game with Telegram integration in TypeScript.
  3. PaceStarted May 2024. Prototype in a week, release in 2 months, with a PM and two QA.
  4. AlsoInternal CRM and ERP on Laravel, Vue 3, PostgreSQL and Docker. A heavy report cut from 2.5 s to 1 s.

Country Balls: Orc Destroyer

Side project · SunLab Games · Unity, C# · Mar 2022 - Oct 2023

Released Country Balls: Orc Destroyer on Android in a two-person indie team, ~5,000 installs with no paid marketing (Unity, C#). On APKPure

05 / Open source

Code you can read

Three public repositories, each with CI. The third is Next.js and TypeScript.

laravel-telegram-helpdesk

Flagship

A Telegram support desk built for PSP Express and published with the company's permission, company data removed. Every client gets a forum topic in the operators' group, and operators answer right there.

  • Laravel 12
  • Nutgram
  • Sanctum REST API
  • Ticket topics, broadcasts, 1-5 satisfaction rating.
  • Working schedule with holiday overrides.
  • Webhook secret and update deduplication.
View on GitHub
Ticket card in the operator group and the closing confirmation
Ticket card.
Three-step broadcast wizard in Telegram
Broadcast wizard.
Working schedule management and support rating buttons
Schedule and rating.

laravel-ephemeral-files

Files that expire after 24 hours, with deletion notices sent through a transactional outbox and a MySQL race test in CI.

  • Laravel 13
  • PHP 8.4
  • RabbitMQ
  • Docker Compose
View on GitHub

n5deal-marketplace-prototype

Marketplace prototype with three roles, faceted search, fit scoring and moderation.

  • Next.js 15
  • TypeScript
  • Prisma
  • Vitest
View on GitHub

Looking for a Laravel and Vue developer?

Available now for remote backend or full-stack roles. References on request.

+380 99 143 25 55 · Kyiv, Ukraine (UTC+2) · CV (UA)