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 — Back end
PHP 8.2–8.4 and Symfony 7–8. Doctrine ORM 3, Messenger workers on RabbitMQ, JWT & OAuth2, Stripe billing.
Open the stack -
02 — Front end
Angular 19–21 with NgRx and RxJS. MapLibre, ECharts, D3 and three.js when an interface should show, not tell.
See the work -
03 — Realtime & data
Centrifugo WebSockets, Redis locks, PostgreSQL/PostGIS, Cassandra, Neo4j, Qdrant — chosen per problem, not per habit.
Read the contract
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.
- 01Sea BattleRealtime gameSymfony 7.3 · Angular 21 · Centrifugosea-battle.com
- 02Geocoding WorldMaps APISymfony 7 · PostGIS · MapLibre GLgeocodingworld.com
- 03Guess the WordsWord gameSymfony · Angular 20 · Turnstileguessthewords.club
- 04PizcoolAnalytics SaaSSymfony 7.3 · RabbitMQ · EChartspizcool.com
- 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.
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.
kernel.request
Listen
Before code: the domain, the constraints, the numbers. I ask until every edge case has a name.
kernel.controller
Design
Boundaries first — modules, queues, channels, and the contract between PHP and TypeScript.
kernel.view
Build
Typed end to end: strict types in PHP 8.4, strict TypeScript, tests in the same containers as production.
kernel.response
Ship
Docker Compose, GitLab CI, Traefik. Doctrine migrations generated from entity mapping. Releases are boring on purpose.
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$ curl -i -X POST https://localhost/contact