Hong Huat Website & CMS
A Thai-English corporate publishing platform with structured APIs for products, industries, articles, careers, and contact workflows.
Bilingual corporate site and CMS staff update without a developer.
- Role
- Everything: schema, API, website, CMS, deployment
- Ownership
- Project owner, end to end
- Core stack
- Next.js · React · TypeScript · Tailwind CSS · NestJS
Marketing, sales and HR needed to publish products, articles and job posts in Thai and English without asking a developer for every change.

What I built
I owned Hong Huat end to end, from the database schema to deployment.
- Designed a content model where every entity has a matching Translation table, so Thai and English stay aligned at the data layer
- Built the NestJS API and the CMS for products, industries, articles, careers, banners, policies and company pages
- Built the Next.js site with next-intl, server-rendered pages, sitemap, robots, per-page metadata, OpenGraph and JSON-LD
- Hardened public forms with reCAPTCHA, rate limiting, upload whitelisting and 15-minute JWTs with refresh tokens
- Deployed with Docker Compose, Nginx and automatic Let's Encrypt renewal, with a migration container that runs before the API starts
How it fits together
Editors sign in to the CMS and write structured content through protected NestJS endpoints. Prisma stores it in PostgreSQL and files go to MinIO. The Next.js site fetches localized content per request and renders it through shared components.
Outcome
Marketing, sales and HR publish products, news and job posts in both languages without a developer.
Deep diveCore feature walkthroughAn interactive flow of the hardest workflow, step by step.
How the main product workflows operate
Structured Thai and English content moves from protected editing to reusable public pages
Hong Huat models business content by domain instead of saving entire pages as opaque blobs. Products, industries, articles, careers, banners and policies each have explicit translation and media relationships.
Protected admin · NestJS · Prisma · PostgreSQL · Next.js
Dedicated translation models keep language values aligned with the same product, industry, article or page section.
The website consumes products and content through stable contracts rather than reading administration-shaped tables directly.
Editors can update structured records and media while reusable frontend components preserve presentation consistency.