All posts
Web DevelopmentDevOps
How this portfolio is built
A quick look at the stack behind this site: Next.js, Payload CMS, PostgreSQL and Docker on a small DigitalOcean droplet.
The stack
The site is a Next.js app with Payload CMS embedded in the same project. Payload provides the admin panel, so projects, blog posts and resume details can be edited in both English and Thai without touching code.
Content is stored in PostgreSQL. Pages are rendered on the server and cached, and every change published in the CMS refreshes the cache automatically.
Deployment
GitHub Actions builds a Docker image on every push to main and publishes it to GitHub Container Registry. A 1 GB DigitalOcean droplet only pulls and runs the image next to PostgreSQL, while Caddy handles HTTPS and the domain.