Projects

Engineering across software, platforms and infrastructure.

A selection of professional, academic and independent projects spanning backend development, integration, automation, cloud and software delivery.

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.

JavaSpring BootMavenMicroservicesREST APIsMySQLDockerDocker ComposeReactNext.jsGitHub ActionsDocker HubRailway
My contribution
  • 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.

PythonFlaskDockerGitHub ActionsGitOpsKubernetesHelmArgo CDPrometheusGrafanaTrivy
My contribution
  • 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.

Add the PDF file to public/documents first.