Skip to content

I build and ship production software.

For more than 20 years, I’ve designed, implemented and managed production software across the full stack, from product features and APIs to the cloud infrastructure behind them, working across all major cloud providers and many smaller platforms.

// about

My work is increasingly focused on cloud architecture: designing systems that are reliable, maintainable, and ready to evolve. I’m also exploring cost-effective ways to integrate AI into existing business workflows. Through Nuforta, I consult with teams on software and cloud systems. Outside work, I tinker with microcontrollers, restore vintage computers, build radio-controlled airplanes, and train for triathlons.

// infrastructure

This website is part of a shared, serverless architecture built on Microsoft Azure.

Azure Blob Storage serves the static sites through Bunny CDN, shared Azure Functions handle form submissions, and Application Insights monitors performance and availability.

Overengineered? Absolutely. But it works and it's fun to mess with.

azure + bunny = static sites platform
bunny cdn·pull zone · ssl · caching · edge rules
azure blob storage
static website assets · infra as code config
azure function app
form handler
table storage
form submissions
acs email
azure communication services
app insights· availability alerts · log analytics
platform details →

Architecture diagram: Bunny CDN pull zones serves sites from Azure Blob Storage. Forms POST to a shared Azure Function App, which stores submissions in Table Storage and sends email via Azure Communication Services. Application Insights monitors availability and performance across all sites.

// projects

dotSynergy Platform — Multitenant CMS, blogging and ecommerce platform
Kotlin · Hibernate · Bootstrap · Gradle · Flyway · Sparkjava
Markdown Organizer — Markdown project manager
QT · QT Widgets · Markdown · Sqlite
Statuso — Simple server monitoring (go)
Go · Echo · Gorm · Tailwindcss
all projects →

// stack

cloud
awsazurehetznerterraformdockerkubernetesnginxcloudflare
languages
gorustpythontypescriptjavakotlinbashsql

// notes

Generate an image with OpenAI2022.12.02Install a local GitLab Runner2022.08.02all notes →