cat ~/blog/hello-world.mdx
hello, world
This is the rebuilt sudovinh.com. The old page was a Django app that mostly served a list of links. This one is a static export: Next.js renders everything at build time, nginx serves the files from a tiny container on DigitalOcean App Platform, and DNS and infra live in Terraform and octoDNS.
Why static
No runtime means nothing to patch, nothing to scale, and nothing to wake me up.
A post is a file in content/posts/. Push to main and it's live in about two minutes.
Code blocks work
const files = (await fs.readdir(DIR)).filter((f) => f.endsWith(".mdx"));
const posts = await Promise.all(files.map(read));
return posts.sort((a, b) => +new Date(b.date) - +new Date(a.date));kubectl get nodes -o wideMore soon on the homelab, the pipelines behind this site, and whatever breaks next.