Full-Stackdeveloper
Technical Lead
at VGT Global JSC
I build production web products with Next.js and NestJS — and I stay with them through deployment, debugging, and the parts that only break at 2am on real infrastructure.
What I focus on
I enjoy building end-to-end products that stay clean as they grow. Most of my work now is realtime — WebSocket gateways, peer-to-peer calls, and a mobile app that has to ring a locked phone — plus the multi-tenancy and deployment underneath it.
Ship it, then own it
Writing the feature is half the job. The other half is the logging that makes a failure legible and the handover that lets someone else fix it without me.
One system, not many
Reusable primitives and consistent conventions beat clever one-offs. New requirements should cost less over time, not more.
Boring infrastructure
Well-understood building blocks first — managed AWS services, plain Docker, ordinary Postgres. Interesting architecture is a cost, not a feature.
Hanoi University of Science and Technology
B.Sc. Computer Science (IT1)
TOEIC 780
Thanh Xuan, Ha Noi
Vietnam
Where I've worked
Technical Lead
VGT Global JSC
- Lead engineering on a multi-tenant hotel concierge platform in production — guest tablets, a staff dashboard, live audio calls between them, and an on-premises voice AI.
- Set the architecture — the multi-tenant data model, the realtime call flow, and the on-premises AI embedded in the guest tablet.
- Work the whole surface: NestJS API, React admin and guest apps, and a React Native app for staff.
- Own the deployment path for both environments, from CI runner through to the servers.
Full-Stack Developer
Pionero JSC
- Joined as an intern and stayed on as a full-stack developer, working across multiple products in Next.js and NestJS.
- Built real-time UI for speech-to-text features.
- Developed responsive product pages and internal tools.
- Supported deployment and operations on AWS.
- Worked with ECS, ECR, EC2, ALB, RDS, S3, CloudFront, API Gateway, SQS, SNS, and SendGrid.
Full-Stack Developer
Freelance
- Delivered a loyalty and ordering product for a coffee chain as a Zalo Mini App, with a NestJS API and an admin dashboard behind it.
- Integrated the brand's iPOS point-of-sale: member sync, vouchers, and points-to-voucher redemption.
Three places, three constraints
A platform in production, a product team before that, and a client I answered to directly. Different constraints, same standards.
VGT Global JSC — the realtime calling platform I lead. Closed source, so what follows is the architecture rather than the code.
- Multi-tenant on one shared PostgreSQL database with row-level isolation per hotel — kept deliberately over a database-per-tenant split, and sized for hundreds of properties at 150-500 rooms each.
- Guest-to-staff calls are peer-to-peer WebRTC audio with TURN fallback on a self-hosted coturn: media never reaches the app server, which carries signalling only.
- A React Native staff app sharing a core package with the dashboard — CallKeep puts the call on the native incoming-call screen, and Firebase messaging wakes the app for it.
- On-premises voice AI routed per hotel to that site's own GPU rather than a cloud provider — speech to speech through a lip-synced 3D avatar.
- For the guest tablets, a Device Owner agent that holds the device binding, restarts the kiosk when it dies and applies commands from the backend, wrapped around a hardened WebView shell.
What I build with
- Next.js
- React
- React Native
- TypeScript
- Tailwind CSS
Motion with GSAP and Framer Motion, including a real reduced-motion layout rather than a switch that turns it off.
- NestJS
- Socket.IO
- WebRTC
- Prisma
Firebase Cloud Messaging for push; PostgreSQL row-level security for tenant isolation; Strapi where a CMS is the right answer.
- AWS
- Docker
- GitHub Actions
In production: ECS, ECR, EC2, ALB, RDS, S3, CloudFront, API Gateway, SQS, SNS.
- PostgreSQL
- MySQL
Let’s build
something.
Open to full-time roles and freelance web projects. Fastest way to reach me is email.