International Shopping & Shipping Platform
NestJS, TypeScript, Prisma, PostgreSQL
Visit Live Site →Go With Ola is a platform that helps people shop and ship items internationally — essentially your personal import assistant. The platform simplifies the complex process of buying products from overseas stores and handling international logistics, all managed through one unified system.
The backend handles everything from order management and payment processing to logistics coordination and automated reconciliation, making international shopping accessible and straightforward for Indonesian customers.
Built using NestJS with a clean architecture approach, separating business logic from infrastructure concerns. Uses Prisma ORM for type-safe database operations with PostgreSQL, enabling efficient queries and migrations.
Implemented a flexible state machine for order processing that handles different service types (personal shopping, forwarding, etc.) with customizable workflows and automated status transitions.
Integrated with multiple Indonesian payment gateways, implementing webhook handlers with signature verification, idempotent processing, and automatic retry logic for failed transactions.
Connects with international and domestic shipping providers, tracking packages across multiple carriers and automatically updating customers on shipment status.
Built an automated reconciliation system that matches payments with orders, calculates actual shipping costs versus estimates, and flags discrepancies for review.
Handling transactions in multiple currencies with fluctuating exchange rates while ensuring accurate pricing and preventing losses from rate changes.
Implemented a currency management system with scheduled rate updates from reliable sources. Lock exchange rates at order creation and apply buffer percentages to protect against volatility. Store all amounts in their original currencies alongside converted values for accurate reconciliation.
Payment gateway webhooks could fail or arrive out of order, potentially causing incorrect order states or double processing.
Built an idempotent webhook processing system that uses unique transaction IDs to prevent duplicate processing. Implemented a retry queue for failed webhooks and added manual reconciliation tools for edge cases. All webhook payloads are logged for auditing.
Different service types (shopping, forwarding, door-to-door) had unique workflows with varying steps and requirements.
Designed a flexible state machine pattern that allows configurable workflows per service type while maintaining consistent interfaces. Used TypeScript discriminated unions to ensure type safety across different service configurations.