Architecture first
SOLID principles and N-tier boundaries are decided before the first line of a feature is written. Moving a seam later costs far more than drawing it correctly the first time.
Available for full-time work
I write the tests before the feature, trace the data model before the interface, and ship code someone else can read six months from now. Attendance systems that can't be faked, dashboards that catch problems early — that discipline is why they still work.

I'm a full-stack developer based in Tangier. Most of the work I take on has real consequences attached — someone's attendance record, someone's exam eligibility, someone's risk score. That's a different kind of pressure than shipping another feature nobody depends on.
When a system decides whether someone gets to sit an exam, correct beats clever every time. So I don't start with the interface. I start with the data model, work out every way a feature could fail, and only write the front end once I trust what's underneath it.
A remote stretch of work for a team abroad changed how I write code. I couldn't walk over and explain a decision in person. The commit history had to do that instead, across a time zone and a language gap. I still write that way now, for whoever opens the file next.
Backend is where I stay longest, because that's where mistakes compound. Redraw an interface in an afternoon; live with a wrong schema for years. It's the same reason I've gone deep on running AI on infrastructure I control rather than just calling an API — the constraint of keeping sensitive data in-house is one I take seriously, even when it means a slower response.
I've turned down speed for correctness more than once. I'd rather hand you four systems I can explain line by line than twenty I'd rather not open again.
Journey
Where I studied, what I built, and where I worked — oldest first.
Lycée Anoual · Tangier, Morocco
Moroccan National Baccalaureate, specialising in advanced mathematics and the physical sciences.
SOLICODE — Centre de Solidarité Numérique · Tangier, Morocco
A full development lifecycle under an active-pedagogy model, from UI/UX design through to back-end systems.
Pragmatic Minds GmbH · Kirchheim unter Teck, Germany
Architected and shipped a suite of Mattermost plugins and Go microservices automating the company's HR processes.
SOLICODE — Centre de Solidarité Numérique · Tangier, Morocco
Advanced specialisation in native Android and enterprise web architecture, with DevOps, automated testing and server administration.
Mooroot · Tangier, Morocco
End-to-end feature development and AI integration for a document platform that converts Markdown into branded presentations.
Looking for a full-stack or back-end role where code quality and durable architecture matter, and where I can bring what I have built around testing and API design.
Evidence
A hackathon win, shipped integrations, a tested codebase — plus the credentials, languages and stack behind them.
Production integrations shipped
Mattermost plugins automating HR operations at Pragmatic Minds
Automated tests written
61 PHPUnit tests on AttendanceFlow, 69 on CampusOS
Philosophy
Positions I arrived at by shipping and maintaining production systems. Each one is a trade-off I would defend in review.
SOLID principles and N-tier boundaries are decided before the first line of a feature is written. Moving a seam later costs far more than drawing it correctly the first time.
Tests are written against the behavior a user or another system depends on, and verified with PHPUnit before a feature is considered done — not added afterward to hit a coverage number.
Atomic Design keeps UI systems modular and white-label-ready from the start, so a new client workspace is a configuration change, not a rebuild.
The next person to read this code — often me, some months later — matters more than a concise trick. Clean, organized code is part of the deliverable, not a nice-to-have.
RBAC, OAuth2, and GDPR-aware handling of data belong in the same commit as the feature they protect, not in a hardening pass before launch.
Git Flow isn't bureaucracy. It's what keeps a codebase structurally intact when several people are shipping into it at once.
Ecosystem & Core Technologies
Anything not covered here? Email me at abdelhay.mallouli@gmail.com.
Hiring for a role I'd fit?
I'm open to full-time, contract and freelance work — on-site in Morocco or remote. Happy to walk through any of the case studies in detail.
Full-time, contract, or freelance full-stack roles. I'm finishing an internship at Mooroot in Tangier and open to on-site work in Morocco or remote work with teams elsewhere. I've already completed a remote engagement with a company in Germany, so the working model is proven, not theoretical.
Tangier, Morocco — UTC+1, the same hour as Berlin and Paris for most of the year, and one ahead of London. During my internship with Pragmatic Minds in Kirchheim unter Teck, I worked the full German business day with no scheduling friction.
Laravel and PHP for most backend work. Go where a service needs to be small and fast. React with TypeScript on the front end, usually over Inertia or Next.js. Around that: MySQL and PostgreSQL, Docker, GitHub Actions, and Tailwind. CampusOS and AttendanceFlow are both documented in full on this site if you want to see it in practice.
I want the data model, the boundaries, and the failure modes before I want the feature list. Clean layering only pays off when it's decided early rather than patched in afterwards, so expect me to spend the first days reading migrations and tracing a request end to end, rather than shipping something that has to be unpicked later.
I write them. AttendanceFlow has 61 PHPUnit tests and CampusOS has 69, with dedicated coverage for the parts that would be dangerous to get wrong: token forgery and expiry, geofence boundaries, subnet matching, score aggregation. TDD is how I verify a feature is correct — not a coverage number I chase afterwards.
RBAC, OAuth2, and GDPR-aware data handling belong in the same commit as the feature they protect, not a hardening pass before launch. On CampusOS that meant keeping the entire AI inference path on-premise, with Ollama and Mistral running locally, so regulated student data never left the campus network. Slower answers, in exchange for data residency — that trade-off wasn't close.
Email: abdelhay.mallouli@gmail.com. I answer within two days. If it's easier to talk it through, my CV and LinkedIn are linked at the top of this page, and I'm happy to walk you through any of the case studies in more detail.