In this tutorial, I’ll teach you how to use Next.js and Sevalla to build and deploy your own Next.js blog.

But first, let me answer your likely question: “Why host a blog yourself when there are hundreds of blogging platforms available? “

One answer: Next.js.

Table of Contents

What is Next.js?

Next.js Framework

Next.js is a web development framework built on top of React. While React is a library for building user interfaces, Next.js adds extra features to make building websites and web applications easier and faster.

Next.js gives you full control. You own your content, your design, and your SEO strategy. Unlike Medium or Substack, you’re not limited by platform rules or branding. You can optimise every part of your blog, from how fast it loads to how it looks on Google search.

Next.js isn’t just a tool to build a blog. It’s a platform to build your entire brand. That’s why developers and indie hackers love it.

What is Sevalla?

Sevalla is a Platform-as-a-service provider that I have recently fallen in love with. Built by the team behind Kinsta, the popular WordPress hosting platform, Sevalla combines powerful features with a smooth developer experience. They offer application hosting, database, object storage, and static site hosting for your projects.

Unlike platforms like Heroku, which provide almost all features via additional integrations, Sevalla gives you exactly what you need to build and deploy an app to your users.

Sevalla Admin Panel

Imagine if someone took just the essential features from cloud platforms like AWS or Azure and put them into a single, easy-to-use dashboard. That’s exactly what the Sevalla admin panel has. A clean, simple interface with everything you need, and nothing you don’t.

In a nutshell, Sevalla handles all the heavy lifting of deploying and scaling your app, so you can focus entirely on building it.

Building and Deploying a Next.js Blog

Now let’s build and deploy our Next.js blog. We don't have to build one from scratch – there are many templates available for us to use, like this one.

We will do three things.

  • Clone the repository and set up the blog on our local machine.

  • Deploy the site to Sevalla

  • Add a custom domain.

Building the blog

First, fork the Next.js blog repository.

Fork Repository

Once you have forked it, clone it to your local machine.

Clone repository

git clone <repository url>

Once you have cloned the repository, go into the directory and run npm install . Make sure you have the latest Node.js and Next.js installed on your machine.

Now let’s run the blog on our machine. The command is npm run dev . Once the server is running, go to localhost:3000 to view the site.

Demo Next.js blog

You should see the above page. Now let's add our own blog post to it. Go to the content/blog directory. Every page in the content directory is your blog post, and you can use Markdown to style it. Save the file with the extension .mdx

Add the following text (the first part is the metadata for the blog to understand the title and date of publication):

---
title: "My New Post"
date: 2025-07-07
---

Welcome to my first blog post using Next.js and MDX!

Reload the home page, and you should now see two posts – the default post and your new post.

New post in Next.js blog

So every time you want to publish a new article, you create a new page using Markdown. It's that simple.

Commit this new file and push it to your repository.

git add .
git commit -m "new post"
git push origin main

Deploying the blog

Now create an account on Sevalla (use GitHub login so that you don't have to re-authenticate again).

Once you log in to Sevalla, you’ll see the Static site option. Click on it to create a static site.

Like other hosting providers, not all Sevalla products are free, but it comes with generous free credits. Unless you have a reasonable number of users that access your blog, you will not incur any costs for blogs/small projects. But when it comes to static sites, you can host up to 100 sites completely for free.

Sevalla Dashboard

Select the repository from the list. Check the “Automatic deploy on commit” option. So every time you push code, Sevalla will automatically deploy your new post to the server.

Create Static Site

In the “build settings” page, keep the defaults. Click “Create site”. In a few minutes, the app will be pulled from GitHub, deployed to a server, and you should see the button visit site .

Deployment success

If you visit the site, you should see the below page:

Live blog

Yay! Your blog is live. You can also see detailed build logs under the “deployments” tab and see if there are any issues deploying your app.

Sevalla Deployment Logs

Adding a custom domain

Great. For the last step, let's add a custom domain to our blog.

Go to the “domains” tab, and click “add domain” under custom domains. I'll be using a subdomain next from my private domain manishshivanandhan.com, but the instructions are the same for root domains as well.

Add custom domain

Once you click “add domain”, Sevalla will give you the instructions to add the TXT records for verification and CNAME/A records for pointing the new site to your domain.

Once these are done on your domain provider, check back after a few minutes.

Custom Domain Verified

Hooray! You’ve created your own Next.js blog. Here is the sample site I built for this project – http://next.manishshivanandhan.com

Conclusion

And that’s it! Your very own Next.js blog is now live on Sevalla.

In just a short time, you’ve gone from cloning a template to publishing your first post and deploying it to the world with a custom domain. With Next.js, you get full control over your content and brand, and with Sevalla, deployment becomes effortless and smooth.

Remember, every time you want to publish a new article, all it takes is creating a simple markdown file and pushing your code. Sevalla handles the rest, so you can focus on what truly matters: writing great content and building your personal brand.

Hope you enjoyed this article! I’ll be back soon with more tutorials on building with Next.js. Feel free to connect with me on LinkedIn to stay in touch.