kamal
ENFRLocal time in Rabat

Kamal Ezzarmou, Software Engineer · Full Stack & DevOps

About

cat about.txt

I build and ship full-stack web apps, and the pipelines behind them.

I build Java/Kotlin Spring Boot services and React front-ends, running on AWS, GCP, and Kubernetes. I gravitate to the unglamorous parts: services that stay up, deploys that don't scare anyone, and production you can actually see into.

Over the past 3 years, I've helped migrate a live platform to AWS as part of a team, sped up releases with CI/CD, and wired up monitoring that surfaces problems before users feel them, across industrial IoT, public-sector, and consumer products.

Experience highlights

ls ~/work

ims/

IMS · iMedia24 GmbH · Dec 2025 – Present

iMedia24's internal HR platform for time tracking, time off, tasks, benefits, and team operations.

↳ One reusable bulk-actions framework, adopted across four admin tables.

optiwatch/

Optiwatch · Evinsys · Aug 2024 – Nov 2025

Internal monitoring tool for nodes, services, incidents, and alerts across Evinsys apps.

↳ One view of infrastructure health, with incident alerts delivered by SMS and WhatsApp.

cmr-portal/

CMR Portal · Baker Tilly SEVEN · Nov 2022 – Dec 2023

Morocco's official public-pension platform, with online services for retirees and affiliates.

↳ Repeatable releases through Jenkins pipelines, with production monitoring in Prometheus and Grafana.

Experience

git log --graph experience

  1. Full Stack Developer @ iMedia24 GmbH (HEAD → now)

    Dec 2025 – Present · Remote (Rabat)

    iMedia24's internal HR platform covering time tracking, time off, tasks, benefits, and team operations.

    • Rewrote the notification module on top of Pub/Sub, improving delivery performance and letting new notification types be added without touching feature code.
    • Implemented passkey authentication and envelope encryption for the payroll module.
    • Built a reusable table bulk-actions framework (row selection, eligibility rules, a confirmation and review dialog, and per-row error reporting), now used across the members, benefit claims, challenges, and on-call report tables.
    • Build features on the Kotlin/Spring Boot backend and Next.js frontend with unit and integration tests; deploy to GCP (Cloud Run, Cloud SQL, Pub/Sub) via GitHub Actions.
  2. Full Stack Developer @ Evinsys

    Aug 2024 – Nov 2025 · Remote

    Optiwatch, the internal monitoring tool for all Evinsys apps.

    • Turned a stakeholder idea into Optiwatch, designed and built solo (Spring Boot, React): uptime checks, remote shutdown/restart, and alerts, for faster incident response.
    • Contributed to a 4-month team migration of production from OVHcloud VMs to AWS (EKS, RDS, S3, Timestream), with support from an AWS team.
    • Built a Message Gateway (SMS + WhatsApp) for outbound notifications across all Evinsys apps.
  3. Java Backend Developer @ Baker Tilly SEVEN

    Nov 2022 – Dec 2023 · Casablanca

    CMR Portal, the digital platform of Morocco's public pension fund (Caisse Marocaine des Retraites).

    • Owned the Document service (generation of pension certificates and affiliate documents); contributed across the wider Spring Boot microservices.
    • Set up Jenkins CI/CD on the on-premise Kubernetes cluster, plus Prometheus and Grafana dashboards for service health.
  4. DevOps Engineer @ Xelops Technology · internship

    Feb 2022 – Jun 2022 · Casablanca

    • CI/CD pipelines on Docker and Kubernetes, with SonarQube quality checks and Ansible automation.

Tech stack

cat stack.toml

languages
= ["Java", "Kotlin", "TypeScript", "SQL"]
frameworks
= ["Spring Boot", "React", "Next.js"]
cloud_infra
= ["AWS", "GCP", "Kubernetes", "Docker"]
ci_cd
= ["GitHub Actions", "Jenkins", "Ansible"]
observability
= ["Prometheus", "Grafana", "SonarQube"]
auth_messaging
= ["Keycloak", "Pub/Sub", "RabbitMQ"]

Contact

cat contact.md

Have a role or a project in mind? Email is the simplest way to reach me.

cat work/ims.md

IMS

iMedia24 GmbH · Dec 2025 – Present · kotlin, spring, next.js, typescript, gcp

The internal HR platform used across iMedia24, covering time tracking, time off, tasks, benefits, and day-to-day team operations. Kotlin/Spring Boot backend and Next.js frontend, running on GCP.

One reusable bulk-actions framework, adopted across four admin tables.

Workflow

Application featuresPub/Sub eventsNotification delivery

Notifications are published as events, keeping notification delivery separate from feature code.

Problem

The platform's notification module was tied into feature code, so adding a new notification type meant touching the features that triggered it. Acting on multiple table rows at once was also handled per screen rather than through a shared mechanism.

My role

I work across the stack on the platform: the Kotlin/Spring Boot backend, the Next.js frontend, and the GitHub Actions deployment path to GCP. I rewrote the notification module and worked on the table bulk actions framework.

Solution

  • Rewrote the notification module on top of Pub/Sub so notifications are published as events rather than sent inline.
  • Built a bulk-actions framework on top of the shared table: a selection column, eligibility rules per action, a confirmation and review dialog, and sequential or batched execution with per-row error reporting.
  • Built backend and frontend features with unit and integration test coverage.
  • Deployed to GCP (Cloud Run, Cloud SQL, Pub/Sub) via GitHub Actions.

Results

  • Notification delivery performance improved after the Pub/Sub rewrite.
  • New notification types can be added without touching feature code.
  • Four admin tables (members, benefit claims, challenge attempts, and on-call reports) now run bulk actions through one shared framework.

cat work/optiwatch.md

Optiwatch

Evinsys · Aug 2024 – Nov 2025 · react, spring, java, docker

An internal monitoring platform built at Evinsys to track service health across nodes, manage incidents, fire alerts, and schedule maintenance windows. Used by Evinsys teams for operational visibility.

One view of infrastructure health, with incident alerts delivered by SMS and WhatsApp.

Workflow

Alert engineMessage GatewaySMS & WhatsApp

The alert engine sends incident notifications through the shared Message Gateway.

Problem

Evinsys had no unified way to monitor the health of their application infrastructure. Incidents were caught late, and there was no central view of which services were up or down.

My role

I designed and built Optiwatch end-to-end: the React frontend, the Spring Boot backend, and the integration with the Message Gateway for outbound notifications.

Solution

  • Built a React dashboard with real-time views of node status, service health, and open incidents.
  • Implemented an alert engine that fires on configurable thresholds.
  • Added maintenance window scheduling to suppress alerts during planned downtime.
  • Wired incident notifications through the Message Gateway (SMS + WhatsApp).

Results

  • Evinsys teams gained one unified view of infrastructure health.
  • Incident response time improved with real-time alerts over WhatsApp and SMS.
  • The tool was adopted across Evinsys applications.

cat work/cmr-portal.md

CMR Portal

Baker Tilly SEVEN · Nov 2022 – Dec 2023 · java, spring, docker, jenkins

The official digital platform of Morocco's public pension fund (CMR), providing online services to retirees and affiliates nationwide. A government application with strict compliance requirements.

Repeatable releases through Jenkins pipelines, with production monitoring in Prometheus and Grafana.

Workflow

Jenkins pipelinesKubernetes on-premisePrometheus & Grafana

Jenkins automates delivery to the on-premise Kubernetes cluster; Prometheus and Grafana provide production visibility.

Problem

The CMR platform needed stable citizen-facing services, reliable pension-related backend workflows, and a deployment process that could support a large public-sector application.

My role

I owned the Document service and contributed to the wider Spring Boot microservices, CI/CD automation, and production observability for a compliance-sensitive government platform.

Solution

  • Developed and maintained Spring Boot microservices for pension-related workflows.
  • Owned the Document service, which generates pension certificates and affiliate documents.
  • Created Jenkins pipelines to make deployments more repeatable and reduce release friction.
  • Configured Prometheus and Grafana dashboards for production monitoring.

Results

  • Releases became faster and more repeatable through CI/CD.
  • Production behavior became easier to observe through monitoring dashboards.

Type , press ? for shortcuts, or click anything underlined.