Gian Permana.
Backend Engineer — Distributed Systems

Event-driven services that hold up under real transaction load.

I'm Gian Permana. I build and operate the backend of the PaDiUMKM marketplace — microservices in TypeScript, with Go as a secondary language for optimization work, wired together with Kafka, backed by PostgreSQL, Redis, and Elasticsearch, and kept honest with automated and load testing.

Selected work

Services in production
02

RFQ Microservice

NestJS MongoDB Kafka Bull

The quotation engine of the marketplace: buyers post request-for-quotation events, sellers submit and manage offerings, buyers pick potential winners, and the winner flows on toward checkout. I'm one of the main contributors here — 500+ commits across the RFQ lifecycle.

  • RFQ lifecycle features: offering validation, winner selection, seller summary/list views, CMS filters, product price history
  • Notification system for both sides — push and email (checkout reminders, closed-RFQ alerts) with notification-center routing
  • Preference module letting sellers persist their latest RFQ filters
  • Event-logging and RFQ-canceled refactors, plus security fixes from DefectDojo scans
03

API Gateway

NestJS JWT / Passport gRPC Swagger

The platform's single entry point: authentication and authorization, rate limiting backed by Redis, request routing to the microservices over gRPC and TCP, document generation (PDF/Excel exports), file handling, push notifications, and Swagger-documented external APIs — hardened with helmet, sanitization, and throttling.

04

Domain microservices: product, transaction, voucher, user, financing, fulfillment

NestJS TypeORM Redis Event-driven

A family of NestJS services covering the rest of the marketplace — catalog and product data, transaction records, user and seller management, financing flows, fulfillment, master data, and the voucher lifecycle with scheduled jobs and caching. Each service owns its data, communicates over message patterns and events, and shares the platform's common library.

My contributions span the family: seller listings with PKP status on the user service, financier filters and loan detail on the financing service, the order-termination flow on fulfillment, and business-activity master data.

On the order domain I work the producing side: building the required order data and publishing it to the order service via Kafka events.

Quality & platform engineering

Beyond the services

Testing & performance

  • Automated E2E transaction suite Cypress coverage of the marketplace transaction flow across both Web UI and API — buyer and seller portals, business-rule assertions, Dockerized runs for CI.
  • k6 load testing — purchase transactions Load tests for the full purchase-request flow (login, calculate, list, detail, checkout, approval) with Prometheus metrics and Grafana dashboards; calculate→checkout chaining driven by real payload fixtures.
  • Test automation beyond the marketplace E2E and API automation suites for the e-procurement products — tender, offering, and BUMN-portal vendor flows — and automated tests for tender services.

Delivery & infrastructure

  • GitOps pipelines Environment-aware CI/CD (dev / stage / prod) for the marketplace, e-procurement, and govmart projects — service matrices, promotion between environments, and pipeline-as-code maintained per project.
  • Shared module — padiumkm-shared-module Creator and maintainer of the shared library every PaDiUMKM service builds: common domain interfaces and adapter mappings, RPC/HTTP logging, storage abstraction, notification and email-template helpers, feature flags with database fallback, and mocks with unit tests so services integrate safely.
  • Shared engineering wiki Internal documentation for the PaDiUMKM services — onboarding, conventions, and runbooks.

Mentoring & tooling

  • PADI internship mentor Guided backend interns through the program's training services — reviewing and merging their product, user, auth, and cart modules and their first k6 performance tests.
  • Personal tooling GNOME Shell extensions for tracking GitLab contributions and Midas token usage, plus a Beckn protocol exploration (BAP/BPP handlers with ONIX).

Earlier work — B2B & e-commerce (2020–2022)

  • Order & commerce APIs On the B2B commerce platform: order SLA tracking, order-status notes, and the full SPK/PO document workflow — upload, WAITING_SPK_PO status handling, payload exposure, and order-detail export — plus Postman collections for the API.
  • Koperasi BIBI platform Integration lead across three codebases (legacy CodeIgniter, frontend, backend) — shipping the hotfix trains: SQL bugs, savings-import fixes, interest-rate corrections, rich-text and global-request issues, with CI pipeline setup.
  • MySooltan acceptance testing CodeceptJS E2E suites for QR generation, top-up, and Finpay flows — including test-config architecture and stability hardening (explicit waits over sleeps).
  • E-procurement BUMN portal Automated tests for vendor-detail flows (address, documents) and authentication, with environment-driven login helpers.

Stack

What the code is made of

Languages & frameworks

  • TypeScript
  • Go (optimization)
  • PHP (legacy)
  • NestJS
  • Node.js
  • Express

Data & messaging

  • PostgreSQL
  • MongoDB
  • Apache Kafka
  • Redis
  • Elasticsearch
  • TypeORM
  • Bull (job queues)

Platform & tooling

  • Kubernetes · Docker
  • Jenkins · GitLab CI · GitOps
  • k6 · Cypress · Jest · CodeceptJS
  • Prometheus · Grafana
  • Datadog · SonarQube
Contact

Happy to chat about the work.

Most of my current work lives in internal repositories, so this page shows the shape of it rather than links — but I'm glad to walk through design decisions, event flows, or how the test and load suites fit together.