Infrastructure, monitored.
Knowledge, shipped.
A running log of a career change into tech, now working toward DevOps and platform engineering — Azure, automation, and the AI tools I use to get there — written the way I actually work: in commits, PRs, and status updates.
about
Michał Zawadzki
Career-changed into tech, two years into a System Engineer role on Azure — now leaning into DevOps, automation, and applied AI. Still figuring a lot of it out, and this is where I write it down as I go.
Monitoring tiles
3/3 in progressDevOps
operationalCI/CD, GitHub Actions, infrastructure-as-code — trying to make shipping less scary, one pipeline at a time.
learning by doingAzure
operationalThe stuff I actually touch day to day: IP whitelisting, network design, Terraform, disaster recovery drills — still learning the edges of all of it.
2 years inAI
operationalExperimenting with Claude and LLM tooling for automation, scripting, and small internal tools.
models: claudeSelected work
view all →LifeOS — a self-hosted AI assistant
A personal AI assistant I'm building for myself: a FastAPI backend behind a Telegram bot and a small React web app, routing between a local Ollama model and OpenRouter depending on the task.
- ›Handles goals, calendar, and budget tracking through conversation, with voice input/output and Google Calendar integration.
- ›Self-hosted on a k3s cluster on Oracle Cloud, Terraform-provisioned with CI/CD deploying on every push to main — started as a WSL2 box at home, now kept running as a cold-standby rollback instead of being torn down.
- ›Custom domain (lifeos.michalzawadzki.dev) backed by a Terraform-managed Cloudflare DNS record — imported from a hand-created one into IaC rather than left undocumented, DNS-only/unproxied so cert-manager's HTTP-01 challenge and the app's SSE/voice streaming don't pick up an extra proxying layer.
This site's own publish pipeline
Merge a Markdown post to main and it deploys, then publishes itself to LinkedIn with a link back — no manual copy-paste step.
- ›GitHub Actions handles the full flow: build, deploy, wait for the live URL, then publish to LinkedIn via the official REST API.
- ›The deploy check used to just poll for a 200 — which would pass even against a stale cached page. It now also confirms the actual post title is present in the response body before publishing goes ahead, with unit tests covering that logic so it can't silently regress.
- ›Everything is versioned and reviewed through a normal pull request, same as any other change to the site — CI runs typecheck, the full unit test suite, and a production build on every push.