I wanted a small place of my own again: somewhere to explain what I do, collect the occasional note and make it easy for people to say hello. Not a constantly outdated portfolio, a news site or an elaborate personal brand. Just a useful webpage where I can explain what I'm currently working on.
Getting it online was a breeze, using AI to get everything set up, reviewing the code and pushing everything to Git and seeing it live in a couple of days.
I must say, developing webpages has gone from months of designing, coding and setting up the infrastructure to be able to ship a idea in just a few days.
What is here
The front page introduces me and the work I do, the Skills page covers the ground I work across, from interface design and application development to databases, cloud services and the servers underneath.
Notes is where shorter pieces like this one will live. There is no content calendar and no promise that I will publish every week.
And Contact does what it says. Questions, comments and friendly hellos are all welcome.
Giving the logo a little life
The most enjoyable visual experiment was animating the JKRB mark.
The logo consists of two geometric pieces, which made it tempting to pull them apart, let them move independently and bring them back together in a new form. I used Higgsfield and Kling to explore that idea with a series of carefully prepared start and end frames.
The pieces separate, move through thin streams of light and reconnect as a hexagon before returning to the familiar mark. It took a few attempts to keep the geometry recognisable and the movement restrained. Generative video has plenty of ideas of its own, not all of them helpful when you are trying to protect the shape of a logo.
The finished animation sits quietly behind the main introduction. There are separate compositions for wide and vertical screens, along with lightweight poster images for the moment before the video is ready. If your device asks for reduced motion, the video stays still.
It is a small detail, but it gives an otherwise very clean page a bit of energy.
Building it with an AI coding agent
I built the site alongside an AI coding agent, working through a series of focused sessions.
The agent helped with implementation, testing and the many repetitive details that tend to accumulate around a web project. I supplied the direction, made the design and architecture decisions, reviewed the result and changed course when something did not feel right.
Each session ended with a short written log of what changed and why. That turned out to be useful. Even a small project becomes easier to reason about when it has a memory beyond the code itself.
AI is getting really good at coding - as long as you review the code and guide it back on track when the hallusination sets in.
A deliberately small stack
The site is built with Nuxt, Vue and TypeScript. Pages are rendered on the server, Notes are written in Markdown, and MariaDB stores the content and contact messages.
There is a small administration area for writing and previewing notes, managing media and reading messages. Uploaded media can be stored in DigitalOcean Spaces, while the public site stays independent of a large publishing platform.
Everything runs on a DigitalOcean Droplet as a Node process behind nginx. PM2 keeps the application running, nginx handles TLS, static assets and proxying, and deployment is triggered with a single command from my laptop.
It is not an exotic architecture, and that is intentional - but it works!
A personal website does not need a cluster of services merely to prove that its owner knows how to operate one. For this job, one small server, one database and a setup I can understand from top to bottom is a very good fit. Super easy management.
The quiet details
Some of the work I enjoyed most is easy to miss.
The “since 1998” text in the introduction opens a counter showing exactly how much time has passed. The nearby Iniquity BBS link opens a screenshot from where some of this began.
Keyboard navigation has a visible focus state. The page retains its core content when JavaScript is unavailable. The animated elements respect reduced-motion preferences, and videos stop playing when they leave the screen.
Analytics is optional and stays unloaded unless the visitor allows it. The contact form has deliberately quiet protection against automated abuse, without asking people to identify traffic lights or decipher distorted letters.
None of these details is the headline feature. Together, they are what make a small site feel properly finished.
What comes next
Mostly more notes.
I already have a few subjects in mind: using AI tools in a real development workflow, designing interfaces for dark surfaces, operating small services without unnecessary complexity, and some of the systems I work with at Bildusjen.
For now, I am pleased simply to have jkrb.com running again—and pleased that building it was as enjoyable as I hoped it would be.
If you want to follow future notes, there is an RSS feed.
Thanks for stopping by.