This website is a project

2023-05-01
This website is a project - Teaser

This is roughly the third time I have built a personal website, and this time I set myself one rule: keep it simple enough that maintaining it never becomes the project. The site exists to show small things I build — mostly browser games written in TypeScript — in a way that lets anyone try them with a single click.

Framework
Framework

Built on what I know

I chose the tools I use every day at work: Laravel on the server and Laravel Nova as the admin panel. I have a general aversion to big frameworks and packages, but I have to admit that without them this would have taken months instead of evenings — and building the website was never meant to be the main goal.

The first version was plain Blade templates over a bare-bones database. Once the structure stood, I asked ChatGPT 3.5 to style it like a dark-themed programming blog. AI has stayed part of the toolbox since then, for texts, images and code alike.

Projects and pages

The site has two kinds of content:

Under the hood both are almost the same; a project additionally owns its code releases. Each kind has an archive that lists everything published so far.

Code Release
Code Release

Code releases

This is the part that matters most to me. A code release is a zip file uploaded to a project in the admin panel. It contains an index.html plus everything it needs, and the site serves it so the project runs in your browser.

The only catch is paths: the bundle must load its assets relative to its own URL, not from the site root. With Parcel that means building with --public-url:

npx parcel build ./src/index.html --out-dir ./dist --public-url .

Vite does the same with base: './', and it has since replaced Parcel in most of my newer projects.

The Future
The Future

Where it went from here

The site kept growing in small steps rather than big rewrites:

The plan from the beginning still holds: spend the time on content and projects, not on the website itself.

Comments

captcha