2025 · Design and development
A responsive personal website built with Next.js, Tailwind CSS, and multilingual support.
Khmer and English with locale-prefixed routing, per-locale fonts, and a language switch that keeps the current page and scroll position.
Content as data: JSON files, a repository layer, API routes, and typed helpers, so adding an entry never means touching a component.
Backend-ready: one environment variable points the same helpers at an external API, with the bundled JSON as an automatic fallback.
Static detail pages for every project, experience, and education entry, with unknown ids returning a real 404.
Contact form delivered to Telegram, protected by validation, a honeypot field, body-size limits, and per-IP rate limiting via Upstash Redis.
Light and dark themes with no flash on first paint, site-wide search, and scroll-triggered motion that respects prefers-reduced-motion.