Why I built my portfolio with Nuxt 3

I've been running websites for years, but this time I wanted to switch things up. No WordPress, no template, no page builder. Just code.

The stack I went with Nuxt 3 and server-side rendering. Using Nitro as the backend, with MariaDB for the little that needs persistence (visitor counter, blog posts, auth). Styling is just vanilla SCSS, no utility framework.

The retro terminal look was something I always had in mind from the beginning. I like the aesthetic and it fits the developer angle. Press Start 2P for the headings, IBM Plex Mono for the body text, dark background, green glints. Simple.

What I learned

Nuxt 3 with the Nitro server layer is surprisingly nice for small full-stack applications. I'm coming from Laravel, and thought I was going to miss a lot, but it does well for a personal site with a blog and a few API routes. The file based routing for pages and API routes is tidy. The one thing that took some getting used to is the SSR hydration. If you are not careful with client-only logic, you will get mismatches on server Vs client rendering. Wrapping things in ClientOnly solves most of it.

Why not Laravel?

I use Laravel daily for client work. For my own site I wanted to experiment with something else and stay more in the frontend. Nuxt makes it possible for me to build everything in one project and not have to worry about a separate API and SPA. For a portfolio site, that is plenty. What you're reading right now the blog is running on the same Nuxt instance. Markdown in, HTML out, stored in MariaDB. No CMS, no service externally. Just a barebones admin panel after you log in.

What is next

I will be adding posts here when I have something to share your worth. Something on Laravel, PHP, Vue, or whatever I happen to be working on at the moment.

← Back to blog
© 2025 Florian Cullmann. All rights reserved.