{"schemaVersion":1,"locale":"pl","generatedAt":"2026-08-17T10:20:33.630Z","profile":{"slug":"profile","source":"content/profile.pl.md","url":"https://krzemo.dev/pl/about/","translated":true,"frontmatter":{"schemaVersion":1,"headline":"Senior backend engineer — .NET, systemy rozproszone, API dla modeli","summary":"Senior backend engineer pracujący głównie w .NET i C#, z uprzedzeniem do systemów, które są nadal zrozumiałe w drugim roku życia. Projektuję i wdrażam wielotenantowe backendy SaaS end to end: model danych, API, autoryzację, deployment. Od niedawna buduję też interfejsy przeznaczone dla modeli językowych — serwery MCP i API retrievalowe nad tym samym źródłem prawdy, z którego renderuje się strona dla ludzi.","location":{"city":"Rzeszów","country":"PL","timezone":"Europe/Warsaw"},"name":"Dominik Krzemiński","availability":"selective","email":"me@krzemo.dev","links":[{"rel":"repo","url":"https://github.com/krzemooo","label":"GitHub"},{"rel":"profile","url":"https://www.linkedin.com/in/krzemooo","label":"LinkedIn"}],"languages":[{"code":"pl","level":"native"},{"code":"en","level":"professional"}],"coreStack":["dotnet","csharp","aspnet-core","ef-core","postgres","typescript","docker","kubernetes","azure","anthropic-api"],"education":[{"id":"wsiz-rzeszow","institution":"University of Information Technology and Management in Rzeszów","degree":"Inżynier, Informatyka","years":{"start":2018,"end":2022}},{"id":"ekonomik-rzeszow","institution":"Ekonomik Rzeszów","degree":"Technik cyfrowych procesów graficznych","years":{"start":2013,"end":2017}}]},"body":"Buduję backendy, które ktoś inny będzie musiał utrzymywać, więc optymalizuję\nnudne właściwości: jawne granice, model danych przeżywający zderzenie z realnym\nruchem i deployment, który jedna osoba ogarnie o drugiej w nocy.\n\nWiększość mojej pracy to .NET na PostgreSQL, dzielony na serwisy tylko tam,\ngdzie szwy są prawdziwe. Interesują mnie rzeczy, które rzadko trafiają do\nogłoszeń o pracę — strategia migracji, backpressure, i co się dzieje, kiedy\nintegracja z zewnętrznym dostawcą leży przez sześć godzin.\n\nOstatnim wątkiem w mojej pracy jest budowanie dla dwóch odbiorców naraz.\nProdukt ma dziś użytkowników-ludzi i użytkowników-maszyny, a ci drudzy\nzasługują na pierwszoklasowy interfejs, nie na zeskrobane przybliżenie UI.\nTa strona jest najmniejszą uczciwą demonstracją tej tezy."},"projects":[{"slug":"stampulse","source":"content/projects/stampulse.pl.md","url":"https://krzemo.dev/pl/projects/stampulse/","translated":true,"frontmatter":{"schemaVersion":1,"title":"Stampulse","tagline":"Platforma lojalnościowa dla lokalnego biznesu — aplikacja mobilna, dwa portale, jeden backend .NET.","summary":"Stampulse zastępuje papierowe karty pieczątkowe wielotenantową platformą lojalnościową: aplikacja Flutter dla klientów końcowych, osobne portale React dla właścicieli lokali i ich pracowników oraz backend .NET złożony z wąsko wyspecjalizowanych serwisów za bramą. Odpowiadam za architekturę end to end — izolację tenantów, model danych zgodny z RODO, autoryzację na OpenIddict i pipeline wdrożeniowy na Kubernetes. Ciekawym ograniczeniem jest to, że urządzenie pracownika jest współdzielone, przez pół czasu offline i obsługiwane w dziesięć sekund przy ladzie.","role":"Lead engineer","metrics":[{"id":"apps","value":"5","label":"Aplikacje w monorepo"},{"id":"services","value":"6","label":"Serwisy backendowe"}],"status":"active","period":{"start":"2024-01"},"stack":["dotnet","csharp","aspnet-core","ef-core","postgres","redis","react","flutter","kubernetes","grpc"],"links":[{"rel":"demo","url":"https://stampulse.com"}],"keywords":["loyalty","multi-tenant","gdpr","microservices"],"confidential":false,"featured":true,"order":10,"draft":false},"body":"## Problem\n\nPapierowe karty pieczątkowe się gubią, a właściciel lokalu zostaje bez żadnych\ndanych — nie wie, kto wraca, jak często i ile jest wart powracający klient.\nIstniejące aplikacje lojalnościowe rozwiązują to, każąc klientowi zainstalować\nosobną aplikację dla każdej kawiarni, czego nikt nie robi.\n\n## Kształt systemu\n\nBackend to niewielka liczba serwisów, z których każdy jest właścicielem wyraźnie\noddzielonych danych: tożsamość, tenanci i lokale, programy lojalnościowe,\nkampanie oraz raportowanie. Wewnętrznie rozmawiają po gRPC i stoją za jedną\nbramą. Wszystko, co jest tenant-scoped, nosi id tenanta w modelu danych, zamiast\npolegać na filtrze w runtime, który jedno zapomniane zapytanie obchodzi.\n\n## Co było naprawdę trudne\n\nŚcieżka pracownika. Współdzielone urządzenie za ladą, pracownik, który mógł\nzacząć tego samego ranka, i klient, który poczeka jakieś dziesięć sekund. To\nprzesunęło sporo złożoności wstecz, do API: idempotentne przyznawanie pieczątek,\nrozwiązywanie konfliktów dla paczek offline i ślad audytowy, który przeżyje\nprzekazanie urządzenia komuś innemu w środku zmiany."},{"slug":"beacon","source":"content/projects/beacon.md","url":"https://krzemo.dev/pl/projects/beacon/","translated":false,"frontmatter":{"schemaVersion":1,"title":"Beacon","tagline":"A Raspberry Pi status device aggregating AI coding sessions across machines into one ambient display.","summary":"Beacon is a personal ambient-status device: a Raspberry Pi with an OLED display and status LEDs that aggregates Claude Code sessions running across several machines, so a finished run or a session waiting on input surfaces without alt-tabbing through terminals. A FastAPI service ingests session events reported from each machine into SQLite; the device renders them through local, rule-based status classification — no cloud dependency in the loop. The hardware went live in August 2026, and the architecture keeps adjusting as real usage surfaces edge cases the pre-hardware design did not anticipate.","role":"Creator","metrics":[],"status":"prototype","period":{"start":"2026-08"},"stack":["python","fastapi","sqlite","raspberry-pi"],"links":[],"keywords":["ambient-computing","hardware","developer-tooling"],"confidential":false,"featured":false,"order":20,"draft":false},"body":"Born from a real workflow problem: several concurrent AI coding sessions\nacross machines, and no way to know which one finished or blocked without\npolling terminals by hand. Beacon turns that state into ambient hardware —\nan event-ingestion service on one side, a rule-based classifier and a\nglanceable display on the other."},{"slug":"pawid","source":"content/projects/pawid.md","url":"https://krzemo.dev/pl/projects/pawid/","translated":false,"frontmatter":{"schemaVersion":1,"title":"PawID","tagline":"An early-stage pet-management concept built around retrieval-based visual breed identification.","summary":"PawID is an early-stage concept for a mobile/web app that helps pet owners manage their pets — profiles, health records, reminders — built around a breed identifier working from a photo or a free-text description. The current work is a proof of concept measuring retrieval quality for that identification step: reference photos embedded with CLIP, indexed in a Chroma vector store, and matched against query images across dog and cat breeds. The main app has no codebase yet — this is deliberate technical de-risking before any build commitment.","role":"Creator","metrics":[],"status":"prototype","period":{"start":"2026-07"},"stack":["python","clip","chroma"],"links":[],"keywords":["proof-of-concept","image-retrieval","mobile"],"confidential":false,"featured":false,"order":30,"draft":false},"body":"Pet owners currently juggle paper vaccination books, a phone gallery of\nphotos, and guesswork about a rescue's actual breed mix. PawID starts from\nthe breed-identification piece because it carries the technical risk: if\nembedding-based retrieval cannot separate visually close breeds reliably,\nthe product around it is not worth building. The POC exists to answer that\nquestion first."},{"slug":"ha-inel","source":"content/projects/ha-inel.md","url":"https://krzemo.dev/pl/projects/ha-inel/","translated":false,"frontmatter":{"schemaVersion":1,"title":"Inel Home Assistant integration","tagline":"A reverse-engineered Home Assistant integration for the Inel InelNet wall controller.","summary":"A custom Home Assistant integration for the Inel InelNet wall controller, a RS-485 shutter/light/socket controller with no public API or documentation. Reverse-engineered from the controller's own web interface, it exposes shutters, lights, sockets and gates as native Home Assistant entities. Published as open source for anyone else running the same hardware.","role":"Creator","metrics":[],"status":"maintained","period":{"start":"2026-07"},"stack":["python","home-assistant"],"links":[],"keywords":["home-assistant","reverse-engineering","open-source"],"confidential":false,"featured":false,"order":40,"draft":false},"body":"Built for my own home network, where this brand of wall controller had no\nexisting Home Assistant support. Reverse-engineering the controller's web UI\nturned out to be the only route in — no documented API exists — so the\nintegration talks to the same endpoints the controller's own interface uses."}],"experience":[{"slug":"enixware","source":"content/experience/enixware.md","url":"https://krzemo.dev/pl/about/","translated":false,"frontmatter":{"schemaVersion":1,"role":"Backend Engineer","location":"Remote","highlights":["Backend engineering for a high-traffic transactional platform — service design, implementation, and day-to-day operation.","Built internal services and the analytics and statistics layer on OpenSearch, turning operational data into product decisions.","Managed infrastructure as code with Terraform across AWS and DigitalOcean, carrying DevOps duties alongside development.","Automated end-to-end testing with Playwright and contributed to Next.js front-end surfaces."],"company":"Enixware","employmentType":"fulltime","period":{"start":"2023-11"},"remote":true,"stack":["dotnet","csharp","aws","digitalocean","terraform","opensearch","nextjs","playwright"],"order":10,"draft":false},"body":"Current role. Backend services for a high-traffic transactional platform:\nthe services themselves, the infrastructure they run on, and the analytics\nthat explain them."},{"slug":"bluesoft","source":"content/experience/bluesoft.md","url":"https://krzemo.dev/pl/about/","translated":false,"frontmatter":{"schemaVersion":1,"role":"Senior .NET Developer","location":"Warsaw, PL","highlights":["A short senior engagement centred on legacy-system takeover and migration planning.","Reverse-engineered a production system, interviewed its users, and produced the analysis that shaped its successor."],"company":"BlueSoft","employmentType":"fulltime","period":{"start":"2023-08","end":"2023-10"},"remote":true,"stack":["dotnet","csharp"],"order":20,"draft":false},"body":"Brief but focused: taking over a working legacy system and preparing the\nanalysis its replacement was built from."},{"slug":"mobitouch","source":"content/experience/mobitouch.md","url":"https://krzemo.dev/pl/about/","translated":false,"frontmatter":{"schemaVersion":1,"role":".NET Developer","location":"Remote","highlights":["Backend development on a high-availability SaaS platform built as microservices on Azure and Kubernetes.","Worked with asynchronous messaging over RabbitMQ and internal gRPC APIs between services.","Combined development with technical support, DevOps, and data-driven performance optimisation."],"company":"mobitouch","employmentType":"fulltime","period":{"start":"2022-10","end":"2023-08"},"remote":true,"stack":["dotnet","csharp","azure","kubernetes","docker","rabbitmq","grpc"],"order":30,"draft":false},"body":"Microservices work on Azure and Kubernetes — development, inter-service\nmessaging, and the operational side of keeping a SaaS platform healthy."},{"slug":"ideo","source":"content/experience/ideo.md","url":"https://krzemo.dev/pl/about/","translated":false,"frontmatter":{"schemaVersion":1,"role":".NET Developer","location":"Rzeszów, PL","highlights":["Developed and supported business-critical systems in a regulated industry, from the business and user layer down.","Delivered a logistics-sector web application on ASP.NET Core, including its data analysis and reporting.","Deep business-side involvement — client meetings, advisory, and requirements analysis alongside delivery."],"company":"Ideo Software","employmentType":"fulltime","period":{"start":"2021-06","end":"2022-10"},"remote":false,"stack":["dotnet","csharp","aspnet-core","azure","kubernetes"],"order":40,"draft":false},"body":"On-site in Rzeszów: regulated-industry systems and a logistics application,\nwith as much time spent with the client as with the code."},{"slug":"mukisolution","source":"content/experience/mukisolution.md","url":"https://krzemo.dev/pl/about/","translated":false,"frontmatter":{"schemaVersion":1,"role":".NET Developer","location":"Rzeszów, PL","highlights":["Started in IT support, then moved into .NET Framework development on an ERP system for small and medium businesses.","Built warehousing, dispatch, and sales modules, integrating IoT devices on the warehouse side.","Ran requirements interviews with end users and translated them into data models and UI/UX."],"company":"MukiSolution","employmentType":"contract","period":{"start":"2017-11","end":"2021-07"},"remote":false,"stack":["dotnet-framework","csharp","sql-server","iot"],"order":50,"draft":false},"body":"Where the .NET specialization started — IT support first, then ERP\ndevelopment across warehousing, dispatch, and sales."}],"stack":[{"entry":{"id":"anthropic-api","label":"Anthropic API","category":"ai","level":"working","since":2024,"url":"https://docs.anthropic.com"},"projectCount":0,"experienceCount":0,"isCore":true},{"entry":{"id":"aspnet-core","label":"ASP.NET Core","category":"backend","level":"expert","since":2017,"url":"https://learn.microsoft.com/aspnet/core"},"projectCount":1,"experienceCount":1,"isCore":true},{"entry":{"id":"astro","label":"Astro","category":"frontend","level":"working","since":2024,"url":"https://astro.build"},"projectCount":0,"experienceCount":0,"isCore":false},{"entry":{"id":"aws","label":"AWS","category":"infra","level":"working","since":2023,"url":"https://aws.amazon.com"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"azure","label":"Azure","category":"infra","level":"working","since":2022,"url":"https://azure.microsoft.com"},"projectCount":0,"experienceCount":2,"isCore":true},{"entry":{"id":"chroma","label":"Chroma","category":"data","level":"familiar","since":2026,"url":"https://www.trychroma.com"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"clip","label":"CLIP","category":"ai","level":"familiar","since":2026,"url":"https://github.com/openai/CLIP"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"csharp","label":"C#","category":"language","level":"expert","since":2016,"url":"https://learn.microsoft.com/dotnet/csharp"},"projectCount":1,"experienceCount":5,"isCore":true},{"entry":{"id":"digitalocean","label":"DigitalOcean","category":"infra","level":"working","since":2023,"url":"https://www.digitalocean.com"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"docker","label":"Docker","category":"infra","level":"expert","since":2018,"url":"https://www.docker.com"},"projectCount":0,"experienceCount":1,"isCore":true},{"entry":{"id":"dotnet","label":".NET","category":"backend","level":"expert","since":2016,"url":"https://dotnet.microsoft.com"},"projectCount":1,"experienceCount":4,"isCore":true},{"entry":{"id":"dotnet-framework","label":".NET Framework","category":"backend","level":"expert","since":2017,"url":"https://learn.microsoft.com/dotnet/framework"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"ef-core","label":"EF Core","category":"data","level":"expert","since":2017,"url":"https://learn.microsoft.com/ef/core"},"projectCount":1,"experienceCount":0,"isCore":true},{"entry":{"id":"fastapi","label":"FastAPI","category":"backend","level":"working","since":2026,"url":"https://fastapi.tiangolo.com"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"flutter","label":"Flutter","category":"frontend","level":"working","since":2023,"url":"https://flutter.dev"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"grpc","label":"gRPC","category":"backend","level":"working","since":2021,"url":"https://grpc.io"},"projectCount":1,"experienceCount":1,"isCore":false},{"entry":{"id":"home-assistant","label":"Home Assistant","category":"tooling","level":"working","since":2026,"url":"https://www.home-assistant.io"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"iot","label":"IoT","category":"infra","level":"familiar","since":2018},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"kubernetes","label":"Kubernetes","category":"infra","level":"working","since":2021,"url":"https://kubernetes.io"},"projectCount":1,"experienceCount":2,"isCore":true},{"entry":{"id":"mcp","label":"Model Context Protocol","category":"ai","level":"working","since":2025,"url":"https://modelcontextprotocol.io"},"projectCount":0,"experienceCount":0,"isCore":false},{"entry":{"id":"nextjs","label":"Next.js","category":"frontend","level":"familiar","since":2023,"url":"https://nextjs.org"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"opensearch","label":"OpenSearch","category":"data","level":"working","since":2023,"url":"https://opensearch.org"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"playwright","label":"Playwright","category":"tooling","level":"working","since":2023,"url":"https://playwright.dev"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"postgres","label":"PostgreSQL","category":"data","level":"expert","since":2017,"url":"https://www.postgresql.org"},"projectCount":1,"experienceCount":0,"isCore":true},{"entry":{"id":"python","label":"Python","category":"language","level":"working","since":2026,"url":"https://www.python.org"},"projectCount":3,"experienceCount":0,"isCore":false},{"entry":{"id":"rabbitmq","label":"RabbitMQ","category":"backend","level":"working","since":2022,"url":"https://www.rabbitmq.com"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"raspberry-pi","label":"Raspberry Pi","category":"infra","level":"familiar","since":2026,"url":"https://www.raspberrypi.com"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"react","label":"React","category":"frontend","level":"working","since":2019,"url":"https://react.dev"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"redis","label":"Redis","category":"data","level":"working","since":2019,"url":"https://redis.io"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"sql-server","label":"SQL Server","category":"data","level":"working","since":2017,"url":"https://www.microsoft.com/sql-server"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"sqlite","label":"SQLite","category":"data","level":"working","since":2026,"url":"https://www.sqlite.org"},"projectCount":1,"experienceCount":0,"isCore":false},{"entry":{"id":"terraform","label":"Terraform","category":"infra","level":"working","since":2023,"url":"https://www.terraform.io"},"projectCount":0,"experienceCount":1,"isCore":false},{"entry":{"id":"typescript","label":"TypeScript","category":"language","level":"expert","since":2018,"url":"https://www.typescriptlang.org"},"projectCount":0,"experienceCount":0,"isCore":true}]}