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/storewritable 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
/cmsthat commits content edits straight to thedevelopbranch.
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.