Overview
A trade-in program for Samsung Galaxy phones in Myanmar. A customer picks their model, storage and condition on the website and sees a live price range in MMK, in English or Burmese. They choose a shop and get a quote code. In the shop, an engineer scans the quote, checks the phone, takes photos and signatures, sets the final price and accepts the device. Partner shops send accepted devices to HQ in pickup runs, and each partner is settled with an invoice.
Who uses it
- Customers (no account): the website and a mobile device-check app that tests the phone and hands the result back to the website.
- Store engineers: scan the customer's QR quote, inspect, price and accept the device, and print an A4 voucher.
- Partner shops: the same flow at partner locations, with a read-only portal for the shop owner.
- Admins: catalog and pricing rules, submissions, pickup runs, settlements and reports.
What I built
- Backend: NestJS with Prisma and PostgreSQL (18 models). JWT auth with three roles, S3 uploads for photos and signatures, Swagger docs. Prices are calculated on the server and every status change is checked there, from quote to inspection, pickup, receipt at HQ, settlement and payment.
- Customer website: Next.js 16 with English and Burmese, an installable PWA, a step-by-step price calculator, condition guide, shop locations and quote codes. Admins get a Telegram alert for each new quote.
- Admin, engineer and partner apps: React 19 with Vite, TanStack Router and Query, Zustand and Zod. The engineer app has QR scanning, a signature pad and a printable voucher.
- Device check: an Expo (React Native) app, started from a QR code on the store tablet, that reports the phone's condition back to the quote.
- Infrastructure as code: Terraform on AWS (CloudFront, EC2 with Docker and Caddy, RDS Postgres, private S3 behind CloudFront), deployed from GitHub Actions with OIDC, structured JSON logs with request IDs and an error alarm.
- Tests: about 230 Jest and Vitest cases across the backend and admin app.
Stack
NestJS, Prisma, PostgreSQL, Next.js 16, React 19, Vite, TanStack Router and Query, Zustand, Zod, Tailwind CSS 4, Expo (React Native), AWS (CloudFront, EC2, RDS, S3), Terraform, GitHub Actions.



