All projects
Full Stack case study

Hong Huat Website & CMS

A Thai-English corporate publishing platform with structured APIs for products, industries, articles, careers, and contact workflows.

TL;DRProject ownerSep 2025 – Jul 2026

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
The problem

Marketing, sales and HR needed to publish products, articles and job posts in Thai and English without asking a developer for every change.

Hong Huat public website on desktop
Public production website captured from honghuat.com.

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.
Core feature walkthrough

How the main product workflows operate

Core feature 01 · Multilingual publishing

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.

Editor → localized website

Protected admin · NestJS · Prisma · PostgreSQL · Next.js

Select a node for implementation detail
Translation is part of the schema

Dedicated translation models keep language values aligned with the same product, industry, article or page section.

Domain APIs reduce page coupling

The website consumes products and content through stable contracts rather than reading administration-shaped tables directly.

Content can evolve independently

Editors can update structured records and media while reusable frontend components preserve presentation consistency.