// backend engineering · privacy-sensitive systems

Backends for health and device data that stay correct, traceable and private.

I'm Paweł Chraczyński, a backend engineer. I build and review backends where a record has to be correct, attributable and still provable months later: ingestion that survives being replayed, validation that says why it refused, audit trails that answer who changed what, and on whose authority.

5+ years of Python backend · previously Netguru · now independent, on regulated health data · LinkedIn · GitHub

How we can work together

Backend review

You arrive with: a system you do not fully trust, or an audit or integration coming up.

You leave with: the risks named and ranked, and a fix plan in the order worth doing it.

Integration delivery

You arrive with: a device, lab or third-party API that has to feed your data safely.

You leave with: an agreed scope built, with tests and documentation for the team that keeps it.

Ongoing backend support

You arrive with: steady backend work and not enough senior hands for it.

You leave with: a monthly engagement with a defined scope and availability.

What I work on

Ingestion that holds up

Third-party lab and device results into a FHIR-shaped store with an auditable trail. Idempotent writes, so a retry is not a duplicate; typed rejections, so a refused record says why rather than vanishing into a log.

Regulated-shape pipelines

HIPAA and GDPR constraints treated as design inputs rather than a review at the end: retention expressed as policy instead of a cron job, least data held, and identifying fields kept out of the places that do not need them.

App-layer trust

Signing, key handling and validation that does not assume the network is friendly or the client is honest, on services and on devices that are only as trustworthy as their firmware.

Around those: API design and service boundaries, search and indexing on OpenSearch/Elasticsearch, AWS, and the performance work that turns up once a system has real data in it.

Selected work

Client work stays under NDA, so the evidence here is systems I own: the same practices, in the open.

Live · the console is the point
  1. Press Start and take a tile next to one you hold. Ringed tiles are worth more; when neither side can move, the higher score wins. The console logs every command, its latency and the verdict.
  2. Watch the opponent move. Its turn is computed on the server too; the browser only draws what it is told.
  3. Click a tile you do not border. The server refuses it and says why: REJECTED ADJACENCY, not a silent no-op.
  4. Try to cheat. The signing key is in devtools. Forge a move; the server keeps count.
// territory.client
·
you
·
server AI
turn ·
// game.server  ·  rt log
not connected
·
·
turn latency
·
server time
·
payload
seqtsactoreventsubjectoutcome
// leaderboard  ·  this week, top ten
·

The game is the bait; the panel beside it is the work. The browser holds no rules: every click is a command the server decides, answered with a new state or a typed reason for refusal. Every number on that panel is measured.

The same validation applies to device events, webhooks and any other request that changes state. What this does not show is FHIR or PHI handling: it is the pattern I ship in production APIs, minus the part where it touches anyone's data.

The game connection starts only when you press Start. Press it and this page opens a connection to the game server, which sees your address the way any server you connect to does. It keeps a match id in your browser so you can pick a game back up. No cookies, no analytics, nothing else about you is kept. Scores are ephemeral and reset weekly.

How the signing and the state digest work

Every command after the handshake is signed with a key the server mints for this connection and hands to this page, and carries a counter the server will not accept twice. You can read that key in devtools, so the envelope protects the session, not against the player. Anti-cheat is the server refusing illegal moves, and nothing else.

The state digest is how you check no tab is showing you a stale board: open the same match in a second tab and both print the same digest. It is not a security control: the server computes it and the client prints it.

About

I didn't start in software. I spent my first working years building solar farms, and the part I loved most was the SCADA cabinets and the way they talked to each other. When the company I worked for ran into cash-flow trouble, I decided to bet on myself, learned Python, and moved into backend development.

At Netguru I kept ending up on health-data projects, and over the years that became my specialisation. A breach at a Polish medical laboratory, when patients' lab results ended up online, made it personal. Since then I try to break my own applications before anyone else does.

The homelab started with a Xiaomi robot vacuum, around the time photos taken by test robot vacuums in people's homes, one of a woman on the toilet, were shared online by the contractors paid to label them. I stopped trusting companies with my data after that. If I have to be angry at someone for how it is kept, I would rather it be myself, so the house runs on hardware I control.

Away from the keyboard I listen to far too much gabber, follow everything happening in astronomy and spaceflight, and spend some weekends at the shooting range with my dad.

Contact

Discuss your project

Email me with what your system does, what is failing or missing, and your timeline.

Limited slots, and a short discovery call to confirm fit, scope and timelines before anything is agreed.