Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

How I run a multilingual eSIM store from a home server (Medusa v2 + Next.js)

Description and use

The author built a multilingual eSIM store with Medusa v2, Next.js, and PostgreSQL, hosted on a home server via Tailscale. He implemented locale‑specific pages, QR code delivery via email and Zalo, ensured one‑time QR usage, and handled self‑hosting operations.

Problem

Running a multilingual eSIM store requires handling multiple languages, localized content, diverse delivery channels, and secure QR code management while keeping operations self-hosted.

Outcome

The store now supports multiple languages with localized content, delivers eSIM QR codes via email or Zalo, ensures QR codes are never reused, and runs cost‑effectively on a home server with full operational control.

Workflow

  • Set up Medusa v2 as headless commerce backend
  • Create Next.js App Router storefront
  • Configure PostgreSQL database
  • Deploy both services on a home Linux machine and expose via Tailscale
  • Integrate Stripe for card payments and QR bank‑transfer for Vietnamese customers
  • Develop locale‑specific pages and content for Vietnamese, English, Nepali, Sinhala, Bengali, Indonesian, German, etc.
  • Implement QR code pool with one‑time use enforcement
  • Add Zalo integration for QR delivery to older Vietnamese customers
  • Create deploy script and log for self‑hosting maintenance

Evidence

Medusa gives me carts, orders, promotions and an admin UI out of the box. Everything specific to eSIM, like QR delivery and multilingual landing pages, I build on top.

Source

The store has pages in Vietnamese, English, Nepali, Sinhala, Bengali, Indonesian, German and more. Each community searches with different words and worries about different things, so each locale gets content written for it, not a translated copy.

Source

Many older Vietnamese customers rarely check email but use Zalo every day, so eSIM QR codes can be delivered through Zalo as well as email.

Source

QR codes come from a pool. Once a code is issued it is marked as used and can never be sent again.

Source

Deploys, backups and monitoring are all on you. A deploy script and a deploy log help a lot; offsite backups are next on my list.

Source

  • Record date: 2026-11-03T21:13:48.682Z