Frontend that feels inevitable, built
end to end.
I'm Huy, Johnny to most. A frontend-focused fullstack developer building enterprise platforms and marketplaces.
Available for projectsSelected work
- Eastgate · 2026
Enterprise Web PlatformEnterprise Web Platform
Role-based admin app with SSO · Eastgate 2026Admin app with role-based access, SSO and a drag-and-drop dashboard
- Eastgate · 2026
Event MarketplaceEvent Planning Marketplace
EN / Arabic RTL booking portalsEnglish and Arabic (RTL) portals with booking, payments and live chat
- Fullstack · 2025–26
Appointment BookingAppointment Booking
Next.js 16 admin + NestJS APIScheduling admin on Next.js 16 with a NestJS API
- VMO · 2025
Performance TrackingPerformance Tracking
Micro-frontends · VMOMicro-frontend app and design system on Tailwind + Ant Design
- VMO · 2023–25
Parking ApplicationParking Application
Mapbox GL & deck.gl maps · VMOMap interfaces with Mapbox GL & deck.gl, GraphQL via Apollo
About
Nearly three years shipping data-heavy products for enterprise teams. I care about the last 10%: the RTL edge case, the first paint.
Experience and education
- Eastgate SoftwareOct 2025 – Now
- VMO HoldingsOct 2023 – Oct 2025
- PTIT · MultimediaEducation
Stack
- TypeScript
- React
- Next.js
- TanStack Query
- Tailwind
- Radix UI
- NestJS
- PostgreSQL
- Playwright
- Claude Code
The stack, end to end
Follow one request: an admin lets Editors export reports
(Stack) · Request flow
Interface
What the user touches
A checkbox flips in the permissions table, fast even with thousands of rows.
A checkbox flips in the permissions table, built to stay fast with thousands of rows.
State
What the app remembers
The UI updates instantly and the cache refreshes when the server confirms.
The UI updates instantly, the input is validated, and the cache refreshes when the server confirms.
API
What checks the request
A typed call reaches a guarded endpoint. Expired SSO tokens refresh silently.
A typed call reaches a guarded endpoint. Expired SSO tokens refresh without the user noticing.
Data
Where it lands
The permission is saved and an entry goes into the activity log.
The permission is saved and an entry goes into the activity log.
Ship
How it stays working
Playwright replays the flow, CI blocks a broken merge, then it deploys.
Playwright replays the flow, CI blocks the merge if anything breaks, then it deploys.