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 evaluated the benefits and challenges of running Jira as a containerised solution on OpenShift with PostgreSQL as an alternative to the existing architecture using virtual machines and a different database platform. The aim was to assess whether a potential migration would be suitable considering the organisation’s requirements and context.
Planned the implementation, communicated progress to the DevOps team and collaborated with colleagues on technical approaches and troubleshooting.
Designed and implemented the containerised deployment architecture, developing and testing the solution locally with Podman, Prometheus, Grafana and Alertmanager before deploying and validating it in an OpenShift test environment.
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 resulted in a reusable reference implementation for Jira on OpenShift with PostgreSQL, including automated deployment validation, observability and tested upgrade and rollback procedures. Together with the documented evaluation findings, it provided a concrete technical basis for assessing the feasibility of a potential migration.
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
This work created a 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
A team project that refactored an existing full stack guesthouse booking system from a Spring Boot monolith into separate booking and customer services. The services communicate through REST and own separate MySQL databases, while preserving the existing Next.js frontend and core booking rules.
Created the independent Customer Service by extracting and reorganising customer management from the original application into a separate Spring Boot repository with its own layered structure, REST API, validation and error handling. Configured the service to use its own MySQL database.
Cleaned and reorganised the Booking Service, restored its functionality and configured it to use its own MySQL database. Adapted the booking model to store the customer ID instead of maintaining customer data within the service.
Created multi-stage Dockerfiles for the frontend and both backend services. The final runtime images contain only the components required to run each application, excluding build tools, source files and test dependencies.
Created the shared Docker Compose environment for the complete local system, including the frontend, both Spring Boot services, separate MySQL databases, health checks and isolated environments for integration testing.
Implemented CI/CD for the Booking Service with GitHub Actions and Docker Hub, including automated builds and integration tests. Configured Railway staging and production environments with databases and health checks, automatic staging deployment and versioned releases promoting the same image digest without rebuilding.
Documented the solution through dedicated README files for all three repositories. Collaborated with the team through Scrum, daily meetings, version control, Pull Request reviews and troubleshooting during integration testing.
Outcome
The completed refactoring established separate booking and customer services with independent data ownership and working REST communication. The full local system can be built and started through Docker Compose, while preserving the existing frontend and core booking rules. The Booking Service also supports automated staging deployment and versioned production releases without rebuilding the container image.
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 solution provides a complete 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
A reusable automation baseline 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
In the hybrid lab environment, users and groups were synchronised between Active Directory and Microsoft Entra ID. Role based permissions, password policies and PowerShell automation supported least privilege and consistent administration. Azure Files and a Windows file server in Azure with mirrored NTFS storage extended the environment with cloud based file services.