Backend engineer · Payments infrastructure

Zain Ul Abdain

I build payment systems that reconcile — multi-gateway checkout, marketplace payouts, and the webhook plumbing that keeps ledgers honest when networks don't cooperate.

Dubai, UAE — available immediately, remote or on-site
8+Years PHP / Laravel
5Payment gateways in production
1,486Tests on current SaaS
2Products live today
Selected work

Two production systems, both handling money.

Aviaspares · aviatrading.com Backend Lead · 2023–2026

A B2B aviation parts marketplace where buyers and sellers transact across borders. I owned the payments platform end to end — the part of the system where a bug doesn't throw an error, it loses someone's money.

  • Marketplace split payments with Stripe Connect. Connected-account onboarding, platform commission, and scheduled transfer releases to sellers — the multi-party settlement problem, solved in production.
  • Escrow.com integration for high-value transactions, including a reconciliation job that continuously re-syncs escrow state against local records rather than trusting a single webhook to have arrived.
  • Five gateways behind one interface. Stripe, Stripe Connect, PayPal, Escrow.com and Wise sit behind a single contract — checkout, order retrieval, transaction lookup, refund — with a resolver that picks the right gateway per payment and region.
  • Idempotent webhook processing. Every inbound event is signature-verified per provider, persisted with a uniqueness constraint on provider + event_id, and marked processed exactly once — so duplicate deliveries and retries can't double-credit an account.
  • Sanctions and country validation on payment methods, because an aviation parts marketplace has export-control exposure that most e-commerce doesn't.
Stripe Connect Escrow.com PayPal Wise Laravel Webhook idempotency Reconciliation Elasticsearch Docker / ECS
SchoolNinty Founder & sole engineer · 2026–

A multi-tenant school management SaaS — schoolninty.com — built and operated single-handedly. One deployment serves many schools from a shared database and codebase, every query scoped by tenant.

  • Multi-tenancy done at the data layer, not bolted on: shared schema with per-school scoping across students, teachers, attendance, fee invoicing, exams, timetables and announcements, plus a separate super-admin plane for school and subscription management.
  • 1,486 tests. Fee invoicing and attendance are the kind of thing parents notice when it's wrong, so the suite is the product's actual safety net.
  • Five dedicated queue workers — default, high, emails, sms, reports — under Supervisor, so a slow report run never delays a fee reminder.
  • Modern stack, deliberately: Laravel 13 on PHP 8.4, Inertia with Vue 3, PostgreSQL with pgvector, Redis for cache and queues.
Multi-tenant SaaS Laravel 13 PHP 8.4 Vue 3 + Inertia PostgreSQL + pgvector Redis Supervisor queues Docker
Open source

laravel-webhook-ledger

Exactly-once webhook processing MIT · PHP 8.2–8.4

Every payment provider redelivers webhooks — routinely, not occasionally. The obvious guard is a race condition, and on a handler that moves money that race is a double credit:

  • The bug most codebases ship: if (exists) return; else insert; has a gap between the check and the insert. Two concurrent redeliveries both pass the check and both process.
  • The fix: let the database arbitrate. A unique constraint on provider + event_id, with the constraint violation treated as the duplicate signal rather than as an error. No window, because no gap.
  • Plus the parts that bite in production: verification before any write, timestamp tolerance against replay, constant-time comparison, secret rotation, content fingerprinting for providers that send no event id, stale-claim takeover when a worker dies mid-handler, and deliberate replay instead of silent retries.
  • 18 tests covering concurrent redelivery, tampered and replayed signatures, rotation and stale claims — CI across PHP 8.2–8.4 and Laravel 11/12.
Idempotency Signature verification Laravel package Pest GitHub Actions Docker
What I'm good at

The unglamorous half of payments.

Taking a card payment is a solved problem. What isn't solved, in most codebases I've seen, is what happens when the webhook arrives twice, or never; when a refund is issued against a transfer that already released; when the gateway says one thing and your ledger says another.

Multi-gateway architecture

A single contract per gateway, a resolver to choose between them, and DTOs at the boundary — so adding a provider doesn't mean touching checkout.

Idempotency & webhooks

Per-provider signature verification, event persistence with uniqueness constraints, and exactly-once processing that survives retries and out-of-order delivery.

Reconciliation

Scheduled jobs that re-derive state from the provider rather than trusting the event stream — the difference between a system that looks correct and one that is.

Marketplace payouts

Connected accounts, commission splits, hold-and-release scheduling, and cascading refunds back through seller balances.

Multi-tenant SaaS

Tenant scoping at the data layer, per-tenant configuration, and the operational tooling to run many customers from one deployment.

Event-driven Laravel

Events, listeners, observers and queued jobs used to keep payment state transitions explicit and auditable rather than buried in controllers.

Also

Background.

Eight-plus years across PHP and Laravel, with Vue 3 and TypeScript on the front end and Java/Spring Boot earlier in my career. I run Smart Indus Systems, a small development studio, and I work AI-forward — Claude Code is part of my daily toolchain, not a novelty.

Based in the UAE, originally from Pakistan. Comfortable working remotely across GST, European and US-overlapping hours.

Get in touch

Available for work now.

Open to senior backend or full-stack roles, and to contract work on payments integration specifically — Stripe Connect marketplaces, multi-gateway consolidation, or fixing a webhook pipeline that's double-processing.