E Sangdan
Korean brands, bought for you and shipped abroad. Browse the catalogue on the web or in the app, pay for your items, then pay international shipping separately once the parcel is packed.


- Platforms
- Web · iOS · Android
- Built with
- Flutter · Python · SQL Server · Firebase push · PayPal
- Fees
- Free app · shipping quoted after packing
- Languages
- Website in 10 languages · app in English
Korean brands are easy to find from abroad and hard to buy from: many shops sell only inside Korea, in Korean, with domestic payment and delivery. esangdan is a personal-shopping service that closes the gap. You pick items and options on an English-first store, we buy them from the Korean retailer, pack them in Seoul and ship abroad. The price you see up front is only the item; shipping is quoted separately once the parcel is weighed, so nothing is guessed.








What it does
- Three-step shoppingChoose your pieces, we buy them in Korea, then you pay shipping after packing and track the parcel.
- Five departments and brands A–ZBeauty, clothing, bags and accessories, home and lifestyle, eyewear, plus a brand directory with department filters.
- Edits and curationShort buying guides and theme shops, every post labelled as written by a virtual curator.
- Shared bag and checkoutThe same account and bag on web and app; PayPal approval, no card details in the app.
- Separate shipping paymentAfter packing and weighing you get a quote by chargeable weight and pay it separately; it is never charged automatically.
- Order tracking and notificationsOrder, payment and shipping events appear in the app inbox and as opt-in push notifications.
- Support and account controlSend support messages with photos and request account deletion in the app.
- Ten-language websiteEnglish, Japanese, Spanish, Simplified and Traditional Chinese, Thai, Vietnamese, Indonesian, Malay and Brazilian Portuguese.
Design choices
Two payments, not one
Item payment happens at checkout through PayPal. International shipping is a separate quote issued after the parcel is inspected, packed and measured, paid in USD before dispatch with an expiry date and never charged automatically. The dispatch fee is 5% of the converted transport cost with a USD 2 minimum, and customs duties stay outside the quote.
Estimates advise, quotes bind
At checkout the shipping amount is an estimate. If the tariff is stale or missing, the order can still go ahead with explicit consent and no invented number; a zero or free estimate is never shown. The server stores the consent, and the actual quote still requires strict current rates or a documented manual quote.
The server decides money and payment
The mobile app never holds a PayPal secret and has no checkout WebView. PayPal opens in the system browser, and the app saves the order reference first. Parameters in a return link never prove success: returning only re-checks status, and capture needs a user action plus server verification of owner, amount, currency and payee.
Curation labelled as virtual
Editorial posts are written under three fictional curator personas, each marked "Virtual curator", and the images are labelled AI-generated. The editorial standard forbids passing them off as real experts, users or brand staff, and each daily run records sources, dates and the reason for the pick.
How it's built
One backend for web and app
The website, the Flutter app and the admin all use one Python server and one SQL Server database. Accounts, the bag, orders and notifications are shared, and the app talks to a versioned /api/v1 mobile API. Logic and money live in stored procedures rather than the client.
Catalogue collection and brand identity
Products come from per-retailer collectors that record the official store page, price basis and observation time. The operator can paste up to 20 official-store URLs into the admin inbox for a scheduled agent to collect. Brand and merchant are being separated so a retailer is never presented as the brand.
Ten languages, honest fallbacks
The storefront supports ten locales, loading only the selected language's file, and falls back to English for untranslated catalogue or editorial text. Legal documents stay English and say so in the interface. The native app interface is English; its notifications use the member's language.
Admin that refuses to guess
The Korean-language admin is Google sign-in only with an allowlist. It handles purchase locks, partial cancellation and refunds, tracking, support replies and shipping quotes that need inspection confirmation. Uncertain payment, refund or email states are surfaced as attention items and never retried blindly.