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
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
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
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
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
2013 to 2016
Computer engineering degree · ESPRIT, Tunis
Final-year project at One Solution: the Wanderer Guide platform, in Symfony.
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.
requestasync taskfailure
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.
requestMQTT message
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.
requestasync task
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.
requestserver-to-server authentication (ZeroMQ)
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.
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.
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.