Tarasevich Yauheni

Back end.
Front end.
One engineer.

Symfony · Angular
Realtime · Data
Docker · CI

Yauheni Tarasevich — full-stack engineer, PHP and JavaScript

I'm Yauheni Tarasevich, a full-stack engineer. I build whole products — Symfony back ends that carry the load, Angular front ends that feel instant, and the realtime layer that keeps them in sync.

Press Shift twice to search everywhere

01 — Selected work

Five products.
One pair of hands.

Games, maps, analytics and developer tools. Each one designed, built and shipped end to end — from the database schema to the last hover state.

05 projects · all live
  1. 01Sea BattleRealtime gameSymfony 7.3 · Angular 21 · Centrifugosea-battle.com
  2. 02Geocoding WorldMaps APISymfony 7 · PostGIS · MapLibre GLgeocodingworld.com
  3. 03Guess the WordsWord gameSymfony · Angular 20 · Turnstileguessthewords.club
  4. 04PizcoolAnalytics SaaSSymfony 7.3 · RabbitMQ · EChartspizcool.com
  5. 05OylinksDeveloper toolSymfony 8.1 · Yjs · Neo4j · Qdrantoylinks.com

02 — Stack

One contract.
Two runtimes.

Most bugs live in the seam between back end and front end. I own both sides, so the contract is designed once and typed on both ends — channel names, payloads, enums, validation rules. Hover a highlighted token to see its twin.

PHP 8.4
TypeScript

Excerpts adapted from production code. Same names on both sides — on purpose.

The stack,
project by project.

Taken from the composer.json, package.json and Docker Compose files behind each project. Hover a row or a column.

By the numbers

Every layer.
One engineer.

No hand-offs between back end and front end, no “works on my machine”: every project runs in Docker the same way locally and in production.

05
Products in production
64
Docker services across four stacks
08
Databases, queues & brokers
02
Languages, one contract

03 — Process

From request
to response.

The way I work follows the Symfony kernel: five events, in order, every time. The last one runs after the response is sent — like the work after a release.

  1. kernel.request

    Listen

    Before code: the domain, the constraints, the numbers. I ask until every edge case has a name.

  2. kernel.controller

    Design

    Boundaries first — modules, queues, channels, and the contract between PHP and TypeScript.

  3. kernel.view

    Build

    Typed end to end: strict types in PHP 8.4, strict TypeScript, tests in the same containers as production.

  4. kernel.response

    Ship

    Docker Compose, GitLab CI, Traefik. Doctrine migrations generated from entity mapping. Releases are boring on purpose.

  5. kernel.terminate

    Observe

    What happens after the response: logs, Sentry, uptime checks — and the next iteration.

04 — Contact

Have a system
to build?

Tell me about the product, the deadline and the part that keeps you up at night. I'll come back with questions — and then with a plan.

Message me on LinkedIn

bash — contact

$ curl -i -X POST https://localhost/contact

01 / 05

$ php bin/console debug:router

Site routes

NameMethodPathSection
app_indexGET/Index
app_workGET/workSelected work
app_work_showGET/work/{slug} sea-battlegeocoding-worldguess-the-wordspizcooloylinksCase study
app_stackGET/stackOne contract, two runtimes
app_processGET/processFrom request to response
app_contactGET|POST/contactSay hello

6 routes · ShiftShift search everywhere · T switch theme

ShiftShift Ctrl K

↑↓ navigate↵ openTab scopeEsc close