# Dennis Thanner > Software engineer with 8 years of experience. Language independent, with a preference for TypeScript and Python. I take products from idea to production and stay for the maintenance. Personal site of Dennis Thanner, a software engineer based in Munich. Available for freelance work. ## Pages - [Home](https://dnnsthnnr.com/): Overview and services - [Projects](https://dnnsthnnr.com/projects): Products I build and run - [Writing](https://dnnsthnnr.com/writing): Articles on system design and building - [CV](https://dnnsthnnr.com/cv): Experience and skills ([PDF](https://dnnsthnnr.com/cv.pdf)) - [Imprint](https://dnnsthnnr.com/imprint): Legal information ## Projects - [doqs](https://doqs.dev): Fill out PDF templates or render HTML templates to PDFs, through an API or the dashboard. - [makemap](https://makemap.co): Take your Strava route and design a personalised print of it. - [convertlocal](https://convertlocal.app): Free, easy file conversion right in your browser. No more file uploads to dodgy conversion sites. - [rankedsudoku](https://rankedsudoku.com): Race the clock and climb the leaderboard. ## Writing - [Weekend build: Free local first image conversion in the browser](https://dnnsthnnr.com/writing/weekend-build-free-local-first-image-conversion-in-the-browser): How I built a browser-based image conversion tool that processes files locally without uploading them to any server, leveraging WebAssembly to run powerful image processing libraries directly in your browser. - [Transactional Outbox: How to safely offload work into the background](https://dnnsthnnr.com/writing/transactional-outbox-how-to-safely-offload-tasks-into-the-background): Learn how the Transactional Outbox pattern solves the dual write problem in distributed systems. Ensure reliable event-driven processing with practical examples and scalable implementations using polling and CDC - [Idempotent database inserts: Getting it right](https://dnnsthnnr.com/writing/idempotent-database-inserts-getting-it-right): Idempotence is the basis of resilient distributed systems. This blog post explores a common solution for idempotent database inserts and its flaws and proposes an improved version. ## Optional - [RSS feed](https://dnnsthnnr.com/feed.xml) - [Sitemap](https://dnnsthnnr.com/sitemap.xml) - [GitHub](https://github.com/dnnsthnnr) - [LinkedIn](https://www.linkedin.com/in/dennis-thanner/) - Contact: hello@dnnsthnnr.com