phucnht

Personal Website

Monday, December 23, 2024 · 1 min read

SvelteKitSvelte 5Tailwind CSS v4mdsvexVercel

You’re looking at it. phucnht.com is a SvelteKit app on Vercel. Every post and project page is a markdown file in the repo, and mdsvex compiles each one into a Svelte component.

How it’s put together

  • Svelte 5 with runes for state, so there isn’t a single svelte/store writable in the code.
  • Tailwind CSS v4, configured in CSS under @theme, with named colour tokens instead of hex values in the markup.
  • Open Graph images rendered at build time with satori and resvg. They use Be Vietnam Pro so Vietnamese diacritics come out right.
  • A small CMS at /cms that commits content edits straight to the develop branch.

Deleting JavaScript

In October 2026 I went through the site and swapped libraries for browser features. GSAP and bits-ui are gone. The mobile menu is an HTML popover, page changes use the View Transitions API, the blog list fades in with a scroll-driven CSS animation, and the contact form’s dropdown is a plain <select>. The modern HTML and CSS post has the details.

The music player

Play a song on the home page or the music page and it goes to a YouTube player docked at the bottom of the sidebar. The player lives in the root layout, so the song keeps playing while you click around. I wanted a slim audio bar, but YouTube’s terms say an embedded player must stay at least 200×200 pixels, so you get a small video as well.