View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
View LDNVN86's full-sized avatar
💭
誰にも届かない悲しみ
💭
誰にも届かない悲しみ

Block or report LDNVN86

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LDNVN86/README.md

Typing SVG


🚀 Summary

  • 🎓 HCMUS - Faculty of Information Technology (Software Engineering)
  • 🏗️ Shipping production, money-critical platforms: Tavigo (eSIM e-commerce), TongKhoEsim (B2B eSIM wholesale), napplus (prepaid top-up)
  • 💻 Backends in Go (Gin, pgx) & Rust (Axum, SQLx) — transactional outbox, Redis Streams workers, double-entry ledgers
  • 🌐 Frontends with Next.js / React / TypeScript behind BFF auth layers
  • 🗄️ PostgreSQL, Redis, Docker, Centrifugo realtime, VPS ops with Traefik/Caddy + Cloudflare
  • 🎨 Hobbies: anime, stories, algorithms, and exploring new tech

🏆 Flagship Products — Live in Production

📡 Tavigo — eSIM E-commerce Platform

Travel eSIM e-commerce for the Vietnamese market — real-time provisioning from 3 upstream suppliers (eSIM Access, eSIM Go, SimplifyTrip). Go modular monolith + 3 Next.js apps (storefront / admin / affiliate) behind BFF auth, VNPay · SePay · KimNganPay payments, Centrifugo realtime order tracking, MISA e-invoicing.

⚙️ Architecture highlights
  • Multi-provider eSIM provisioning with per-provider token-bucket rate limits and fail-closed webhook signature/IP verification
  • Transactional outbox over Redis Streams → separately scalable worker binary (payment expirers, reconciliation crons, DLQ) with Prometheus metrics
  • Shared Argon2 session cookie across 3 Next.js apps, encrypted TOTP 2FA, Google OAuth, admin RBAC with immutable audit logs
  • AEAD-encrypted bank data at rest with dual-key rotation; 108 SQL migrations; GitHub Actions push-to-deploy behind Traefik + Cloudflare

📦 TongKhoEsim — B2B Wholesale eSIM Distribution

Wholesale eSIM inventory & distribution — stock synced from telecom suppliers into a central warehouse, sold through two-tier reseller dashboards and a partner-facing Open API on a prepaid-wallet model. Rust workspace (~97k LOC) with separate API & worker binaries, 3 Next.js apps, SePay top-ups + MISA VAT invoicing.

⚙️ Architecture highlights
  • Money-safe core: multi-tenant prepaid wallets on an append-only double-entry ledger — integer VND only, mandatory Idempotency-Key on all money POSTs
  • Partner Open API: per-key rate limits, endpoint scopes, IP whitelists, sandbox mode, webhook fanout with retry backoff + delivery log & replay
  • Field-level AES-256-GCM encryption (versioned key rotation) for eSIM activation codes & TOTP secrets; Argon2id + TOTP 2FA; dynamic RBAC down to UI components
  • 4-crate Rust workspace (unsafe_code forbidden), 89 SQL migrations, 3-environment Docker deploys behind Caddy + Cloudflare, backups to R2

💳 napplus — Prepaid-Wallet Top-up Platform

Dual-brand fintech platform for phone credit, cards, data packages & bill payments backed by a prepaid wallet — VNPAY/SePay payments, VinNet & Viettel IRIS fulfillment. Currently being rewritten strangler-fig from legacy NestJS/MySQL to a 15-crate hexagonal Rust/Axum workspace: a Rust gateway proxies un-migrated routes to the legacy API while 7 bounded contexts move to PostgreSQL + Redis.

⚙️ Architecture highlights
  • Strangler-fig gateway: per-bounded-context production cutover with parallel-run reconciliation instead of a big-bang rewrite
  • Append-only double-entry ledger as the source of money truth; clippy float_arithmetic = deny workspace-wide; idempotency keys on every money mutation
  • Legacy system reverse-engineered into a 522-test-case spec across 12 flows — each suspected bug gets an explicit keep-or-fix ADR before porting (incl. a P0 IDOR account-takeover fix)
  • CI "layer purity" gate enforcing hexagonal architecture (domain must not know infrastructure), cargo-deny, k6 smoke/load suites

🚀 Featured Projects

🛒 Shop Acc Game

E-commerce platform for game accounts with PayOS payment, WebSocket realtime, admin dashboard.

🎨 Muciii Bio

Linktree-style bio page with theme customization, dark mode, smooth animations.

📥 Video Downloader

Download videos from YouTube, TikTok, Facebook, Instagram with queue management.

📚 NekozaneDex

Manga/comic reading platform with upload system and chapter management.


🧰 Tech Stack

Languages

GoRustTypeScriptJavaScriptJavaC/C++

Frameworks & Libraries

GinAxumNestJSReactNext.jsSpring BootTailwindCSS

Databases, Infra & Tools

PostgreSQLRedisMongoDBMySQLDockerCloudflareLinuxUbuntuGit


📊 GitHub Stats




🐍 Contribution Snake

snake eating my contribution graph

🤝 Connect With Me


⭐ Thanks for visiting! 👋

Popular repositories Loading

  1. SenoDownload-BE SenoDownload-BEPublic

    Download Video FaceBook/Reals, Youtube/Short, Instagram?, Tik Tok.

    TypeScript 3

  2. LDNVN86 LDNVN86Public

    2

  3. SenoDownload-FE SenoDownload-FEPublic

    TypeScript 2

  4. Portfolio-React-Vite Portfolio-React-VitePublic

    Demo profile

    JavaScript 2

  5. NekozaneDex-BE NekozaneDex-BEPublic

    Web Đọc Truyện, Đăng Truyện "Đơn Giản" Bằng Gin Framework. Tôi Lỡ Add Quá Nhiều Tính Năng Và Tính Năng Nào Cũng Bị Lỗi (is developing not yet completed)

    Go 2 1

  6. NekozaneDex-FE NekozaneDex-FEPublic

    The web frontend for NekozaneDex, built with Next.js, TypeScript, and Tailwind CSS. Lỗi Chồng Chất Thêm Lỗi Quá Nản (is developing not yet completed)

    TypeScript 2