Introduction
Time and time again, I try to run more or less structured blogs. The last one was with WordPress and actually had more functionality than expected - but there was no content. Now I'm committing to writing blog entries more regularly than before, starting with today's post, focusing on AI tools and code generation.
Today I modernized the entire website with Claude Code: added SEO meta tags, implemented PWA functionality, integrated i18n for German/English, completely redesigned the CV (from two-column to modern card-based single-column layout), and generated a mini Python script that creates blog entries from Markdown files. The website is now 100% static - no backend, no database, no security risks.
The Good
A few instructions and boom, everything worked and the website was updated. The blog generator is elegantly simple: Markdown files in blog_entries/en/ and blog_entries/de/, frontmatter with title and date, and python3 generate.py generates static HTML pages with automatic translation linking. No WordPress, no PHP, no security vulnerabilities - just static files.
The CV redesign from the old two-column view (which didn't work on mobile anyway) to modern cards with skill tags instead of questionable percentage bars looks really good. The i18n integration works seamlessly with browser language detection and localStorage for user preferences.
The Bad
There was a bug in the mobile version - the navigation alignment was off. The hamburger menu was completely off-screen, and by the time the prompt was precise enough for Claude to understand the problem, I could have solved it myself. It took several iterations with different CSS approaches (Flexbox, then absolute positioning, then Flexbox again with different properties) until I explicitly said "use maybe icons only in the menu for mobile" and Claude finally simplified the entire top-bar approach: just the hamburger button on top, everything else in the dropdown.
Claude also sometimes suggested solutions that didn't really address the problem - "try this CSS" without understanding why it was off-screen. The classic "let me try something else" instead of "let me understand the root cause". A screenshot would have been helpful in such cases, but that's not possible.
The Ugly
Tokens and User Limits: Especially with Claude and the latest 4.6 model, you hit the limits very quickly. It's a bit like "Free to Play" games - you're tempted to buy more tokens. A session with multiple redesign iterations, blog generator development, and mobile debugging easily consumes 100k+ tokens.
Context Compression: After a while, old messages get compressed. Claude "forgets" details from earlier steps. I had to explain multiple times that the hero section should be completely hidden on mobile, not just scaled down.
File-Read Hallucinations: Claude sometimes claimed to have read files or knew about content it hadn't actually read. With generate.py, I had to explicitly say "read the file first" before it could edit, otherwise I got "File has not been read yet" errors.
Over-Engineering Tendency: Claude initially wanted to build a complex blog system with separate index pages per language and fancy navigation. I had to say "keep it simple" multiple times - in the end, it's a 150-line Python script with Jinja2 templates. Sometimes less is more.
Inconsistent Tool Usage: Sometimes Claude uses Bash with grep instead of the Grep tool, even though it's explicitly stated in the instructions. Or tries to work with find instead of Glob. This leads to unnecessary detours.
The "Let me..." Syndrome: "Let me read the file", "Let me update the CSS", "Let me verify" - a lot of announcing instead of just doing. With 30+ tool calls, this adds up.
Conclusion
Despite the limitations: The website is modernized, the blog works, and I now have a setup I can actually blog with. The Python script is maintainable, the structure is clear (blog_entries/de/ vs blog_entries/en/), and the generated HTML pages are clean.
Would I do it again with Claude? Yes, but with more structure: First clarify requirements, then break into smaller tasks, and debug CSS problems myself earlier instead of wasting 10 iterations with the AI.
What I still need to learn: Optimize Claude usage to waste fewer tokens. That means: Feed the right things into context (not everything at once), use skills correctly (instead of doing everything manually), and maintain CLAUDE.md properly so Claude knows the project structure next time. Today we burned 100k+ tokens - probably could have been half with better preparation.
The most important thing: The site is now static, secure, and maintainable. No WordPress that can be hacked. No PHP that needs updates. Just HTML, CSS, and JavaScript. And that's exactly how it should be.
Code on GitHub: If you want to check out the whole setup - the complete website code including blog generator is on GitHub: github.com/tobiwan88/trmk. Feel free to browse, suggest improvements, or use the setup for your own static blogs.
Next Post: Let's try to generate an embedded project (weather station) with Claude - the attempt with Cline was less successful a few weeks ago.