Finland · security ops · agent‑built

Talonpoika

Cyber-security lead by day. Agent-assisted builder by night.

Projects

Public code, built to be used.

Small, finished products. The test is whether a tool is still in use once the novelty wears off, and most of these are.

Featured · browser game

PesisPähkinä

A mobile-first pixel-art quiz game that teaches the rules of Finnish pesäpallo to kids and their parents. Player and umpire perspectives, age groups G–D, difficulty tiers that unlock as you improve. No login and no backend; progress lives in the browser, installable as a PWA.

  • TypeScript
  • React
  • PWA
  • Web Audio
  • localStorage

Featured · web app + live broadcast

Pesisselostaja

Synthetic Finnish commentary for junior pesäpallo, in two parts. The web app follows a live match and speaks the events as the score feed records them. The broadcast pipeline mixes the same voice over a live video stream and republishes it to YouTube, run from a phone through its own control app, the Ohjaamo: pick the game, create the broadcasts, start the relay, clean up afterwards. The hardest part was making the Finnish voice sound like a commentator instead of a railway announcement.

  • TypeScript
  • Vite
  • Browser speech
  • Piper
  • ElevenLabs
  • ffmpeg
  • YouTube Live
One minute from a real Pesisselostaja broadcast in August 2026: two home runs in quick succession. The game is filmed with an ordinary phone, and the commentary is generated with ElevenLabs from the live score feed and mixed into the stream in near real time.

Voice assistant PWA

Home Realtime Assistant

Realtime voice assistant for Home Assistant, built on the OpenAI Realtime API and WebRTC. Talks to the house through a gateway with a restricted schema and an explicit allowlist; the security work is the product.

  • TypeScript monorepo
  • pnpm
  • WebRTC
Repository

Personal alpha

Personal Finance App

Self-hosted single-user finance tracker: imports, AI categorisation, pattern detection and a three-month forecast. No third party holds the history. Own hardware is the best hardware.

  • TypeScript
  • Fastify
  • SQLite
  • OpenAI
Repository

Home Assistant integration

Finna Library

Finnish library loans, due dates, holds, fines and renewals from Finna, surfaced in Home Assistant with support for multiple library accounts. Installs through HACS. Since the integration went live, overdue notices have dropped to zero.

  • Python
  • Home Assistant
  • HACS
Repository

About

Security operations at work. Side projects at home.

I run security operations for a B2B managed service provider and lead the CSOC: vulnerability and breach investigation, security training, and advising client executives. Then I go home and build the automation myself. Most security tooling is bought off the shelf, but the tools our team relies on most are the ones we wrote ourselves.

Where I operate

Deep technical investigation, operational team leadership, and executive advisory, usually within the same week. The hard part is translating between those three audiences without losing detail.

0

Years leading security and CSOC teams

0

Person MSP behind the operations

0

AI tools I built, in production use

24/7

How the whole operation runs, every week of the year

By day

Security that survives contact with a real business.

Vulnerability and breach investigation, 24/7 operations, and the unglamorous work of getting risk decisions made by the people who own the risk. I train teams and advise client leadership: the same finding, told two ways, without watering either down.

  • Breach investigation
  • CSOC / MDR
  • Risk-based practice
  • Executive advisory
  • Security training

By night

If the API is missing, that is not a blocker.

Agent-assisted builds for smart-home, voice and Finnish-language tooling. Small tools for the home and the hobbies. The ones listed here survived past their first month of real use.

  • Smart home
  • Realtime voice
  • Finnish-language software
  • Data plumbing

Shipped at work

Automation I built for my own team.

Internal tools, described at a level I can talk about publicly. All four are in daily production use.

CSOC

Email breach investigation, automated

Turned the repetitive part of business email compromise triage into a repeatable pipeline for the CSOC team: evidence collection and the first pass of the analysis, so analysts start where the judgement begins.

Reporting

Vulnerability assessment reports, generated

Scan output to a client-ready report without an analyst retyping it. Analysts still own the findings. The tool handles the formatting.

ISO 27001

Risk and deviation handling, automated

Risk entries and non-conformities routed, drafted and tracked automatically, so the management system stays current all year round, with no scramble before each audit.

No API available

A time-tracking tool for a system without an interface

The vendor offered no API, so the integration was built anyway. A missing interface just means the integration needs one extra layer.

Domains

Industries I know from the inside.

An MSP seat is an unfair advantage: you see the day-to-day IT and security reality of dozens of companies at once.

Energy

Mid-size power companies (generation, distribution and retail) seen through MSP engagements. Core NIS2 territory, with the operational reality that comes with it.

NIS2

Manufacturing

Mid-size industrial production: overhead door manufacturing, wood processing, waste management. OT and IT sharing a network and rarely a plan.

OT / IT

Property & housing

Renewed an entire IT landscape from the inside: property, tenancy and finance systems into one integrated SaaS stack, and directed the software vendor as the customer.

From the inside

IT services & software

The MSP business itself, plus software product companies. Dozens of client environments show quickly which practices survive daily use.

MSP

Method

Plan first, test early, automate the boring parts.

Agent-assisted work still needs structure. Speed is only useful when it repeats.

01

Plan first, so the implementation path is explicit before any code moves.

02

Test-driven where it catches regressions early and helps define the seams.

03

Automated code review and security review stay in the default path, never opt-in.

04

PowerShell and Bash automation underneath, so the workflow survives being handed over.

05

The output has to be maintainable by a human first, however AI-assisted the loop was.

The recurring result

Radical simplification that works around the constraint. In a previous role the apartment offer process ran for weeks because digital signing only worked in one country. Replacing the signature with a small card payment made it work globally and cut the process to under a day.

The interesting problem was the constraint; the payment was just a way around it.

This site

Built the way I work: agent-first, static, boring on purpose.

The page you are reading is also a work sample. This is how it goes from an idea to production.

01Source

Private GitHub repository

The whole site lives in a private repo: content, styles, tests and deployment config in one reviewable history. Every change is a commit, nothing is edited in place.

02Design

Designed with Claude Design

The look was iterated as a high-fidelity prototype in Claude Design: tokens, typography, spacing and copy locked before a single line of production code existed.

03Production

Built with Claude Code

Claude Code recreated the design in Astro; type checks, a test suite and the production build all run before anything lands on the branch.

04Deploy

The deploy is a git push

Every push to the main branch builds and publishes on Cloudflare Pages automatically. No servers to log into, no deploy scripts to remember. The pipeline is the release process.

Static on purpose

What ships is plain HTML, CSS and a few kilobytes of vanilla JavaScript. No backend, no database, no accounts, no cookies. Nothing is running that could be broken into, and the hosting lives outside my own house.

The site collects anonymous visit statistics with self-hosted analytics. There are no tracking cookies, individual visitors are not identified, and the data is never shared or sold.

The smallest attack surface is the code that does not exist.

Everything here was set up end-to-end by a Hermes agent working from the owner's instructions: domain registration and DNS, the GitHub repository, the Cloudflare Pages deployment, and the site itself. No step was done by hand.