brunzelBrain Dump Deutsch

This website

brunzel.info

How this blog is made: a home-grown generator, posts written in Markdown, hosting in my own homelab, and Claude as a co-worker who writes posts, updates projects and publishes them, all from a chat.

Home page of Brunzels Brain Dump with the headline “Prompts, patches and private projects.”
This websitelive, still growing

Until November 2026, brunzel.info was a WordPress blog. Next to it sat a separate site for my AI projects and two stand-alone project pages: three designs and three places to keep up to date. Now it’s all one website, and I no longer touch an admin panel. I tell Claude in a chat what should happen.

The idea: sign-off

All my projects work the same way. An AI produces something, and I check it and either sign it off or bin it. That’s exactly what the site looks like: a light table with contact sheets. Images sit in film frames, and decisions are marked next to them in grease pencil. A circle means signed off, a tick means done, a stroke means rejected. Each project has its own pencil colour: red for the music video, blue for NCC, green for Halle 77 Drive.

Headings are set in Anybody and body text in Literata. Both fonts are served from my own server, so nothing is pulled in from Google or anyone else.

A post in the sign-off design, with its cover image in a film frame
Fig. 1A post with its cover

No CMS, just a generator

The site is a small Python program that turns text files into finished HTML pages. There’s no database, no login and no plugins, so there’s nothing to hack and nothing to patch.

  • Every post is a folder holding one Markdown file plus its images, videos and audio.
  • Images are converted to AVIF and WebP in two sizes during the build.
  • A post can sit in several topics: AI projects, tutorials, homelab, games, music, general.
  • A post dated in the future only appears once that time has come.
  • Everything exists in German and English. If the English version is missing, the page shows the German text with a note.
  • Search and the RSS feed work without any third-party service.

The project sections read their data straight from the projects themselves. When I add a diary entry in the music video project, it shows up here after the next build.

The projects overview with the contact sheet and one proof sheet per project
Fig. 2Projects overview

Where the site lives

The source code sits in a private repository on GitHub. A Gitea instance on my Unraid server keeps a copy as a backup at home.

The site itself is served from a small Linux container on my Proxmox server. Caddy runs inside it as the web server, with a reverse proxy in front that takes care of HTTPS.

The container builds the site on its own:

  1. Every 15 minutes it checks GitHub for changes and rebuilds if there are any.
  2. Every night at 00:01 it rebuilds no matter what, so scheduled posts go live right at midnight.
  3. Each new version is fully checked first, every link and every image. Only then does the site switch over. If something fails, the previous version stays online.

How Claude helps

I don’t work on the site in an editor. I work in a chat with Claude. For example, I write “Update project Warum”. Claude then looks at what has happened in the project, writes a post about it in German and English and shows it to me. Once I approve, Claude puts it on GitHub, and fifteen minutes later it’s live.

To make that work the same way every time, there’s a skill for it: a fixed set of working instructions for Claude. It covers how a post is structured, which topics exist, how translations are done, and that nothing goes live without my okay.

Cheat sheet: telling Claude what to do

These sentences are all it takes in a chat inside the website project. Claude always shows me a draft first and only publishes after I say okay. I write in German, so the examples below are translations.

I write What happens
“Write a blog post about …” A draft in German and English, with topics and a teaser. I attach images or point to the folder.
“Update project Warum” (or NCC, Halle 77 Drive, brunzel.info) Claude checks what has happened in the project, updates the project page and writes an update post.
“Create a new project: …” A new project page with its card in the projects overview.
“Translate every post that has no English version yet” English versions, collected for review.
“Publish the post on 20 November at midnight” The post gets that date and appears on its own.
“On the hardware page, change …” The page gets updated.
“Publish right away” Claude skips the review. Only to be used when I’m sure.
“What’s still on the to-do list?” Claude reads out the open items.

Good to know:

  • After my okay, a change is live within 15 minutes.
  • For project folders on my PC, the Claude app has to be running on that PC.
  • Every image gets a description. If I don’t provide one, Claude suggests one.
  • Claude doesn’t make things up. If something is missing, Claude asks.

Moving out of WordPress

The move from WordPress ran through an import script directly on the server: every post and page, with images at full size, plus videos and audio. Old addresses permanently redirect to the new ones, so links from elsewhere keep working. Embedded YouTube videos are now plain links, so reading a post doesn’t set any third-party cookies.

Still to come

  • English versions of all posts
  • Legal notice and privacy policy
  • Project figures that update themselves

Updates from the blog

  1. #1110 Nov 2026

    brunzel.info: A new project overview, a header image that grows along and a changelog

    Three projects turned into six, and the projects page wasn't coping well. So now there's a new overview, a header image that assembles itself, a legal notice and privacy policy, and a changelog for every change.

Changelog

Every change in one line. Bigger changes get a post of their own.

  1. New post: seven YouTube Shorts in 46 minutes, built by an AI in DaVinci Resolve. Read the post
  2. Vertical videos in posts now appear as a grid and can have a preview image.
  3. New project overview: two columns, one large image with three small ones below for each project, own pen colours for the new projects. Read the post
  4. Changelog on this project page: every change to the website is listed here from now on. Read the post
  5. Legal notice and privacy policy in German and English, linked in the footer of every page.
  6. The header image of the projects page is now assembled automatically from images of all projects. When a seventh project arrives, the oldest one drops out. Read the post
  7. New project: the music video “Alarm im Darm”.
  8. Projects can now appear as “Coming soon” for a while: greyed-out card, page reachable by direct link only. First example: JENSEITS DES SYSTEMS.
  9. New project: the music short film “JENSEITS DES SYSTEMS — Journey to Grünland”.
  10. The render time chart on the effort page of “Warum machst du das?” is now interactive and includes the second lip sync attempt.
  11. New post: ComfyUI render times compared. Read the post
  12. First project update on the new blog: “Warum machst du das?”, lip sync take two. The effort page shows estimated Claude usage separately from measured values. Read the post
Older changes (5)
  1. All posts and pages are now also available in English.
  2. Project page about this website itself, with a cheat sheet for maintaining it via chat.
  3. All posts from the old WordPress blog imported and tidied up. Old addresses redirect to the new ones.
  4. The website runs in my own homelab and rebuilds itself after every change.
  5. New blog with its own generator: posts in Markdown, categories, search, RSS, scheduled posts and the AI projects under one roof.