Software + DevOps Engineer · Alexandria, Egypt

I build business software, and keep it running in production.

I'm Mohamed Abdullah. For 5+ years I've designed, shipped and operated ERP and SaaS platforms used every day by car-rental, logistics and finance companies across Saudi Arabia, from the database schema all the way to the server it runs on.

Mohamed Abdullah
Open to new projects
0years building production systems
0live application installs I maintain
0production databases (MySQL & MSSQL)
0production servers on Azure, DigitalOcean & bare metal

01 / What I do

One engineer, the whole lifecycle.

Most teams split building, integrating and operating software across three people. I do all three, so nothing falls through the cracks between them.

Build

Full-stack features in Laravel and Vue: contracts, pricing engines, invoicing, accounting, role-based permissions and per-company dashboards, designed to survive real data and real users.

Integrate

Connecting business systems to the outside world: ZATCA e-invoicing, government APIs, WhatsApp and SMS gateways, PDF generation, with clean provider abstractions so swapping a vendor is configuration, not a rewrite.

Operate

Servers, proxies, TLS, mail, Docker and deployments across Linux and Windows. Rehearsed releases on copies of production, hash-checked deploys with automatic backups, and quick root-cause fixes when something breaks.

02 / Selected work

Systems that companies run on every day.

Client names are kept confidential. The work and the numbers are real.

A ERP platform · Laravel · Vue

A multi-company ERP for the Saudi market

The core platform behind car-rental, logistics, vehicle-detention and trading companies, running as 40+ separate installs on several servers. I own features end to end, from schema and migrations through the UI to the production deploy.

  • Car-rental engine: contracts, branch-scoped price lists, promo codes with approval locks, handover checklists
  • Per-company-type dashboards with live fleet status tiles and maps
  • Tracked down silent data bugs, including price lists leaking across branches and PHP input limits truncating 1,200-field forms
  • Replaced a legacy Telerik reporting server with fast in-app reports
LaravelVue.jsMySQLMSSQLBladeREST APIs
B Integrations · Compliance

Invoices, messages and government APIs

Business software is only as useful as what it connects to. I built and repaired the integrations that let the ERP talk to tax authorities, customers and government services.

  • ZATCA e-invoicing: signed XML stored on disk, plus a backfill command for 17,000+ historical invoices
  • WhatsApp gateway that automatically sends customers their invoice and bond PDFs, with credentials managed from a settings page
  • Pluggable per-subsidiary SMS layer: each company picks its own provider without code changes
  • Server-side PDF rendering (mPDF) for invoices and contracts, Arabic layout included
ZATCAWhatsApp APISMS gatewaysmPDFQueues
C SaaS architecture

From 40 forks to one multi-tenant SaaS

Every client had grown its own copy of the codebase. I inventoried all of them (40 Laravel installs, ~160 GB of files, 32 live databases) and designed the path to a single platform.

  • Tenant-per-subdomain routing with a separate database per tenant
  • Super-admin console, client dashboards and subscription management
  • Polymorphic file storage and a migration plan that never ships half-done work to production
Multi-tenancyLaravelDB-per-tenantCaddy
D Infrastructure · DevOps

Production operations across 6+ servers

I run the infrastructure as well as the code: Windows production VMs on Azure, proxy droplets on DigitalOcean, and a self-hosted Linux server that serves this site.

  • Release rehearsals on restored copies of production before every risky deploy
  • Guarded, hash-checked deploys with an automatic backup per release and post-deploy health checks
  • Reverse-proxy layer (Caddy / Nginx Proxy Manager) with automatic Let's Encrypt certificates
  • Self-hosted mail server (Postfix, Dovecot, DKIM) and VPN routing to reach IP-restricted government APIs
LinuxWindows ServerDockerAzureDigitalOceanCaddyPostfix

03 / Under the hood

How this page reached you.

My ISP blocks inbound traffic and all outbound UDP, so standard VPNs don't work. This site and my mail run on a home server anyway: it dials out to a VPS over a reverse SSH tunnel, and the VPS handles public TLS.

You browser · HTTPS VPS Caddy · Let's Encrypt TLS Postfix MX relay layer4 TCP 465 / 993 Home server Caddy · 40+ vhosts Mail · Docker apps this portfolio SSH -R dials out 443
No static IP No port forwarding Self-heals after IP changes in ~2 min Private keys never leave home

04 / How I work

Boring releases. Fixed root causes.

01

Reproduce before fixing

Every bug gets reproduced locally (usually in a rolled-back transaction on real data) before a single line changes. No guessing in production.

02

Reject bad data, loudly

Invalid input is rejected as a whole, never half-saved with a warning. Silent partial saves are where financial data quietly goes wrong.

03

Rehearse, then deploy

Risky releases run first on a restored copy of production. Every deploy takes its own backup, so rolling back takes a minute.

04

Leave a trail

Each task ends with deploy notes: files changed, env keys, migrations to run. The next person (or the next me) never has to guess.

05 / Toolbox

The stack I work in daily.

Backend

PHPLaravelPythonFlaskREST APIsQueues & jobs

Frontend

Vue.jsJavaScriptBladeHTML / CSSRTL / Arabic UI

Data

MySQLMS SQL ServerMigrationsBackups & restoresReporting

Ops

LinuxWindows ServerDockerCaddyNginxsystemdSSH tunnelsPostfix / Dovecot

Cloud

AzureDigitalOceanLet's EncryptNetBird / WireGuard

Workflow

GitGitHubJiraTrelloAI-assisted engineering

06 / Contact

Have a system that needs building, or rescuing?

I'm open to freelance projects and full-time roles, remote or in the Gulf. Tell me what you're working on and I'll reply within a day.