Building software
that matters.
I'm Matej — a software mechanicI highly identify as mechanic with high inspiration from linked blog based in Slovenia with 15+ years of experience building web platforms, e-commerce systems, and AI-powered tools. Currently at PROGMBH d.o.o., working across the full stack.

The book shelf
Thoughts on design, technology, free time, and a little philosophy.
#020 v11 What survives a port is the asset
The same repo holds the API twice — NestJS and a Spring Boot port serving one hand-written contract. What transferred unchanged between them is where the engineering actually lives.
#019 v11 Staging should run NODE_ENV=production
NODE_ENV is a semantics switch that libraries branch on, not a deployment tier. Set it to staging and your rehearsal runs different code paths than the show.
#018 v11 Every knob is a promise
The retry policy is three hardcoded constants, and the decision record says why: a config option promises that every value works. Unused knobs are debt, not flexibility.
#017 v11 Refresh on the publisher's clock
The weather source publishes on a ~25-minute cycle, so the refresh cron fires at :27 — cache freshness is a property of the upstream's rhythm, not of your TTL.
#016 v11 Validate 86 fields to serve 6
The API returns six fields per station but validates the upstream's entire shape. Drift in the eighty fields you ignore is the earliest warning about the six you depend on.