A Developer’s Personal Site in 2025: What I Actually Use

Discover how I built a blazing-fast developer portfolio and blog using Laravel 12, Markdown, Sushi, Folio, Volt, and Spatie tools — no CMS required.

Steven Richardson
Steven Richardson
· 3 min read

When I decided to rebuild my portfolio and blog, I quickly realised that all my old content was either lost or no longer relevant. It had been more than eight years since I last had a personal site — and that gave me a rare opportunity for a truly fresh start, with no legacy constraints.

Given my preferred tools, Laravel v12 was an obvious choice. I’ve been using it daily at work and I’m very comfortable with its expressive features and modern architecture. Most of the web apps I manage professionally are built on a custom CMS using Filament v3, but for this personal site, that felt like overkill.

All I really needed was a handful of pages and a lightweight blog.

As I explained in Blazing-Fast Blogs with Laravel, Markdown, and Sushi, I opted to use Markdown files for content and Sushi to feed them into Eloquent — keeping everything fast, simple, and flexible. To handle routing, I reached for Laravel Folio. Folio introduces file-based routing to Laravel, similar to frameworks like Next.js.

It’s perfect for smaller sites: each Blade file in your /resources/views/pages directory automatically becomes a route. For example, dynamic pages can be created using [slug].blade.php, which works perfectly for blog articles.

With Sushi reading markdown into models, I layered in a few more key packages:

  • Spatie's Feed – to generate an RSS feed from the Article model
  • Spatie's Sitemap – wired into a custom sitemap service to include Folio pages and articles
  • Volt – a modern, single-file component format for Livewire, which I used to extend Folio and inject dynamic SEO meta data into pages
  • Spatie's Response Cache – to cache full-page HTML responses and drastically improve load times

With these packages in place, I was able to focus on the frontend. I built the UI from a modern TailwindCSS template, enhanced it with Blade components, Livewire for interactivity, and a light layer of FluxUI components for polish and structure.

Conclusion

Every project is different, and personal sites are no exception. For this build, scalability wasn’t the goal — speed, simplicity, and maintainability were. Laravel 12, Folio, and Sushi let me move fast without sacrificing quality. And with a few carefully chosen packages, I now have a performant, modern developer blog that feels like mine.

For a deeper look at the Markdown and Sushi content architecture that powers the articles section, see Blazing-Fast Blogs with Laravel, Markdown, and Sushi. The full developer environment setup — Herd, PHPStorm, Pint, Pest, and deployment tooling — is covered in The Complete Laravel Developer Toolchain for 2026.

FAQ#

Is Folio production-ready for a personal site?

Yes. Folio is battle-tested at scale — it powers Laravel's own documentation. For a personal site with dozens or hundreds of pages, file-based routing is simpler than route collections and moves faster than a traditional CMS.

What's the benefit of Sushi over a lightweight database like SQLite?

Sushi keeps your content version-controlled in git alongside your code. Content changes don't require migrations. You get Eloquent's API (pagination, queries, relationships) without the database operations—everything is in-memory arrays. For small sites, that's perfect.

Can Sushi handle thousands of articles?

Sushi loads all content into memory on every request (unless you cache it). For personal blogs with 100–500 articles, Response Cache handles the load. Beyond that, move to a proper database. The article reference covers migrating from Sushi to a database-backed model.

Do I need Pest and Pint if I'm just blogging?

For a personal blog? No. For a professional site or one you collaborate on, yes. The toolchain article explains when to add testing and linting—it's not required day one, but worth adding before shipping.

How do I keep my site fast as content grows?

Spatie's Response Cache caches full HTML responses. At deployment time, invalidate the cache so fresh content appears immediately. For search or filtering across many posts, consider adding a lightweight search library or moving to a database.

Steven Richardson
Steven Richardson

CTO at Digitonic. Writing about Laravel, architecture, and the craft of leading software teams from the west coast of Scotland.