· Laravel · Front end · Claude Code

What I am busy with: rebuilding this site with one stylesheet, one script and a live terminal

No framework, no build step, no tracking. Why a personal site in 2026 is a Laravel package with two static files, and how the terminal panel on the home page works.

This site used to be a single HTML file with 27 kilobytes of inline CSS and a particle canvas. It looked fine and nobody could change it without breaking something. The version you are reading is a Laravel library package: one Blade layout, one stylesheet, one script, mounted into a host application that serves a few of my domains from one small server.

Why a package and not an app

Every site I run shares the same host: one Docker Compose stack, one deploy pipeline, one set of backups. A site is a Composer package with a Route::domain() group, tagged by version. The host pins the tag in its lock file; a deploy is a push to main. The site cannot drift from what is committed, because the next unrelated deploy would put it back.

Why two static files

The terminal panel

The panel on the home page is not a video. Each scene is an array of typed lines (a prompt, a code line or a log line, with a class for the colour) and a few result rows that link to the section they belong to. The script types them with a delay, fills the progress bar, then rotates to the next scene unless you hover over it. The scenes are re-enactments from my own lab and projects with made-up hosts; nothing runs.

Adding a scene is adding an entry to one object and a button to one view. A test checks that every button has a scene. That is the whole content pipeline.

What Claude Code did

Most of the port was done with Claude Code: copying the theme from my company site, swapping the accent to the green this site had, writing the scenes, the CV print layout and the contact form, and taking screenshots in light, dark and phone width before anything deployed. I read every diff and changed what I did not like. The rule I keep: the agent proposes, the tests and I decide.

More notes: Strangler Fig in practice: what running two frameworks in one app taught me · all posts