← Back to Articles
May 29, 20264 min read

How I Built My First DevOps Portfolio (Next.js + Payload + Neon + Render)

Introduction

As a freelance DevOps engineer, I spend most of my days in the terminal, writing YAML files, configuring CI/CD pipelines, and making sure other people’s apps run smoothly. But recently, I faced a different kind of challenge: I needed to build my own portfolio website. When you’re freelancing, your portfolio isn't just a resume—it’s your storefront. I needed something fast, modern, easy to update, and (most importantly) cheap to run. Instead of grabbing a generic template, I decided to treat this like a mini production project. Here is how I built a high-performance DevOps portfolio using Next.js, Payload CMS, Neon, and Render.

Goal

I didn’t want a static site. I wanted a system that behaves like something you’d actually deploy in a real company.

  • A professional portfolio to showcase my work
  • A blog system where I can publish technical insights
  • A backend architecture that reflects real DevOps practices
  • A deployment setup that mirrors production environments

The Blueprint: Why This Tech Stack?

Every good DevOps project starts with architecture. I wanted a stack that separated my content from my frontend while keeping deployment dead simple.

  • Frontend: Next.js – It’s fast, handles SEO beautifully out of the box, and allows for static site generation. For a portfolio, speed is everything.
  • CMS: Payload CMS – I needed a headless Content Management System so I could easily add new freelance projects or blog posts without touching code. Payload is Node-based, incredibly flexible, and typescript-native.
  • Database: Neon – A serverless PostgreSQL database. It has a generous free tier, scales down to zero when nobody is visiting, and takes seconds to set up.
  • Hosting: Render – Docker-friendly, reliable, and a fantastic alternative to Heroku for hosting both the frontend and the CMS backend.

Setting Up the Database (Neon)

Before touching any code, I needed a place to store my data. I hopped over to Neon and spun up a serverless PostgreSQL instance. What I love about Neon from a DevOps perspective is the database branching feature. Just like Git, I can create a branch of my database for staging or testing without messing with my production data. Once the instance was live, I grabbed my connection string and moved on.

Building the Core with Payload CMS & Next.js

Payload CMS plays incredibly well with Next.js. In fact, you can run them together in a single repository. I initialized the project and configured Payload to use the Postgres database via the Neon connection string. Then, I defined my collections (the data structures):

  • Next.js handles the frontend (portfolio + blog UI)
  • Payload CMS manages backend logic and content APIs

This setup is simple, but it reflects real-world engineering principles: separation of concerns, scalability, and maintainability.

Deployment: Render

For deployment, I used Render to keep things simple and production-aligned. It allowed me to:

  • deploy both frontend and backend services
  • manage environments properly
  • connect services without unnecessary complexity
  • simulate real production deployment flows

The goal was not just to “host a website,” but to replicate a real deployment pipeline.

Real Challenges I Faced

Even with a clean stack, things weren’t straightforward. Some of the challenges included:

  • syncing frontend and backend environments correctly
  • managing database connections in production
  • handling Payload configuration in a deployed environment
  • debugging deployment issues between services
  • structuring APIs in a way that stays maintainable

These are the kinds of problems you only understand when you move from tutorials to real implementation.

Lessons Learned as a Freelancer

Building this site taught me a few valuable lessons:

  • Don't over-engineer early on: I initially thought about Dockerizing everything and throwing it onto a Kubernetes cluster. Glad I didn't. Render + Neon gave me the hands-off reliability I needed so I can focus on client work, not server maintenance.
  • Content accessibility matters: Having a real CMS (Payload) means I can update my portfolio from my phone if a client asks for a case study while I’m away from my laptop.
  • Show, don't just tell: Instead of just listing "AWS" or "Docker" on my resume, my new portfolio explicitly details how I used those tools to solve real business problems for my clients.

As a freelancer, this is the mindset clients actually care about.

Final Thoughts

Building this system was a shift in mindset. It’s no longer about “learning tools.” It’s about building systems that reflect real engineering standards. This portfolio represents the beginning of my freelance journey, not just as a developer, but as someone who understands how to design, deploy, and maintain real-world infrastructure.