Calin Gabriel Full Stack Developer · Node.js / TypeScript
Available
Portrait of Calin Gabriel

Cluj-Napoca · remote EU or hybrid · contract or permanent

Full stack developer,
Cluj-Napoca.
Node, React and AWS.

Most recently I worked on the crypto custody platform Bitpanda builds for banks, where I owned the address book — the part that checks an address is valid before a customer's funds can be sent to it. Before that, ImmoScout24 in Austria and RWE in Germany, both long-running platforms that had to keep working while they changed. Backend is where I'm strongest, and I also ship the React side of the same products, the integrations between them, and the AWS or Azure they run on.

A few numbers
45 → 12 min
RWE export pipeline, moved to worker pools
≈ 65%
faster API responses after migration
15,000+/day
energy-market queries served
2,000+/day
documents through a React + Node pipeline (Endava)
Work

What I work on.

Roughly four areas, with the project each one comes from.

  1. BACKEND

    Backend work in regulated systems

    At Bitpanda I owned the crypto address book: the API, the data model, the validation rules, the tests and the release. In custody, an address accepted by mistake can mean funds nobody gets back, so most of the work sat in the validation and the failure cases rather than the happy path.

    Project Bitpanda — institutional crypto custody for banks.

  2. MIGRATION

    Legacy Java into Node and NestJS

    At RWE we moved legacy Java components to NestJS in slices, with integration and E2E tests around each slice, so day-to-day delivery could keep going while the migration ran underneath it. Small team, live production system, no appetite for a full rewrite.

    Project RWE — Java to NestJS on an energy-market platform.

  3. PERFORMANCE

    APIs and data access that got slow

    I profile before changing anything. At RWE that meant finding the real bottleneck in MongoDB aggregations serving about 15,000 queries a day, then moving CPU-heavy exports onto Node worker pools so they stopped blocking normal API work.

    Project RWE — around 65% faster API responses; exports from 45 minutes to 12.

  4. PRODUCT

    Product work across React and Node

    React and Node in the same week, usually with somebody else's platform in the middle. At ImmoScout24 that was Iterable wired into lifecycle messaging — mostly mapping their data model onto ours and making the failure modes visible. The platform was tested at every layer and matching that bar took me a while.

    Project ImmoScout24 — Iterable lifecycle integration, plus search, listing and SEO across React and Node.

Background

How I got here.

Start

First job at 16.

I won an internship contest in Galați and turned it into my first software job, doing Linux and web work on things people actually used. Computer Science at Babeș-Bolyai came after, and mostly it put names to things I had already been doing.

Since

Backend, mostly in data-heavy or regulated products.

DeverSoft, WIP Romania, Endava, RWE, ImmoScout24, Bitpanda. Restaurant systems, a wallet, scientific publishing, payments, energy-market data, property listings, and most recently crypto custody. Node and TypeScript throughout, with enough React that I can work on both sides of a product.

Next

What I am looking for.

Remote in the EU or hybrid in Cluj, contract or permanent. I would like to stay somewhere long enough to actually learn the domain, on a team that owns what it builds.

Projects

Projects.

Four of them, with what I actually did on each.

Lab

Run the worker-pool demo

A CPU-heavy database export, run two ways in your own browser. One freezes the page; the other doesn't. Both print the same fingerprint, so you can check the fast one isn't cheating.

Lab

Run the transactions demo

Two hundred concurrent bank transfers with no transaction around them. Every one reports success, none raises an error, and the money stops adding up. Then the fixes, with what each one costs measured against a real Postgres.

Lab

Run the infrastructure demo

A network, a firewall rule and a server that needs both. Build it by hand and run the same notes twice. Then just describe what you want, and run that twice instead.

Lab

Run the GraphQL demo

Ask a GraphQL API for six posts and their authors, and it goes to the database seven times, three of them for the same person. Run it with and without DataLoader and count the trips.

Lab

Run the job queue demo

Send this email in two hours. Put the jobs in a table, and three problems show up: two workers grab the same job, a job fails, a worker crashes halfway. Watch each one break, then get fixed.

Lab

Run the bulk requests demo

Charge 1,000 customers through an API that rate-limits, fails now and then, and answers slowly. Send them all at once, then pace them, retry them, and add a timeout. Without an idempotency key, the timeout charges 29 customers twice.

Lab

Read the index lab

One slow query on three million rows and five indexes for it, each measured with its plan. One of them Postgres used gladly, and it read 285 times more than the right one. For a customer that doesn't exist, it read the whole index.