Skip to content
Aziz BEN REJEB
Portrait of Mohamed Aziz BEN REJEB

Mohamed Aziz BEN REJEB

Software Architect & Lead Developer

Building systems that scale. Engineering that lasts.

I design and lead distributed software platforms, from understanding the business challenges through architecture and development to production.

At Hubency · open to conversations

I design and lead distributed software platforms, from understanding the business challenges through architecture and development to production.

  • Since 2011
  • Software Architecture
  • Technical Leadership

About

I am a Lead Developer at Hubency, where I lead the evolution of the in-house ERP of a services integrator specialised in waste management. I design the technical foundations, build the most complex features and work with the Product Owners to turn business needs into lasting, evolvable solutions.

I started freelancing in 2011, while still a student, before leading a team of ten engineers at Haydar Technologies. My approach is pragmatic: understand before building, favour simplicity whenever possible and build security in from the design stage.

Outside work, I explore other technical ground: 3D printing, robotics, a homelab, locally run AI and electronics. I also spend time on my planted aquarium.

What drives me: understanding problems in depth and designing useful, robust systems that are built to last.

Experience

  1. Since 2023

    Lead Developer · Hubency

    Technical lead of the in-house ERP: architecture, platform foundations, the hardest features, production urgencies and contractor coordination.

    • TypeScript
    • Node.js
    • RabbitMQ
    • MongoDB
    • Redis
    • Keycloak
    • Vue 3
  2. 2019 to 2023

    Lead Developer · Haydar Technologies

    Led a team of ten engineers in Scrum, with code review and mentoring. Designed and delivered TAIPAN, ADAPA and Volkswagen d3 GUI, with Kubernetes and GitLab CI/CD on bare-metal servers.

    • Python
    • Go
    • Node.js
    • GraphQL
    • RabbitMQ
    • Keycloak
    • Kong
    • Kubernetes
  3. 2016 to 2019

    Full-Stack Developer · Atayen

    Coordinated a team of ten, in direct contact with the client. SaTT-Token wallet, 3xchange trading platform, stabilising and hardening the Iframe-apps social CRM.

    • PHP
    • Symfony
    • Node.js
    • AngularJS
    • MongoDB
    • Solidity
    • Web3
  4. 2011 to 2022

    Consultant and developer · Freelance

    Requirements and infrastructure for Boxstage, AngularJS interfaces for Soomville, a case-management app for the Continental Tours travel agency, the Wanderer Guide hiking platform.

    • Symfony
    • Laravel
    • AngularJS

Education

  1. 2013 to 2016

    Computer engineering degree · ESPRIT, Tunis

    Final-year project at One Solution: the Wanderer Guide platform, in Symfony.

  2. 2010 to 2013

    Bachelor's in computer systems development · ISET CH, Tunis

    Final internship: designed and built the institute's website.

Expertise

Architecture & Software Engineering

  • Distributed Systems
  • Software Architecture
  • API Design
  • Scalability
  • Security by Design
  • Domain Modeling

Backend Engineering

  • Node.js
  • Express.js
  • TypeScript / JavaScript
  • MongoDB
  • REST APIs
  • Event-driven Architecture

Infrastructure & DevOps

  • Linux
  • Docker
  • CI/CD
  • Deployment & Automation
  • Monitoring & Observability
  • Infrastructure Management

Technical Leadership

  • Technical Strategy
  • Architecture Decisions
  • Code Reviews
  • Developer Mentoring
  • Product & Engineering Collaboration

Case studies

Hubency · since 2023 · Lead Developer

The in-house ERP of a waste-management services integrator: a monorepo of TypeScript and Node.js microservices, with two Vue 3 and Quasar front-ends.

Context

Two front-ends, a back office and a client extranet, share the same platform.

Problem

An ERP has to answer its users quickly, while part of the work is slow: generating PDFs, sending e-mails, reading documents. That work must not block the API.

Generic architecture of the ERP The back office and the client extranet go through a gateway, which relies on the Keycloak authentication service and forwards to the REST and extranet APIs. The APIs read and write to MongoDB and Redis. For long-running work, the REST API publishes a task to RabbitMQ; a workflow orchestrator hands it to the PDF, mail, mail scraper, notification, migration and document reading (OCR) workers, which store files on the file storage or send the e-mails. A failed task goes to a dead-letter queue. failure Back officeVue 3 · Quasar Client extranetVue 3 · Quasar Gateway Extranet API REST API AuthenticationKeycloak MongoDB Redis RabbitMQ Dead-letter queue Workfloworchestrator WorkersPDF · mail · mail scraper · notificationsmigrations · document reading (OCR) File storagededicated servers E-mails
Generic view, with no internal detail. A request goes through the gateway, which relies on Keycloak, then the API, which reads and writes to MongoDB and Redis. Long-running work is published to RabbitMQ; the workflow orchestrator hands it to the workers (PDF, mail, mail scraper, notifications, migrations, OCR document reading), which store a file on the file storage or send an e-mail. A failed task goes to a dead-letter queue.

Architecture

  • Long-running work goes through RabbitMQ: the API publishes a task, a workflow orchestrator hands it to the workers.
  • Schemas, DTOs and contracts live in shared libraries in the monorepo (Turborepo), used by every service.
  • Data lives in MongoDB (Mongoose, migrations), with Redis and a file storage.
  • Jest tests, Docker containers, GitLab CI.
  • AI-assisted engineering: Claude Code agents, automated review and specification.

Stack

  • TypeScript
  • Node.js
  • Express
  • MongoDB
  • Redis
  • RabbitMQ
  • Keycloak
  • Vue 3
  • Quasar
  • Turborepo
  • Jest
  • Docker
  • GitLab CI

Decisions and trade-offs

  • The microservices were consolidated into a monorepo, for two reasons: version management and simpler rollbacks.
  • Fine-grained microservices, split into several components.
  • No Kubernetes for now: it would be over-engineering until the need exists. The stack is already ready for it, so moving to Kubernetes will be simple when the time comes.
  • The infrastructure, first provisioned on AWS with Terraform, was migrated to dedicated servers because of cost.
  • A simple data migration system.

Security and reliability

  • Authentication is handled by Keycloak, which the gateway relies on.
  • A failed task is isolated in a dead-letter queue.
  • The monorepo keeps rollbacks simple.

Implementation

  • I co-designed the initial microservices architecture (API, authentication, orchestrator, mailer, PDF and notification services), then co-led its consolidation into a monorepo.
  • I own the platform foundations and take the hardest features end to end.
  • I make the architecture decisions, and I scope requests with the Product Owners: feasibility, sizing, specification.
  • I arbitrate production urgencies against the roadmap, and I coordinate external contractors: scoping, code review, delivery quality.
  • I am the top contributor to the codebase: 58% of non-merge commits (1,266 of 2,174, November 2026).

What I take away

I ship the MVP first, and I don't try to cover 100% of business cases.

Haydar Technologies · 2019 to 2023 · Lead Developer

A plug-and-play penetration testing appliance, built for pentesters and CISOs.

Problem

Give pentesters and CISOs a ready-to-use penetration test: an appliance you plug in, driven from a web interface, with attack engines that can also run remotely, on other machines. Each of those engines has to be authenticated individually.

TAIPAN architecture The web interface and the core, in Flask. The core uses Redis for caching and attack engine sessions, and the MongoDB and PostgreSQL databases. It exchanges with the agents in both directions, three of them on the diagram, through an MQTT broker. Each agent carries attack engines, can run remotely on another machine and has its own certificate. MQTT Web interfaceFlask · front end CoreFlask · back end Rediscache · engine sessions DatabasesMongoDB · PostgreSQL MQTT broker Agent 1attack enginescertificate 1 Agent 2attack enginescertificate 2 Agent 3attack enginescertificate 3 Agents can run remotely, on other machines.
Overview. The web interface and the core are written in Flask; the core relies on Redis (caching and attack engine sessions) and on MongoDB and PostgreSQL. It exchanges with the agents through an MQTT broker, in both directions. Each agent carries attack engines, can run remotely on another machine and has its own certificate.

Architecture

  • The architecture is close to the ERP's, but the workers are agents, which can run remotely on other machines.
  • The agents communicate over MQTT.
  • Redis handles caching and session management for the attack engines; data lives in MongoDB and PostgreSQL.

Stack

  • Python
  • Flask
  • MQTT
  • Redis
  • RabbitMQ
  • MongoDB
  • PostgreSQL
  • Docker
  • Harbor
  • GitLab CI

Security and reliability

  • The whole system is managed with certificates: each agent has its own certificate.
  • Security best practices are applied in the code: prepared statements, data encoding, input validation, access control, logging.

Implementation

  • I designed the whole system: the infrastructure, whose rollout I led, and the workflows.
  • I built the application core in Flask, front end and back end, and the attack engines.
  • I built the back office for managing clients and licences.
  • I set up the production, test and development environments, with GitLab CI/CD and Harbor on bare-metal servers.
  • I supervised the outsourced migration to a new version: specifications, acceptance testing and delivery quality follow-up.
  • I coordinated the team: splitting work, assigning tasks, code review.
Haydar Technologies · Lead Developer

A data analysis and AI-based reputation scoring platform.

Problem

Computing a reputation with AI means collecting data with crawlers, then analysing it: work spread across several workers, which has to be coordinated and tracked.

ADAPA architecture On a bare-metal Kubernetes cluster, the React interface authenticates with Keycloak (OpenID) and goes through the Kong API gateway, configured with Keycloak, to reach the Node.js and Express API. The API publishes work to RabbitMQ; the orchestrator hands each worker, crawler or analysis, its tasks. A microservice tracks, computes and stores crawler statistics in the MongoDB and PostgreSQL databases. Grafana and Prometheus handle monitoring. Kubernetes cluster · bare metal InterfaceReact AuthenticationKeycloak · OpenID API gatewayKong MonitoringGrafana · Prometheus APINode.js · Express RabbitMQ Orchestratorhands out tasks Crawlersworkers Analysisworkers Crawlerstatistics DatabasesMongoDB · PostgreSQL
Overview, on a bare-metal Kubernetes cluster. The React interface authenticates with Keycloak (OpenID) and goes through the Kong API gateway, configured with Keycloak, to reach the API. The API publishes work to RabbitMQ; the orchestrator hands each worker, crawler or analysis, its tasks. A microservice tracks, computes and stores crawler statistics. Grafana and Prometheus handle monitoring.

Architecture

  • An agent-style architecture as early as 2020, in the form of the time: an orchestrator hands each worker its tasks, through RabbitMQ.
  • Authentication relies on Keycloak, as the OpenID provider, configured with the Kong API gateway.
  • The API adds a layer on top of Express, organised following clean architecture.
  • Crawler statistics have their own microservice.
  • Data lives in MongoDB and PostgreSQL; monitoring runs on Grafana and Prometheus.

Stack

  • Node.js
  • Express
  • Python
  • React
  • RabbitMQ
  • Keycloak
  • Kong
  • MongoDB
  • PostgreSQL
  • Kubernetes
  • Harbor
  • Grafana
  • Prometheus

Implementation

  • I wrote the Software Requirements Specification (SRS) and designed the solution in UML: functional analysis, technical architecture, components to build.
  • I designed and implemented the overall architecture: microservices, message broker, workers and workflows.
  • I built the API, a layer on top of Express (Node.js) following clean architecture, and a Python library for connecting to RabbitMQ and managing queues.
  • I built the orchestrator that hands each worker its tasks, and a microservice that tracks, computes and stores crawler statistics.
  • I laid the foundations of the React interface: Keycloak authentication, menu, pages, routes, main forms and workflows.
  • I set up the Kubernetes cluster on bare-metal servers, the Harbor registry for Docker images and the manifests for each release.
Haydar Technologies · Lead Developer

A system that distributes data to connected vehicles and collects data from them. The "GUI" in the name is the monitoring interface I brought to it.

Context

The backend that distributes and collects connected-vehicle data is spread across several clusters and servers.

Problem

Monitoring it called for a monitoring interface, an API to feed it, and authenticated exchanges between servers.

Volkswagen d3 GUI architecture The React monitoring interface queries the GraphQL API, split into microservices (Apollo, Express, Node.js), which talks to the backend services of the data distribution and collection system. Those services are spread across several Kubernetes clusters, and the servers authenticate with each other over ZeroMQ. A reverse-engineered module was rewritten in Go. data distribution and collection system (backend) Kubernetes cluster Kubernetes cluster ZeroMQ Monitoring interfaceReact GraphQL APImicroservices · Apollo · Express · Node.js Backend services Backend services server-to-server authentication over ZeroMQ Module rewritten in Goafter reverse engineering
Overview. The React monitoring interface queries the GraphQL API, split into microservices (Apollo, Express, Node.js), which talks to the backend services of the data distribution and collection system. Those services are spread across several Kubernetes clusters, and the servers authenticate with each other over ZeroMQ. A reverse-engineered part of the application was rewritten in Go.

Architecture

  • The whole API is built as GraphQL microservices, with Apollo on Express and Node.js.
  • The microservices are spread across several Kubernetes clusters.
  • The reverse-engineered part was rewritten in Go.
  • Data lives in MongoDB; infrastructure is handled with Terraform and Ansible.

Stack

  • React
  • GraphQL
  • Apollo
  • Node.js
  • Express
  • Go
  • ZeroMQ
  • MongoDB
  • Kubernetes
  • Terraform
  • Ansible

Security and reliability

  • Servers authenticate with each other over ZeroMQ.
  • The Kubernetes clusters are secured following best practices.

Implementation

  • I brought the front end used to monitor the backend: that is the "GUI" in the name.
  • I did the overall design of the application, and implemented the microservices architecture, defining where each component runs across the clusters and servers.
  • I built the entire API as GraphQL microservices (Apollo, Express, Node.js), and the React foundations: menu, data tables, main pages.
  • I built the server-to-server authentication over ZeroMQ, and applied security best practices to the Kubernetes clusters.
  • I reverse-engineered part of the application and rewrote it in Go.
  • Code review, refactoring and bug fixing; team coordination, splitting work and assigning tasks.

Open source

  • GitHub

    agent-standup

    Your Claude Code, Codex and Mistral Vibe sessions shown as a live, animated team call: who is working, who waits on whom, who needs you. VS Code extension, terminal command, desktop app. Runs locally, zero tokens.

  • Python

    asiahorse-umbra-linux

    Native Linux control for the AsiaHorse Umbra ARGB hub, with full protocol documentation.

  • C++

    otto

    Extended firmware and an Android app for an Otto DIY biped robot, over Bluetooth: 17 dances, obstacle avoidance, hand following, a sung moonwalk.

Beyond code

  • 3D printing

    Going from the model to the object: another way of designing, within the constraints of the material.

  • Robotics and electronics

    An Otto DIY biped robot, driven over Bluetooth: I extended its firmware and wrote its Android app (otto).

  • Homelab and self-hosting

    When a piece of hardware has no Linux software, I write it: that is the case of the AsiaHorse Umbra ARGB hub, whose protocol I documented (asiahorse-umbra-linux).

  • Local AI and LLMs

    Running AI locally, and tooling the work with agents: agent-standup, for example, runs locally, zero tokens.

  • Planted aquarium

    A planted aquarium I spend time on: a living system, tuned with patience.

Have an interesting engineering challenge? Let's talk.

To talk about a technical topic or simply get acquainted, the easiest way is to write to me.

mohamedazizbenrejeb@gmail.com

© Mohamed Aziz BEN REJEB

Diagram

aziz@azizbr.fr: ~