NAME
waqas - software engineer, backend and hospitality systems across several runtimes
SYNOPSIS
waqas [--go | --elixir | --php | --typescript] [--remote] [--full-time | --contract] [--timezone UTC+3]
DESCRIPTION
Software engineer, 6 years on backend systems and the last two-plus in hospitality technology. Booking engines, channel-manager integrations and Google distribution for properties that have to stay in sync across every channel they sell on. A live booking marketplace built in Elixir and Phoenix, a product in progress in Go, booking platforms serving 110+ hotel properties; real-time APIs handling 100K+ users; payment flows across three regions. I pick the language a system actually calls for rather than the one I know best: Go where startup time and concurrency decide the design, Elixir and Phoenix where the work is concurrent and has to stay up, PHP and Laravel where a team has to maintain it for years, TypeScript across the API boundary.
I write code other developers can pick up and work with. Simple, organised, and still manageable once the codebase has grown past the point where anyone remembers writing it.
Which language that happens in depends on the system. A booking engine a team will own for years is not the same problem as a service that has to hold thousands of open connections, and pretending otherwise is how you end up fighting your own stack. I have built the same shape of system twice (availability, reservations, payment) on Laravel for hotels and on Elixir for a pool marketplace, with a third in progress in Go. Building it twice in two runtimes is mostly how I learned the choice is worth making deliberately.
Most of the last two years has been hospitality: booking engines, channel managers and Google distribution. It is a domain where being wrong is expensive and visible: a rate that drifts out of parity or inventory that fails to sync becomes an overbooked room and a real person at a front desk.
Right tool for the right problem
EXPERTISE
Hospitality & Distribution
- -Channel manager integration: two-way ARI sync across room types and rate plans
- -Google distribution: Hotel Ads and free booking links, kept in step with live rates
- -OTA connectivity, with rate parity held across every channel a property sells on
- -Overbooking prevention: stop-sell, inventory holds and last-room availability
- -Booking engines and multi-property PMS work under one tenant boundary
Languages
- -PHP: Laravel systems built to survive years of other people maintaining them
- -Go: services and CLI tooling where startup time and concurrency shape the design; a product in progress
- -Elixir: Phoenix and OTP; a live booking marketplace that stays consistent because processes are allowed to fail
- -TypeScript: typed APIs and Next.js frontends either side of the boundary
- -C: for the parts where understanding the machine matters more than shipping quickly
Choosing a Stack
- -Match the runtime to the failure mode: supervision where uptime matters, a single binary where deployment does
- -Reach for hypermedia before a SPA; most interfaces never needed the client-side framework
- -Keep the boundaries typed so the language behind them stays a choice, not a commitment
- -Prefer the boring option when a team has to own it after you
System Architecture
- -Event-driven module boundaries that survive refactoring
- -Multi-tenant systems with enforced data isolation
- -Layered separation of transport, domain, and persistence
Backend & APIs
- -REST APIs with JSON and Protocol Buffers
- -gRPC services
- -Webhooks with signature verification
- -Background jobs and queues
Search Systems
- -Search with Elasticsearch, Algolia, MeiliSearch
- -Flexible query builders and filters
- -AI-powered semantic search
Real-Time
- -WebSocket broadcasting (Reverb, Pusher)
- -Server-Sent Events for streaming
- -Live notifications and chat systems
- -Real-time maps and location tracking
Payments
- -International gateways (Stripe, PayPal, Amex)
- -MENA methods (Mada, KNET, STC Pay, Fawry)
- -Two-step authorization (hold & capture)
- -Subscription billing and invoicing
Security
- -HMAC request signing and JWT auth
- -Replay attack prevention (nonce, timestamp)
- -Role-based access with escalation prevention
- -Idempotency for safe retries
AI Integration
- -Multi-LLM support (OpenAI, Claude, Gemini)
- -Streaming responses via SSE
- -Image generation (DALL-E, Stable Diffusion)
- -Text-to-speech and voice cloning
DevOps
- -AWS deployments
- -Docker containerization
- -CI/CD pipelines
- -Nginx and server configuration
PROFICIENCY
- API design95
- Backend arch95
- PHP / Laravel90
- Databases90
- Security90
- Performance88
- Go80
- Elixir / OTP80
- TypeScript85
- Testing85
- DevOps75
HISTORY
- 2025 - Presentfull-time
Senior Software Developer
Ewaa Hotels (Al Muhaideb Investment Group), Riyadh, Saudi Arabia
Building the backend for a hotel booking engine. Search, reservations, payments, distribution, and multi-tenant APIs serving multiple hotel brands.
- -Built a pluggable search system supporting Elasticsearch and multiple provider backends
- -Integrated regional and international payment gateways (Mada, KNET, Stripe) with hold-and-capture flow
- -Designed APIs serving both JSON and Protocol Buffers for web and mobile clients via gRPC
- -Implemented role-based access control with escalation prevention across multi-tenant properties
- -Integrated channel managers with two-way ARI sync, holding rates and inventory consistent across OTAs
- -Connected properties to Google distribution (Hotel Ads and free booking links) against live availability
PHP Laravel MySQL Redis Elasticsearch gRPC Protocol Buffers Livewire Tailwind CSS Next.js Docker AWS
- 2024 - Presentcontract
Backend Engineer
Swimmer (swimmersa.com), Saudi Arabia (Remote)
Backend for a two-sided marketplace booking swimming pools across Saudi Arabia. Live availability, instant confirmation, online payment, and a dashboard for the venues listing their pools.
- -Built the booking and availability core in Elixir and Phoenix, so concurrent reservations resolve without the same slot being sold twice
- -Wired online payment to instant confirmation against live availability rather than to a request a host approves later
- -Shipped a host dashboard for hotels, resorts, compounds, gyms and clubs to run their own inventory, pricing and daily bookings
- -Modelled hourly and full-day rental alongside verified hosts, ratings and women-only availability, which the market requires rather than merely prefers
- -Arabic-first throughout, serving Riyadh, Jeddah and Dammam
Elixir Phoenix OTP PostgreSQL Tailwind CSS
- 2022 - 2024full-time
Senior Software Developer
DT Modern Technology, Hybrid
Built backend APIs for booking platforms, ride scheduling, service reservations, and delivery tracking with real-time location updates.
- -Developed real-time GPS tracking with live map updates for delivery and ride services
- -Built booking systems with live availability checks and conflict prevention
- -Integrated WebSocket-based notifications using Pusher for instant user updates
PHP Laravel 8 React Redux Toolkit Pusher MySQL
- 2018 - 2022freelance
Full Stack Developer
Freelance, Pakistan
Delivered client projects including legacy system integrations, web applications, and real-time platforms across PHP and Python.
- -Connected legacy systems to modern platforms via SOAP and REST API integrations
- -Built full-stack web applications with Laravel, CakePHP and Flask
- -Designed database schemas across MySQL, PostgreSQL, and MongoDB for varied use cases
- -Implemented real-time chat and push notifications using Firebase
PHP CakePHP Laravel Python Flask Jinja JavaScript Ajax Bootstrap Firebase MySQL PostgreSQL MongoDB
EDUCATION
2018 - 2022BS Computer Science
The Islamia University Bahawalpur
Pakistan
CURRENTLY READING
Going deeper on what happens under the hood, not to switch stacks, but to write better PHP by understanding the runtime it lands on.
- -Language runtimes: the Zend Engine, the BEAM scheduler, and the Go runtime, because knowing how code actually executes changes how you write it
- -Compilers and interpreters: why a JIT or an OPcache setting moves a number, rather than guessing at it
- -The OTP model: supervision trees and process isolation as a design tool, not just an Elixir feature
- -Assembly and CPU cache behaviour: why one shape of loop beats another regardless of the language on top
- -Memory layout and data structures: the part that transfers between every language I work in