← All posts

How muwamurad.com is built

A Laravel and Filament admin, two Next.js front ends, and a small job that keeps both up to date. Here's how the pieces fit together.

How muwamurad.com is built, cover

People sometimes ask what my own site runs on. The short answer: a Laravel API with a Filament admin, and two Next.js front ends that read from it.

The admin

Everything on the site comes from one admin: my profile, projects, experience, skills, posts and contact messages. It's Laravel with Filament, behind a two-factor login. I never touch code to change a line of text.

Two front ends

muwamurad.com is the simple site and 3d.muwamurad.com is the 3D one. Both are Next.js. Pages are built ahead of time and cached, so they load fast, and if the API ever has a bad moment, visitors still get the last good version of the page instead of an error.

Keeping both in sync

When I save something in the admin, a queued job tells each site to refresh the part that changed. Each site gets its own job, so if one is down the other still updates. Changes show up in a few seconds.

The small 3D touch

The object next to my photo is plain three.js. It only loads on bigger screens, after the page has settled, and phones get a still image instead. That keeps the page light: it scores 100 on Google's PageSpeed test on mobile.

Hosting

It all runs on one Ubuntu server behind nginx. A deploy builds a fresh copy next to the live one, switches over in one step, and then runs a list of checks. If anything fails before the switch, the old version just keeps running.