Back

Done > Perfect - How I Built My Personal Website and Actually Shipped It

April 9, 2025

Reading time: 3 minutes

For years, I kept telling myself I'd build a personal website. Between full-time work, side projects, and life in general, it always took a backseat. But last week, I finally decided to stop overthinking and just build it.

Here’s how I built my personal website from scratch and some thoughts along the way.

Why Build Your Own Site?

Sure, there are plenty of platforms where you can spin up a portfolio, blog, or even an entire personal brand in minutes. But I wanted something that was completely mine. No templates. No boilerplates. No limitations.

I wanted full control. Design, Code, Content, everything. Because at the end of the day, this is what gives me satisfaction as a programmer.

Over the years, I’ve built countless side projects in my free time, most of which never saw the light of day. They usually ended with a voice in my head whispering, “Someone must’ve built this already… so what’s the point?”

But this time, the project was different. It wasn’t about trying to build the next big thing. It was about building my own thing: a small corner of the internet that reflects who I am, what I love, and what I’m building.

The Idea

I wanted to build something simple, quick, so that I have small wins which gives me the satisfaction and motivation to continue building. I know that if I pursue the perfect website, like 3D elements, animations, stylings, I will never publish this website and stop at the 2nd week. That's why I kept things very simple for now. I know that I will improve this as time goes, but right now this is good enough for me.

The Stack

I kept the tech stack simple and familiar from my day to day use:

  • Frontend: NextJs
  • Backend: ExpressJs + Sqlite, to support my mini project like Zap (URL Shortener) and Image Squeezer
  • Styling: Material UI
  • Deployment: Dockerized, hosted on a DigitalOcean Droplet
  • CI/CD: Github Action
  • Blogs: Simple Markdown file

I containerized everything, set up CI/CD using GH Action, and used Caddy as a reverse proxy. This is something that I am very familiar with.

Challenges

Even with a minimal setup, I ran into a few bumps.

1. Overengineering

As a developer, it’s tempting to build everything from scratch, optimize everything, and make the perfect architecture. But I had to remind myself that this wasn’t a work project. This was for me. It’s okay to cut corners. It’s okay to leave TODOs. It’s okay to keep it simple.

2. Design paralysis

I spent way too long researching the perfect portofolio design. Debating between dark mode, minimal mode, grid layouts, and font choices. Eventually, I just picked one and stuck with it. I told myself: You can always tweak it later. This helped me move forward.

3. Writing content

Writing code? No problem. Writing about myself? Surprisingly difficult. I found myself rewriting the About page and landing intro multiple times. I wanted to be authentic, but also clear and concise. In the end, I just wrote like I talk, and that helped a lot.

Final Thoughts

This project reminded me why I love building things. Not for work. Not for metrics. Not for validation. Just because I enjoy it.

It’s easy to get caught up in the noise. Trends, AI hype, startup pressure, but this site is my way of slowing down and building something for myself. A place I can call home on the internet.

And the best part? It’s not finished. I’ll keep adding to it, improving it, and sharing more along the way.

If you’ve been putting off building your own site, let this be a sign.

Start small. Make it yours. Ship it.

You don’t need a perfect design, a clever domain name, or a flashy landing page. You just need to start.

Got a thought, question, or just want to say hi?
Reach out on X or LinkedIn — I’d love to connect.

Made with

by Boby