Skip to content
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.