~/work/iwefarm
iWeFarm
A marketplace for Ngoc Linh ginseng. Users buy plants, follow their garden’s care, and trade consignment holdings on an in-app trading floor, on web and mobile.
- Role
- Full Stack Engineer · Freelance
- Scope
- Backend · Web · Mobile
- Platforms
- Web · iOS · Android
- Live
- iwefarm.com.vn




The problem
Ginseng is a slow-growing, high-value crop, and buyers rarely see their plants. The client needed a platform where people could own, follow and resell plants remotely, which meant wallets, payments and a trading floor that users could trust.
What I built
- 01REST API · ~220 routesUsers, products, orders, wallets, trading, commissions, campaigns and identity documents.
- 02Trading floorBuy and sell orders with trade execution for consignment plant holdings.
- 03Wallets & paymentsBalances, top-up and transfers behind PIN verification, with SePay QR bank-transfer payments.
- 04Real-timeChat and online status over Socket.IO, and Firebase push notifications.
- 05Web, app & adminA React web app with Vietnamese and English, a Flutter mobile app, and an admin dashboard.
Architecture
Clients→
WebReact · Vite · React Query
MobileFlutter · Provider
API→
Express serverNode.js · Sequelize
Socket.IOchat · presence
Data & services
MySQL · Redisdata · OTP · cache
SePay · Cloudinary · Firebasepay · media · push
Hard parts
Money in motion
Wallet transfers, commissions and a master wallet all move real value. Each sensitive action requires a PIN, and a cron job cancels stale orders.
Account isolation
Users can switch between saved accounts, so every query cache key is scoped to the user. That stops one account’s data from appearing in another.
Stack
Node.jsExpressSequelizeMySQLRedisSocket.IOReact 18ViteReact Queryshadcn/uiTailwindi18nextFlutterFirebaseSePayCloudinary