← Back to Projects
Web Development2026.05

Personal Portfolio Website

Designed and built this personal portfolio site from scratch with Next.js 16, React 19, TypeScript, and Tailwind CSS v4. Features bilingual (EN/ZH) content, dark mode, framer-motion animations, and project detail pages with image galleries and video embeds.

Next.jsReactTypeScriptTailwind CSSFramer Motion
Personal Portfolio Website

Background

I wanted a single place to showcase my projects, hobbies, and background — something cleaner and more flexible than a static resume. Building it myself also gave me a chance to get hands-on with the modern React/Next.js stack outside of my usual embedded and robotics work.

What I Did

Built the site on Next.js 16 (App Router) with React 19 and TypeScript. Styled with Tailwind CSS v4 and added page transitions with framer-motion. Implemented a language context for full EN/ZH bilingual support — every section (projects, life, about, contact) renders from typed data sources in both languages. Added a dynamic project detail route with image galleries and video playback, a category filter on the projects page, and a responsive dark-mode-aware layout.

Challenges

Keeping the EN and ZH data structures in sync without duplicating type definitions — solved by sharing the Project type across both files. Handling URL-encoded asset paths for Chinese folder names in /public required some care to keep next/image happy.

Takeaways

Shipping a small but real Next.js project end-to-end was a useful counterbalance to my usual firmware work. The site is easy to extend — adding a new project is just one entry in two data files.

Gallery

Personal Portfolio Website 1
Personal Portfolio Website 2
Personal Portfolio Website 3