Skip to content
Back to Home
Portrait of Phạm Khánh Minh Mẫn

Phạm Khánh Minh Mẫn

Backend Engineer · E-commerce API Integration · Master's Student in Computer Science

Da Nang, Vietnamphamkhanhminhman97@gmail.comgithub.com/phamkhanhminhman97linkedin.com/in/pkmm97

About

Backend engineer with 5+ years in e-commerce, payments and multi-marketplace API integration, mostly in NestJS and TypeScript with event-driven work on AWS. Author of four open-source client libraries for the Shopee, TikTok Shop and Lazada Open APIs, published on npm.

Since 2026, a Master's student in Computer Science (research-oriented program) at Danang University of Science and Technology, interested in memory for LLM agents.

Experience

07/2025 —

DiproTech

— Backend Developer

Backend for Japanese clients, often several projects at once. Client names withheld under contract.

Social App

12/2025 — 05/2026

Social network backend, team of 10. I built the backend and owned deployment.

  • Set up the NestJS backend from an empty repo and built the CI/CD on GitHub Actions: dev and staging on Docker Compose behind Nginx (dev with auto-renewed TLS), production on AWS ECS.
  • Production deploys on demand, per service or all at once, never two runs in parallel, and waits until ECS reports the service stable. A dev deploy that fails its health check rolls back to the previous image by itself.
  • Tuned the PostgreSQL connection pool and indexes, made email unique only among active accounts so deleted users can sign up again, and built a shuffled feed that paginates stably without storing any order.
NestJSTypeScriptPostgreSQLRedisDockerGitHub ActionsAWS ECS / ECRNginx

Subscription billing

08/2026 —

Rails billing for a publisher on Stripe and PayPal side by side, plus passkey sign-in on AWS Cognito.

  • Made payment handling idempotent: each plan change is claimed by one conditional UPDATE, so Stripe and PayPal webhook retries never apply it twice.
  • Moved receipt PDFs from wkhtmltopdf to headless Chrome, and wrote the row and the file upload in one transaction, so a failed upload retries cleanly with no orphaned data.
  • Wrote the proration logic as plain Ruby with no database or gateway, unit-tested in RSpec; checked against the client's 28 official cases, it caught 14 errors in the spec itself.
Ruby on Rails 8PostgreSQLStripePayPalSidekiqRSpecAWS CognitoHeroku

Factory planning system

08/2025 —

Production scheduling, line simulation and live machine data, split across several Django services.

  • Put schedule generation behind a Redis lock so two triggers can never build the same schedule at once, and moved heavy aggregation into Celery background jobs.
  • Extended the Django models package that three services share as a versioned wheel, and carried its schema migrations through all of them.
  • Made bulk updates atomic, integrated an external system over GraphQL, and worked on the Java OPC-UA client that reads machine data.
PythonDjangoCeleryRedisPostgreSQLDockerJavaOPC-UAGraphQL

Exam-practice app

07/2025 — 10/2025
  • Migrated the backend from PostgreSQL to Firestore, with batch import and export scripts for the question bank.
  • Cut per-request work: stats update incrementally instead of recomputing a whole category, and Redis caches stats and exam history.
PythonFastAPIFirestoreFirebase AuthRedis
04/2022 — 06/2025

Devtify Technologies

— Backend Developer

PaymentShield

01/2025 — 06/2025

Auto loan service between lenders, dealers and customers, team of 7.

  • Started the codebase: NestJS, Docker, PostgreSQL, layered by responsibility.
  • Webhooks publish to SQS and Lambda consumes them, so a slow downstream cannot block the callback.
  • Failed jobs retry with backoff and land in a DLQ instead of disappearing.
NestJSTypeScriptPostgreSQLAWS LambdaAWS SQSBullMQRedis

ROUTINE

01/2024 — 03/2025

Orders, inventory and refunds unified across Shopee, Lazada and TikTok Shop, team of 10.

  • One order model over three marketplaces, each with its own API shape and failure modes.
  • Kept stock and finance in step with the NaviWorld ERP.
  • Integrated three payment gateways and three shipping providers.
NestJSTypeScriptPostgreSQLRedisElasticsearchBullMQShopee APITikTok Shop APILazada API

BEAUTYBOX / THEFACESHOP / REEBOK

04/2022 — 11/2023

Retail digital transformation for HSVGroup, team of 15.

  • Designed the database and REST API.
NestJSTypeScriptPostgreSQLRedisAWS EC2Docker
01/2020 — 01/2022

Vietnam People's Army

— Military Service

Completed compulsory military service.

03/2019 — 12/2019

D-SOFT JSC

— Backend Developer

SunWorld B2B Ticket

Ticket selection, online payment and e-ticket storage, team of 7.

  • Designed and built the REST API on PHP / Laravel / SQL Server.
PHPLaravelSQL Server

Selected systems

Built outside client work; public and linked.

BattleCatsLabbattlecatslab.fun ↗

Personal project · public

Data and simulation site for a mobile game — 9,000 generated pages, a deterministic battle engine, and server-authoritative realtime PvP.

  • Server owns the sim and ticks it at 30 Hz; clients send deploy intents and render snapshots, so a client cannot fake a result.
  • Ranked ELO gate treats same-IP as telemetry only — shared Wi-Fi must not invalidate a real match; the abuse lockout derives from an append-only log, not a mutable counter.
  • A golden-vector test pins fixed team pairs to their exact winner and frame count, so an engine change that would desync stored replays fails CI instead of corrupting them silently.
TypeScriptReactViteSQLiteCloudflare WorkersCloudflare R2SSE

Education

2026 — present

Master of Science (M.Sc.) in Computer Science, in progress

Danang University of Science and Technology (DUT) — The University of Danang

Research-oriented Master's program. Coursework in progress; thesis topic not yet chosen.

2015 — 2019

B.Sc. in Information Technology

University of Science and Education — The University of Danang

Major in Information Technology.

Research

2026 — presentExploratory — no published results

When Does Graph Memory Help Beyond Verbalized Relations? Isolating Representation from Structure in LLM-Agent Memory

Independent research — not committed as a thesis topic

Question
Graph memory is widely believed to help LLM agents remember better. But when graph memory is compared against flat memory, existing work changes TWO things at once: structure (the ability to traverse relations) and representation (information rewritten as typed relational sentences — unavoidable, because an LLM can only read text). So which of the two does the observed benefit belong to?
Method
Verbalize-control: three token-budget-matched conditions drawing from the same candidate edge pool and differing only in the selector — graph traversal, cosine truncated to the budget, and dump-everything. Plus a degree-preserving shuffled-edge control to separate “these particular edges” from “merely having a graph”. The design is pre-registered, evaluated on an external non-circular benchmark, and specifies the negative branch in advance (TOST equivalence testing).

Status, stated plainly: this is something I work on outside of client work, not a committed thesis topic. A 30-question feasibility probe has been run; the quality gate fired and returned “inconclusive” rather than a result. No publishable numbers.

LLM agent memoryKnowledge graphRetrievalAblation studyPre-registrationCluster-aware statistics