Engineering across software, platforms and infrastructure.
A selection of professional, academic and independent projects spanning backend development, integration, automation, cloud and software delivery.
Swedish Public Employment Service
DevOps · Platform Engineering
Containerisation and Automation of Jira in OpenShift
The project investigated the benefits and challenges of moving an enterprise Jira environment from virtual machines to a containerised solution on OpenShift while transitioning its database to PostgreSQL, to evaluate the suitability of this architecture for a potential migration.
Planned the implementation and kept the DevOps team informed of the progress, while discussing technical options and troubleshooting issues with them when needed.
Designed and implemented the containerised deployment architecture, developing and testing the solution locally with Podman, Prometheus, Grafana and Alertmanager before deploying it to OpenShift.
Adapted the Helm chart to integrate the Elastic APM Agent through an initContainer, enabling application monitoring, visualisation and alerts in Kibana. Configured StatefulSets, PersistentVolumeClaims, Routes, Secrets, ConfigMaps and a declarative PostgreSQL deployment for the solution in OpenShift.
Automated deployment validation with Tekton, tested Jira upgrades and rollbacks with Helm, and documented the implementation to support reproducible deployment and maintenance.
Collaborated with the OpenShift team to make Jira images available through the organisation's internal Quay mirror, and with the observability team to onboard the application for Heartbeat monitoring.
Presented the implemented solution, technical decisions and evaluation findings to colleagues and stakeholders.
Outcome
The project produced a working and reusable technical foundation for running Jira on OpenShift with PostgreSQL, including automated deployment validation, observability and tested upgrade and rollback procedures. This gave the organisation a concrete technical basis for evaluating a Jira migration from virtual machines to OpenShift.
Own project
Featured · Platform
Enterprise Integration Platform
Created to connect business systems through different integration protocols without duplicating business logic or losing operational visibility. The platform combines a modular Spring Boot monolith with a Next.js portal, supporting secure REST, SOAP and asynchronous ActiveMQ/JMS flows through shared services, persistence and traceability.
Designed the platform architecture and built the Spring Boot backend and Next.js portal, including dashboard monitoring, message search, filtering, details, CSV export and message submission.
Created the frontend authentication flow with HttpOnly cookies, route protection enforced on the server and a Next.js proxy that forwards authenticated requests to the backend.
Developed shared REST and SOAP flows, asynchronous processing with ActiveMQ/JMS, PostgreSQL persistence, retries, DLQ forwarding, idempotency and Correlation IDs. Secured individual operations through persistent users, JWT, API Key, HTTP Basic, RBAC and rate limiting.
Introduced observability as code through Prometheus metrics and alert rules, provisioned Grafana dashboards for platform operations and authentication security, and structured JSON logging.
Verified the backend with a layered test suite covering unit, integration, contract, BDD and concurrency testing, as well as tests against real infrastructure with Testcontainers.
Automated CI/CD with GitHub Actions, including Trivy and Gitleaks scanning, CycloneDX SBOM generation and publication of container images for multiple architectures to GHCR.
Outcome
Produced a working platform that securely processes and traces messages across REST, SOAP and asynchronous flows, with an operational frontend for monitoring and managing them. Automated testing, observability and reproducible container delivery provide a verified technical foundation for deploying, operating and extending the platform.
Nackademin
Full-Stack · Microservices · Team Project
Pensionat Booking System
An ongoing team project evolving a working full stack guesthouse booking system from a Spring Boot monolith toward microservices as its responsibilities grow. Customer management is being separated from booking and room responsibilities into its own Spring Boot service and MySQL database, while preserving the existing Next.js frontend and business rules.
Contributed to the original full stack system by implementing core booking features and integrating the Next.js frontend with the Spring Boot backend and MySQL database. Configured the team Git workflow with branch protection and Pull Request reviews, documented the project and shared solutions reused by the team.
Created the separate customer service repository by extracting and reorganising customer functionality into an independent Spring Boot application with its own layered structure, REST API, validation, error handling and MySQL database.
Cleaned and reorganised the booking backend, restored it to a functional state and adapted bookings to store the customer ID instead of a direct customer relationship, preparing the boundary between the services.
Currently responsible for the next implementation phase, including REST communication and failure handling between services, integration tests, application Dockerfiles, Docker Compose for the complete system, documentation and deployment.
Outcome
The work has preserved a functional booking system while establishing the first independent service boundary. Customer management now has its own Spring Boot application and MySQL database, while the booking model references customers by ID, providing a working foundation for connecting the services and completing the remaining delivery requirements.
Own project
DevOps · GitOps Platform
Electricity Price Sweden
Created to demonstrate a reliable delivery path from source code to Kubernetes without rebuilding artifacts between environments. A Flask application developed for the project visualises hourly electricity prices across Swedish regions, while separate application and GitOps repositories automate validation and controlled promotion through DEV, STAGING and PROD.
Developed the Flask application to retrieve, process and visualise electricity prices from an external API using Pandas and Plotly. Added health, readiness and Prometheus endpoints together with automated tests using pytest.
Designed the architecture across two repositories and automated tests, coverage, container image builds for multiple architectures and publication to GHCR with GitHub Actions. Added Trivy scanning, Gitleaks secret detection, CycloneDX SBOM generation and Dependabot.
Built Helm and Argo CD deployment across dedicated DEV, STAGING and PROD namespaces, with Pull Request based promotion of the same immutable image digest, SemVer releases and declarative rollback without rebuilding.
Implemented manifest and policy validation with Helm, kubeconform, kube-linter and OPA/Conftest, together with nonroot containers, NetworkPolicy and autoscaling.
Established runtime observability with Prometheus, Grafana and Alertmanager, defining and validating alert rules for availability, latency, error rates, upstream failures, resource usage and container restarts.
Outcome
The project produced a complete working GitOps flow in which one scanned container digest is promoted through DEV, STAGING and PROD and deployed by Argo CD without rebuilding. The application runs in three Kubernetes namespaces with health checks, policy controls, autoscaling, observability and a declarative rollback path, providing a reproducible demonstration of production oriented software delivery.
Nackademin
DevOps · Infrastructure Automation
Infrastructure Automation with Ansible
Created to replace repeated manual configuration of existing Linux hosts with structured and reusable automation. The solution uses Ansible playbooks, roles, inventories, encrypted variables and Jinja2 templates to configure web and database servers, security controls, monitoring and recurring system administration tasks.
AnsibleLinuxInfrastructure as CodeApacheMariaDBPrometheusNode ExporterDockerAnsible VaultJinja2
My contribution
Designed a modular Ansible structure with inventories, group variables, encrypted configuration through Ansible Vault, reusable roles and Jinja2 templates for separate web and database server responsibilities.
Automated Apache installation, service management, Virtual Host configuration and web content deployment. Configured MariaDB, created the application database and user, and assigned database permissions through a dedicated role.
Integrated a custom Ansible collection into the web server role, using a purpose-built module to generate and update a deterministic image from the deployed web content. Also automated the visitor application as an enabled user-level systemd service.
Implemented security and administration automation for default deny firewall rules, sudo restrictions, user management, hostnames, timezone configuration and selected AlmaLinux 9 compliance checks.
Installed Node Exporter as a systemd service on managed hosts and automated Prometheus configuration and Docker based monitoring on the control node, including scrape targets for the web and database servers.
Outcome
Produced a reusable automation baseline that configures web and database hosts consistently from one control node. Dedicated roles deploy Apache and MariaDB, while focused playbooks apply firewall, compliance and monitoring controls, replacing repeated manual steps with version controlled and maintainable infrastructure configuration.
Nackademin
DevOps · Hybrid Infrastructure
Windows Server & Azure Hybrid Infrastructure
Created to demonstrate how centralised identity and resource administration in a Windows Server domain can extend into Microsoft cloud services. The completed lab combines Active Directory, PowerShell automation and Group Policy with synchronised Microsoft Entra ID identities, Azure infrastructure, storage, secure connectivity and monitoring.
Windows ServerActive DirectoryMicrosoft AzureMicrosoft Entra IDPowerShellAzure FilesGroup PolicyHybrid Identity
My contribution
Designed and configured a Windows Server 2022 domain environment with Active Directory Domain Services, DNS, organisational units, security groups and role based access to shared resources.
Automated Active Directory user provisioning from CSV data with PowerShell, including account name generation, Swedish character normalisation, configurable organisational units, existing account validation and secure password handling.
Configured Group Policy, password and account lockout policies, NTFS permissions, folder redirection, file and print services, and IIS. Extended local users and groups into Microsoft Entra ID through identity synchronisation and connected them with Microsoft cloud services.
Extended the environment with Azure virtual infrastructure, Azure Files, Azure SQL Database, VPN connectivity, monitoring and storage administration. Configured a Windows Server file server in an Azure virtual machine with mirrored NTFS storage.
Outcome
The project produced a completed hybrid lab in which corresponding users and groups were represented in both Active Directory and Microsoft Entra ID. Centralised policies and PowerShell automation standardised local administration, while Azure Files and an Azure hosted Windows file server with mirrored storage demonstrated cloud connected identity, infrastructure and file services.