Skip to content

Selected work

Everything here runs in production today. Clients and products stay anonymous; the numbers are measured.

Typical situations I solve

SaaS & LMS, education sector, since 2025

From AI prototype to a production SaaS

Role: Architect and lead engineer, end to end

160
serverless functions
1,048
automated test files
3
apps: web, iOS and Android
3,025
merged PRs in ten months

All-in-one platform and LMS for training providers that turns daily admin into audit evidence. It started in an AI app builder and became a secure multi-tenant product with web, iOS and Android apps.

How I did it
  • Architecture: React on Vercel, Supabase Postgres with row-level security on every table, 160 edge functions and 26 scheduled jobs
  • Courses and SCORM e-learning, session planning, e-signature attendance with QR codes, contracts and certificates
  • Training-funding workflows, a yearly regulatory report, a CRM and a public catalogue with Stripe checkout
  • Quality-audit module: evidence per indicator, a mock audit and a presentation mode for the auditor
  • AI agent (Gemini) that edits records after a confirm step, plus an MCP server in production: everything you can do in the UI also works from Claude, ChatGPT or your coding agent, including analytics and user data
  • Native Android and iOS apps (Kotlin/Compose, SwiftUI) with design tokens generated from the web CSS
  • Release pipeline: migrations dry-run before merge, only changed functions deployed, smoke tests after every deploy
  • Encrypted backups 7× a day, files mirrored to Cloudflare R2, nightly restore test into a separate twin project

Result: 3,025 merged pull requests in ten months, shipped in small reversible steps.

Stack: React, TypeScript, Supabase, PostgreSQL RLS, Deno, Vercel, Stripe, Gemini, MCP, Kotlin, SwiftUI, Cloudflare R2, Playwright

Service: AI agents for WhatsApp, chat and your website

Own product, 2026

Helptempo: a sales and support chat for any website, built as a reusable engine

Role: Product owner and engineer: design, build, packaging

~5 min
to add it to a site
~9 KB
widget, gzipped, no dependencies
4
hosting targets out of the box
3
model APIs, plus local models

A drop-in AI chat I built once and reuse on every site; each site brings only its own knowledge file. It answers open questions, quotes only the facts and prices the site shows, sends visitors to the right section with buttons and suggests the next question. The AI guide on this website runs on it: try it at the bottom right.

How I did it
  • Widget: one ES module in Shadow DOM, no dependencies, about 9 KB gzipped; works on plain HTML, WordPress, React and Next.js
  • One backend for any host: Next.js/Vercel, Azure Static Web Apps and Functions, Cloudflare Workers, Node/Express
  • Any model: Gemini, Claude or any OpenAI-compatible API, including local models (Ollama, vLLM) and gateways (LiteLLM), with an automatic fallback chain
  • Built to sell: answers end with navigation buttons into the page and follow-up questions; it qualifies visitors and points to the next step
  • Pre-written answers for starter questions (instant, no API call) and a server-side answer cache
  • Safe by default: keys only on the server, model output rendered as text only, allow-listed links, rate limiting, input limits, CORS deny by default
  • English, German, Spanish and French built in, light and dark, phone layout
  • Added to a new site in about five minutes: install, a knowledge file, a small config

Result: A new product page gets a working, multilingual sales advisor in minutes, and it quotes only what the page itself shows.

Stack: Web Components, Shadow DOM, TypeScript types, Gemini, Claude, OpenAI-compatible APIs, Ollama / vLLM, Azure Functions, Vercel, Cloudflare Workers, Node.js

Service: AI agents for WhatsApp, chat and your website

Client, surf school & hostel, Portugal, since 2026

Booking & operations platform for hospitality

Role: Architect and lead engineer, end to end

64
staff screens across 7 roles
107
serverless functions
4,958
unit tests + 77 end-to-end specs
2,133
merged PRs in six months

I took over an AI-built prototype and turned it into the platform that runs bookings, payments, staff operations, sales, marketing and WhatsApp guest messaging for a surf school and hostel.

How I did it
  • Booking funnels for surf lessons, camps, coworking, hostel stays, multi-week passes and weekend packages
  • Stay builder priced live from the hostel management system, booking written back after payment
  • Staff dashboard with 64 screens and 7 roles: calendar, walk-ins, check-in with tourist tax, quotes, vouchers, rentals, finance
  • Sales pipeline CRM with AI lead scoring, reply drafts and a manager's sales report
  • WhatsApp AI agent (Gemini) whose knowledge base grows from staff replies; new knowledge goes live only after manager approval
  • Marketing and campaign calendar for the whole team
  • Read-only public API and MCP server (no personal data, hashed keys) the client uses to automate weekly planning
  • Staging/production split, PR-only workflow, encrypted backups every 4 hours independent of the hosting provider
  • Watchdogs: hourly booking-funnel probes, a daily synthetic payment and a booking-drought alert

Result: When the hostel system's vendor changed its API without notice, the probes caught it and stays were bookable again the same day.

Stack: React, TypeScript, Supabase, PostgreSQL, Vercel, Stripe, Hostel PMS API, Twilio WhatsApp, Gemini, MCP, Playwright, GitHub Actions

Service: AI agents for WhatsApp, chat and your website

Hospitality and education SaaS, 2025–2026

Custom sales CRM with AI lead scoring

Role: Architect and lead engineer, end to end

2
platforms with a custom CRM built in

The sales pipeline lives inside the platform the business already runs on, next to bookings, payments and marketing. AI scores the leads and drafts the replies, and the manager sees the numbers in one report.

How I did it
  • Sales pipeline CRM from first enquiry to booking
  • AI lead scoring (Gemini) so the team calls the best leads first
  • AI reply drafts that the team edits and sends
  • A sales report for the manager
  • The education SaaS has its own CRM module too, next to funding workflows and the course catalogue

Result: Sales, bookings and marketing in one system, with AI doing the first draft.

Stack: React, TypeScript, Supabase, PostgreSQL, Gemini

Service: AI agents for WhatsApp, chat and your website

European hospitality platform, 2026

GEO: making a restaurant network visible in AI search

Role: GEO consultant: analysis, baseline, experiments and proofs of concept

10
experiments ranked by impact
~150
landing pages in prompt research
3
phases: assess, select, sprint

A platform with a large network of restaurant websites wanted guests to find and book restaurants through ChatGPT, Gemini and Google's AI answers. I measured where AI-referred traffic comes from today, set up prompt research and turned the findings into a ranked set of experiments with working proofs of concept.

How I did it
  • Baseline of AI-referred visits and conversions next to classic search, from web analytics and Google Search Console
  • Prompt research for about 150 landing pages: realistic guest questions generated with an LLM from the sitemap, tracked in Semrush
  • Evaluation of AI-visibility and listing tools, including the questions legal and data protection ask
  • Listing platforms compared for publishing restaurant data to third-party portals via API
  • 10 experiments ranked by impact and effort, chosen in a workshop and run in sprints
  • Proofs of concept: automated publishing to third-party portals and a generator for SEO/GEO articles

Result: A measured baseline and a ranked roadmap instead of guesswork, plus tools the team keeps using.

Stack: Semrush, Google Search Console, Web analytics, Open LLMs, Schema.org, Listing APIs, Python

Service: GEO and SEO: visible in AI answers and search

Media-technology platform, 2026

Hybrid Kubernetes for live broadcast

Role: Platform engineer in the core team

130
showcase releases
~120×
faster VM image import
2
worlds: bare metal + AWS

Live-production media functions run as booked, on-demand workloads on Kubernetes: on-prem bare metal behind a VPN and on AWS. I built the booking showcase and much of the integration that made the platform operable live.

How I did it
  • Booking showcase in Go and Angular: book a production, watch it deploy, preview it over WebRTC; Helm chart and GitOps rollout to both clusters
  • Windows orchestration server as a VM on KubeVirt inside the bare-metal cluster; VM image import over the VPN about 120× faster
  • Cassandra and OpenSearch moved into the cluster so the platform can run air-gapped
  • Cost guardrails in code: dev torn down every night, time-limited preview environments, orphaned-volume sweeps, cost tags enforced at plan time, cross-zone traffic alerts
  • FluxCD health alerts to chat, Keycloak single sign-on for Grafana, External Secrets, oauth2-proxy in front of internal tools
  • Operated and debugged Talos clusters on bare metal and EC2 with Karpenter; submitted networking fixes to an open-source media-transport project

Result: Productions are booked and deployed on demand, and the dev environment is off every night and weekend by default.

Stack: Kubernetes, Talos, KubeVirt, AWS EC2, Karpenter, FluxCD, Helm, Go, Angular, Cassandra, OpenSearch, Keycloak, Prometheus, Grafana, Loki, Terraform

Service: Cloud cost optimization (FinOps), Kubernetes orchestration and optimization, Local and private AI for sensitive data, Cloud migration and legacy modernization

European retail data platform, 2026

Azure FinOps & Kubernetes right-sizing

Role: Sole DevOps engineer, owner of the cost programme

−48%
total Azure costs, in five weeks
7 → 4
Kubernetes nodes
~40×
less Cosmos DB load
~35
changes in one month, one ticket each

As the only DevOps engineer on a platform running on AKS, Postgres and Cosmos DB, I cut the total Azure costs (monthly run-rate) by 48% in five weeks without changing anything customers could see.

How I did it
  • Amortized cost baseline per resource from the Cost Management API, with a forward run-rate model instead of waiting for the invoice
  • A live check before every recommendation: what runs on it, who uses it, peak load instead of averages
  • Kubernetes right-sizing from Prometheus p95 usage, then fewer nodes; reservations returned the day a machine left
  • Database standbys and retention matched to real needs; tenant databases moved into the cluster with CloudNativePG, row counts and checksums identical
  • Monitoring stack moved from its own VM into AKS; debug logging into paid storage turned down
  • One query fix cut the load on a serverless Cosmos DB about 40×, with identical output
  • Daily cost report to chat, budgets with forecast alerts, a tagging schema and a weekly management report with a two-month forecast

Result: Every change came with its impact, risk and rollback path, one ticket each. Nothing customers could notice was touched.

Stack: Azure AKS, Cost Management API, Reservations, PostgreSQL, CloudNativePG, Cosmos DB, Prometheus, Grafana, Loki, Terraform

Service: Cloud cost optimization (FinOps), Kubernetes orchestration and optimization

Pattern on SaaS, broadcast and retail platforms, 2026

Monitoring on business outcomes, backups proven nightly

Role: Designed and built it on each platform

10 min
outside-in checks
nightly
restore test
143
alert rules on Kubernetes

Dashboards can stay green while customers can't pay. I set up monitoring that checks what the business cares about and keeps alerts quiet enough that people still read them.

How I did it
  • Synthetic checks from outside every 10 minutes, an hourly walk through the booking funnel and a daily test payment
  • Outcome watchdogs against the source of truth: paid but no reservation, visitors but no bookings
  • Release gates: migrations dry-run before merge, a smoke test after every deploy that turns it red if a vital route breaks
  • Noise control: one GitHub issue per outage, opened and closed automatically, deduplicated, hourly caps
  • Prometheus, Grafana, Loki and Alertmanager with 143 alert rules on a Kubernetes platform
  • Encrypted backups every 3–4 hours stored away from the provider, restored every night into an isolated twin
  • Audit trail on S3 Object Lock (write once, kept 90 days) with write-only credentials

Result: Backups are restored every night instead of hoped for, and alert channels stay readable.

Stack: Prometheus, Grafana, Loki, Alertmanager, FluxCD, GitHub Actions, Playwright, pg_dump, age / GPG, Cloudflare R2, S3 Object Lock, Azure Monitor

Service: Kubernetes orchestration and optimization, Enterprise security and scaling

Own tool, 2026

AI browser testing: describe a flow, get a verdict

Role: Creator

9
steps to set up a test, not ~200
6+
projects verified

An AI agent drives a real Chrome through Playwright. You describe a user flow in plain language; it clicks through it and returns a structured pass or fail with console errors, failed requests and a fix prompt.

How I did it
  • Test scenarios in plain language with a JSON verdict: passed, failed expectations, console errors, network failures, fix prompt
  • Route map with warm login profiles; an AI fallback flags routes that moved
  • Multi-role checks: one role acts, another role's screen must update without a reload, and the delay is measured
  • iPhone and in-app-browser emulation to reproduce bugs reported by end users

Result: The standard check before and after production releases on two live platforms.

Stack: Node.js, Claude Code, Playwright MCP, Chrome, WebKit

Own hardware project

Offline AI robot on an ESP32

Role: Design and build

0
cloud services needed
100%
local voice and AI

A small robot built from scratch: an ESP32 with servos, sensors and an OLED display. Voice and AI run on a local Whisper model and a local LLM, so it hears, thinks and moves with no internet at all.

How I did it
  • ESP32 firmware with PlatformIO and the Arduino framework: servos, sensors and an SSD1306 display
  • Speech-to-text on a local Whisper server, answers from a local LLM
  • Air-gapped by design, with its own fallback hotspot and Wi-Fi control
  • The same pattern I use for private AI in companies: no data leaves the device

Result: A working robot that runs voice and AI fully offline.

Stack: ESP32, PlatformIO, C++, Arduino, SSD1306 OLED, Whisper, Local LLM

Service: Local and private AI for sensitive data

UK retail bank, 2023–2024

Release engineering for banking apps used by millions

Role: DevOps engineer for the mobile release pipelines

~40%
faster release cycles
2
app stores, iOS and Android
4
pipeline stages to production

A whole family of retail-banking apps in the App Store and Google Play, including multi-banking with accounts from other banks. I built the pipelines that build, harden, sign and ship them, in one of the most regulated industries there is.

How I did it
  • Multi-stage pipelines (Dev, PoC, QA, Prod) that build, sign and ship the iOS and Android apps to TestFlight, the App Store, Firebase, Google Play and SauceLabs
  • Multi-banking in the app: accounts and transactions from other banks next to the customer's own, shipped through the same pipelines
  • App hardening with Promon and automated MobSF security scans in every pipeline
  • Nightly builds that catch breaking changes early
  • Version compatibility between backend, web and mobile, with zero-downtime rollback

Result: Release cycles about 40% faster, in a heavily regulated environment.

Stack: iOS, Android, Fastlane, Jenkins, TestFlight, Firebase, Google Play, SauceLabs, Promon, MobSF

Service: Enterprise security and scaling

Automotive manufacturer, 2022–2023

A regulated workload moves to Azure, fully in Terraform

Role: Azure DevOps engineer: migration, Terraform, governance

~25%
lower cloud costs
100%
infrastructure as Terraform code

A regulation-relevant tuning-detection application had to move to Azure Kubernetes Service without loosening a single control. Everything went in as code, with guardrails that apply to every team.

How I did it
  • Moved the regulation-relevant tuning-detection application to Azure Kubernetes Service, fully in Terraform
  • Azure Policies and Blueprints enforcing security baselines and network rules across teams
  • Observability with Azure Monitor, Defender and Grafana
  • Cost controls and a tagging strategy, so every euro has an owner

Result: Cloud costs about 25% lower, with security baselines enforced as code across teams.

Stack: Azure AKS, Terraform, Azure Policy, Azure Blueprints, Azure Monitor, Microsoft Defender for Cloud, Grafana

Service: Cloud cost optimization (FinOps), Cloud migration and legacy modernization, Enterprise security and scaling

Public sector, healthcare, 2019–2022

Sensitive health records between two public systems, none lost

Role: Cloud engineer and the client's representative in an inter-cantonal steering committee

0
records lost
2
public health systems connected

Two public health systems had to exchange highly sensitive records reliably. I built the serverless middleware between them and represented the client in the steering committee that planned releases with the other cantons.

How I did it
  • Serverless middleware on Azure Functions (TypeScript) that moves highly sensitive records between two public health systems
  • Azure Queue Storage between the systems: if one side is unavailable, records wait in the queue instead of getting lost
  • First deputy, then the client's representative in an inter-cantonal steering committee
  • Release planning across cantons, so changes on both sides went live in step

Result: Not a single record lost between the two systems.

Stack: Azure Functions, TypeScript, Azure Queue Storage, REST APIs

Service: Local and private AI for sensitive data, Cloud migration and legacy modernization, Enterprise security and scaling

Professional services, ERP and CRM, 2019–2022

Two-way ERP ⇄ CRM sync while both systems stayed live

Role: Built the sync end to end

2-way
sync, ERP ⇄ CRM
2
systems in live use throughout

Sales worked in HubSpot, finance and projects in Maconomy, and nobody could stop for a big-bang cut-over. I built a bi-directional sync so both systems stayed in live use with the same data.

How I did it
  • Bi-directional sync between Maconomy (ERP) and HubSpot (CRM)
  • Both systems stayed in live use the whole time, no big-bang cut-over
  • Changes flow both ways, so sales and finance work on the same customer data

Result: One customer record across ERP and CRM, without stopping either system.

Stack: Maconomy, HubSpot, REST APIs

Service: Cloud migration and legacy modernization

Consultancy, information security, 2019–2022

ISO 27001 certification tool with native apps

Role: Developer: Spring Boot backend and native apps

3
parts: backend, Android and iOS app

Getting and keeping ISO 27001 means a long list of controls and the evidence behind each one. This tool gave staff one place for it: a Spring Boot backend and native Android and iOS apps.

How I did it
  • Spring Boot backend with REST APIs for controls, evidence and their status
  • Native Android and iOS apps, so staff manage controls and evidence wherever they are
  • One place for the whole certification instead of spreadsheets and shared folders

Result: Controls and evidence in one place, used by staff day to day.

Stack: Spring Boot, Java, REST APIs, Android, iOS

Service: Enterprise security and scaling

    Get in touch

    Tell me what you're building. I'll reply within 1–2 business days.

    Dominik Heinrich
    Company
    MADO Consulting

    Available worldwide, remote. On-site on request, depending on the country.

    I reply within 1–2 business days. Free slots: see the calendar

    Opens Calendly's booking calendar here. Loading it sends data to Calendly (see Impressum).