I'm a Vietnamese software engineer who has lived in Tokyo since 2013. On the side, I run shibaSIM, a small store selling travel eSIMs and SIM plans for foreigners living in Japan. Here is how it's built and what I've learned so far.

The stack

  • Backend: Medusa v2 (headless commerce)
  • Storefront: Next.js App Router
  • Database: PostgreSQL
  • Hosting: one Linux machine at home, reached through Tailscale
  • Payments: Stripe for cards, plus a QR bank-transfer flow for Vietnamese customers

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.

Lessons so far

1. Localization is more than translation. 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.

2. The delivery channel matters. 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.

3. Automate delivery, but never reuse a QR. QR codes come from a pool. Once a code is issued it is marked as used and can never be sent again.

4. Self-hosting is cheap, but you own the ops. 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.

If you're curious, the store is at shibasim.net, and the plans for people living in Japan are here.