OpenWrt Presence Agent
A read-only Go service that turns Wi-Fi association events on OpenWrt into an authenticated HTTP and WebSocket presence API. Around 6.5 ms median latency, and it reports unavailable rather than guessing.
Turku, Finland it's 17:25:59 local
I'm an infrastructure and backend engineer in Turku. I work on servers, clusters, networks, and the code that runs on them, and I try to keep those systems reliable and documented.
Right now that means a DevOps internship at Kongsberg Maritime and leading the dev team at my student organization. My thesis for the B.Sc. in computer engineering at Åbo Akademi examined the communication and data requirements for collision avoidance between autonomous vessels, from AIS and VDES to satellite links.
I use agentic AI tooling to move faster, and every change still goes through review and testing before it ships. Outside work: running, the home lab, and occasional gaming.
Experience
Observability, automation, and delivery tooling in a Remote Operations Center for maritime systems with strict availability requirements. Work includes automating manual operational routines with Ansible, building monitoring and dashboards, and maintaining CI/CD and release tooling.
Leading the dev team behind member services used by 1,000+ people across four public sites. Directed the AI-assisted migration of every production service from one Docker server to a three-node k3s cluster on Hetzner, with Terraform, Ansible, and Argo CD, cut over in 48 minutes. Since the team hands over between student generations every few years, keeping the setup simple and documented is a requirement.
Built and maintained the association platform and its member-facing features, CI/CD, and deployment workflows, plus small internal utilities.
Full-stack product and infrastructure work for the Since AI team. Grand Prize winner at the Since AI Hackathon 2025.
Projects
A read-only Go service that turns Wi-Fi association events on OpenWrt into an authenticated HTTP and WebSocket presence API. Around 6.5 ms median latency, and it reports unavailable rather than guessing.
Native device trackers for Home Assistant, driven locally and by push from the agent above. Trackers report unavailable when the router has no data.
The shared hosting platform for Datateknologerna and other student associations at Åbo Akademi: websites, services, PostgreSQL, object storage, and a k3s cluster with GitOps deployment, cut over in 48 minutes. Designed for volunteer maintainers and handovers between student generations.
The Django codebase behind datateknologerna.org: member flows, content management, alumni portal, polls, and event pages. I did not create it originally; as team lead I maintain it with the team, and most of the changes go through me at this time.
A dependency-free Go CLI that keeps real dotenv files aligned with their .env.example templates without touching secrets or evaluating file contents.
Astro on Cloudflare Workers with D1 persistence, Turnstile protection, markdown negotiation for agents, and a guestbook where you can leave a note.
Proxmox on a ThinkCentre M920q running Home Assistant, plus backups, DNS, monitoring, and other self-hosted services. An OpenWrt GL.iNet Flint 3 segments the network with VLANs.
Tools
Daily drivers: Go, TypeScript, React, Astro, Python, PostgreSQL, Redis, Docker, Kubernetes and k3s, Proxmox, Ansible, GitHub Actions, Cloudflare, AWS, and Hetzner. I prefer well-documented tools that have been around for a while.
I use agentic AI tooling for much of my development: agents handle the drafting and research, I review and test the results before anything ships.