// WORK
Production software, with the engineering left in.
Selected work from my time as Senior Developer at Thrifty Car Rental UAE, alongside earlier enterprise engineering at Mercedes-Benz R&D India, Grid Dynamics and SIKA Interplant. The examples show the kind of software work I take on: backend architecture, full-stack applications, migrations, payments, integrations and production performance.
What does it take to build a car sales platform from an empty repository?
Cariva started as an empty repository. The brief: a consumer car sales and used-car platform for the UAE that takes real payments, owns its own catalogue, and generates its pages from the data model rather than from a page builder.
I designed and built it end to end: a Next.js front end with SSR/ISR chosen per page type, backed by six Node.js microservices, with 326 templated pages generated from the data model, of which 149 model, 100 used-car and 65 brand. Payments went through N-Genius and Adyen behind a single resolver, so a second brand adds a row of configuration rather than a branch in the checkout. The pages are indexable, canonical-clean and schema-tagged because the templates emit that by construction, not because anyone went back over them afterwards.
Nobody hand-built 326 pages. The catalogue is the data model, the templates render it, and adding a model adds a page — which is also why none of them can drift out of schema one at a time.
pages live
model pages
Node.js microservices
payment gateways behind one resolver
How do you replace a live booking platform while it keeps taking bookings?
Thrifty ran on a PHP Laravel monolith and Dollar ran a React front end on a .NET backend, both slow to change and both carrying years of accumulated traffic. I migrated Thrifty front end to Next.js and replaced the Dollar .NET backend with six Node.js microservices shared across both brands, while the platform kept taking bookings.
The unglamorous work made it safe: a complete URL inventory, a 1:1 tested 301 redirect map, metadata and schema parity verified page by page, and launch-day crawl comparisons old versus new. The result was the best possible outcome for a migration — nothing happened. Rankings held flat, bookings continued, and the new platform was faster on day one than the old one ever was.
Underneath it, the platform engineering. Six services on Cloud Run, built by Cloud Build from their own Dockerfiles, none of them publicly exposed, with a load balancer routing on path prefix and rate limiting at the Cloudflare edge. Two authentication paths by design: an API key for the front end, JWT for the internal ERP, so a key lifted from a browser cannot reach an administrative endpoint. Redis in front of the read paths, with a TTL where staleness is bounded by time and write invalidation where it is not. RabbitMQ behind booking confirmation, so the customer is confirmed immediately while the internal fan-out runs behind it. And New Relic is what found the vehicle listing endpoint sitting at three to seven seconds: the fix was a compound index first, then the query shape, then caching, in that order.
The best outcome a migration can have is that nothing happens: bookings uninterrupted, rankings flat, the new platform faster on day one. That is bought with a URL inventory, a tested redirect map and a page-by-page parity sheet.
ranking positions lost
minutes of downtime
of URLs redirect-mapped
days of post-launch monitoring
What happens when the engineer who writes the data layer also owns what reads it?
Across three rental brands I specified, implemented and validated the complete measurement stack: GA4 with a custom ecommerce event taxonomy, GTM with documented conventions, Meta Pixel plus Conversions API with deduplication, Microsoft Clarity, and Consent Mode v2 for GDPR/UAE PDPL compliance.
Then the part that made it worth having: because the data layer was trustworthy, we built a lead and abandoned-booking recovery module directly on the same events, turning drop-offs and failed payments into cards the business teams work from. That is an application feature reading an application event stream, which is only possible when the two are specified together.
An event taxonomy is a schema. When it is specified away from the code that emits it, the numbers end up describing the tags rather than the bookings, and nobody finds out until a figure has to be defended.
platforms unified — GA4 · GTM · Pixel · Clarity
event spec across 3 brands
lead and abandoned-booking recovery module
Consent Mode compliant (GDPR · UAE PDPL)
// THE ROLES
The roles behind this work
Senior Developer managing the web platforms for Dollar, Thrifty and Cariva under the Head of E-commerce. Wrote the primary backend architecture, built the transactional modules behind booking, pricing and payments, and led the infrastructure and performance work across three car rental and car sales brands.
The internal platform behind vehicle type-approval documentation — cross-department data capture, multi-level sign-off with a full audit trail, analytics across live programmes. Node.js, TypeScript, MongoDB, Kafka, RabbitMQ.
A client engagement with Google on a connected device platform: data packet handling, image upload and processing, and data integrity.
Aerospace and defence. Built an internal online estimating tool, and managed international clients across order intake, technical questions and shipping.
Available immediately for a permanent senior engineering role, remote or on site.
// CAPABILITY MAP
Where has each capability been proven?
// OPEN TO WORK
Have a role, project or problem worth discussing?
I'm available for permanent senior engineering roles. Tell me what you are building or what role you are hiring for, and I'll tell you whether my experience fits.