Inventory with safe retries
Built a NestJS and MySQL inventory service for holds, commits, cancellations, idempotency, expiry, compensation, and reconciliation.
I am a full stack developer from Sri Lanka. Most recently, I was an Associate Software Developer at Hotels Hippo.com (Pvt) Ltd, where I had technical responsibility for the product area used by guests. My work covered Node.js, AWS, search, booking, inventory, data pipelines, React, and Astro.
The listing path started with MySQL and Node.js. As the catalogue and availability data grew, I moved reads into separate models so search stayed fast and the main database was not overloaded.
I explored a PostgreSQL read and synchronization path, then worked through a production Neo4j and C++ service and the Debezium, Kafka, and StarRocks generation. The final design documented at handover used AWS DMS CDC to feed two read models: catalogue data through S3 and Lambda into Elasticsearch, and availability with a shorter delay through Kinesis and Lambda into Valkey.
The first listing path read from MySQL and processed broad availability in Node.js.
It was the simplest place to start. As the catalogue and inventory grew, this query path became too slow.
I explored a PostgreSQL read path, then built the production Neo4j and C++ listing service with room and suggestion logic.
This was an intermediate phase, not the final handover design.
It improved filtering and room combinations, but it also added more services for a small team to maintain.
Change data capture replicated source changes into a queryable availability model, allowing listing reads to move away from MySQL.
A historical self managed pipeline that needed more operational work than the team wanted to carry.
It worked, but running Kafka and the analytics stack took too much daily attention.
The final design used DMS to feed two read models. Catalogue data moved through S3 and Lambda into Elasticsearch. Availability moved through Kinesis and Lambda into Valkey.
MySQL remains the source of truth. Catalogue updates may arrive later; availability updates have a shorter delay.
Catalogue data could arrive later, while availability needed a shorter delay. Keeping the paths separate made the system easier for the team to maintain.
Built a NestJS and MySQL inventory service for holds, commits, cancellations, idempotency, expiry, compensation, and reconciliation.
Unified direct, bid, and request and offer bookings around one flow controlled by the server for cart, pricing, payments, webhooks, and expiry.
Moved a specialised C++ room combination path into Node.js and kept the capacity and pricing rules covered by tests.
Built an asynchronous Bakuun integration with API Gateway, Lambda, and SQS FIFO so partner updates could be queued and processed in order within each message group.
Worked on image transformation, cache rules, AWS roles, deployment, runbooks, and final handover documents.
A few rules I keep in mind when I change a system.
Bookings and payments should write to one authoritative system. Search can use read models that can be rebuilt and refreshed at the right pace.
A faster language can help, but removing unnecessary work from a search request usually helps more.
A design is useful only if other developers can debug it, change it, and run it after I move on.
I moved between product work and backend systems. Following the data from the guest experience to the source of truth helped me make better decisions and leave clearer code for the next developer.
Read about my backgroundJoined as a trainee working mainly in React and frontend development.
Moved into Node.js, MySQL, APIs, booking, listing, and the rest of the guest product.
Worked through the Neo4j/C++, Kafka/Debezium, and StarRocks versions as the platform grew.
After my official employment ended on 30 June 2026, I completed the final handover on 7 August 2026, including the room allocation work, AWS read model documentation, and system handover notes.
I am looking for full stack work with a strong focus on backend systems. I work best on APIs, search, booking flows, data pipelines, and AWS.
Based in Sri Lanka. Available for my next role.
See how I work