Software development

In recent years, I have worked on various projects as part of my self-employment, my studies, and private work. Below I briefly present the most interesting projects. The list is sorted chronologically and starts with the most recent project.

Document management system

SimpleDMS is a document management system for small businesses that sorts documents almost automatically.

The software is multi-tenant and is offered both on-premises and as SaaS.

The backend is implemented in Go and uses SQLite as the database. The frontend uses server-rendered HTML templates, Tailwind CSS, and htmx.

HR software

For a client, I planned and developed an extensive HR software solution from 2020 to early 2025, including the infrastructure for SaaS operation. At first, I developed the software on my own, and from the end of 2022 I led a small team.

The feature set includes, among other things, time-controlled master data management for people and company data, a simple document repository, recruiting functions, a workflow engine, task management, a contract management module, and a permission system with support for matrix organizations.

The backend was implemented in Go. The frontend used TypeScript, web components implemented with Lit, and Tailwind CSS. Communication between backend and frontend was implemented with Protocol Buffers.

Digital business card

The digital business card is a website optimized for mobile devices. Thanks to modern web technologies, it can also be used as a smartphone app without installation.

It serves as a replacement for classic business cards or as a simple website for small and medium-sized businesses.

The backend with a RESTful API is developed in Go and uses PostgreSQL as the database. The frontend is implemented in HTML, CSS, and JavaScript and uses the JavaScript library Riot.js and the static site generator Hugo. The digital business card itself is a Progressive Web App and uses modern web standards.

The web application myFOTOSHOOT aims to simplify collaboration between photographers and their clients.

With myFOTOSHOOT, photographers can provide photos from a photo shoot to clients and collect feedback. For example, clients can select photos for post-processing.

The backend with a RESTful API is developed in Go and uses PostgreSQL as the database. The frontend is implemented with HTML, CSS, and JavaScript and uses the JavaScript library Riot.js and the static site generator Hugo.

Stateless password manager

Because none of the password managers available on the market met my requirements, I developed my own password manager for private use. The special feature of this password manager is that passwords are not stored anywhere and are recalculated every time they are used based on a master password.

The password manager is implemented as a Chrome extension.

Integration of solar plant data into a website

For a long-term client, I developed an application to process and display live data from a newly installed solar plant on the roof of the workshop building. The plant's live data is displayed on the website and on a TV screen in the workshop building for visitors.

Raw data is provided through an API by the solar plant and processed with a Joomla extension developed for this purpose, then visualized with the JavaScript library Chart.js.

Billing system for a SaaS web application

For a time tracking software sold as SaaS, I developed a billing system in collaboration with a user experience designer.

Previously, the number of used licenses was checked manually by accounting and then invoiced to clients. The new billing system automated license calculation, invoicing, and credit card payment for small and medium-sized clients. For larger on-premises clients, who continued to pay by invoice, workflows for accounting were optimized.

The backend with a RESTful API was developed in Go and uses PostgreSQL as the database. The frontend is implemented with HTML, CSS, and JavaScript and uses the JavaScript library Riot.js and the static site generator Hugo.

Modernization of a legacy application

In a multi-year project, I modernized the user interface of a time tracking software that was more than 20 years old together with a user experience designer, a web designer, and the lead developer of the existing software.
The focus was on making the software easier to use for clients and optimizing workflows for the support team.

In the core software implemented in C, the existing REST-like API was further expanded by the core software developer. Based on that, I implemented an abstraction layer in Go with a RESTful API that can be used by multiple instances of the core software. PostgreSQL is used as the database. The new frontend built with HTML, CSS, JavaScript, Riot.js, and Hugo communicates partly directly with the core system and partly with the Go abstraction layer.

Website tools

I developed the Website Tools as a successor to my website backup service. The Website Tools are a central platform with various connectors for content management systems. I currently use them for monitoring available website updates and for daily backups.

The application is implemented in Go and uses PostgreSQL as the database. The frontend is built with HTML, CSS, and JavaScript and uses Riot.js and Hugo. The connectors are implemented in PHP as Joomla extensions and WordPress plugins.

Applicant and talent management

Together with a user experience designer and a web designer, I developed a web application for applicant and talent management for the HR department of a leading Swiss telecommunications company.

The application optimizes recruiting workflows, for example communication between HR and managers in the individual departments, and supports filling new positions with internal talent.

The backend with a RESTful API is developed in Go and uses MariaDB as the database. The frontend uses HTML, CSS, vanilla JavaScript, and the static site generator Hugo.

I developed the first version of the Sitemap Generator for creating XML sitemaps in 2014 and published it as an online tool. Today, the Sitemap Generator is available as an online tool, command-line application, WordPress plugin, and Joomla extension.

Development of the Link Checker followed in 2015 and continues to this day. It checks websites for broken links, images, and videos and is available as an online tool, WordPress plugin, and Joomla extension.

At their peak, the two tools had over 50,000 active installations and more than 1,000 daily users.

The backend of both tools is implemented in Go and can be accessed through a RESTful API. The client uses HTML, CSS, JavaScript, and Riot.js. WordPress and Joomla integrations are implemented in PHP.

Site and web crawler

Work on the site crawler started in 2014 as a learning project while I was learning Go. Over the years, I expanded it continuously, and today it forms the foundation of the Sitemap Generator and Link Checker.

Based on the site crawler, I also developed a web crawler that I primarily use to analyze the Swiss internet.

The site crawler and web crawler are implemented in Go, and the web crawler uses PostgreSQL as the database.

Website backup service

The website backup service enabled regular backups of websites and databases and included a comparison function that helped detect tampering by unauthorized third parties.

I operated the website backup service as a SaaS application until it was replaced by the Website Tools.

Implemented as a Java EE application with MySQL as the database.

Online meeting software for development work

For an aid organization, I developed a simple online meeting software for Joomla as an extension for running presentations, designed to work even with poor internet connections.

The organization had previously faced the issue that available online meeting solutions required stable and fast internet access, while local partners in developing countries often did not have a sufficiently good connection and could not run presentations or could only do so with restrictions.

Implemented with PHP, HTML, CSS, and JavaScript for Joomla.

Analysis of an Android attack technique

As part of a study project, I worked out an attack technique for Android smartphones in the second half of 2013. With this technique, the operating system of a smartphone can be manipulated within a minute when physical access is available. To demonstrate the impact of such an attack, I developed an app that regularly takes photos with the camera and sends them to a predefined email address, while being disguised and installed as a system app.

With this attack technique, an attacker could for example gain short-term access to a victim's device at a trade fair, seminar, or training event and manipulate the operating system so the device acts as a bug.

Included in-depth analysis of the Android operating system and development of the app in Java.

Research project in artificial intelligence

From September 2011 to February 2012, I completed a full-time internship at the Research Center for Ambient Intelligence at Saxion University of Applied Sciences. My task was to determine whether it is possible to develop a self-learning system that can reliably identify people in an apartment based on sounds. To achieve this, I worked intensively with neural networks.

The experiments were carried out with Neuroph in Java, and a setup for distributing computing load across multiple machines was built with shell scripts.

Management system for a Dutch non-profit organization

During my studies at Saxion University of Applied Sciences, I developed a management system for a Dutch non-profit organization together with four fellow students as part of a project. The goal was to simplify and optimize workflows that had previously been managed in Excel spreadsheets through a central web application. The developed platform is actively used by more than 50 people.

Developed with PHP, HTML, CSS, JavaScript, and MySQL as the database.

Linux file system

In spring 2012, I developed a prototype of a tag-based UNIX file system. The special characteristic of this file system is that it operates entirely in kernel space and can be layered non-destructively on top of any existing file system. The main use case of this file system is the management of photos and other multimedia content.

Developed in C for the Linux kernel.

Digital library

For a schoolbook publisher in Austria, I developed a digital library with an access system that enables teachers and students to use textbooks online.

Implemented with PHP, HTML, CSS, and JavaScript for Joomla.

Joomla galleries

For the content management system Joomla, I developed two open source galleries. The special feature of these galleries is that they work without a database and generate their output on the fly from photos in the file system.

Implemented with PHP, HTML, CSS, and JavaScript for Joomla.

Raffle system for decommissioned hardware

During my apprenticeship as a chemical laboratory technician at a Swiss pharmaceutical company, I developed an intranet application as part of a training enterprise to raffle decommissioned hardware, primarily laptops from field staff, among employees. I had acquired the necessary skills through self-study in previous years.

Training enterprises were small companies run independently by apprentices within the company that provided services for employees.

Implemented with PHP, HTML, CSS, JavaScript, and MySQL as the database.