← Back to list
· 8 min read

Why I ditched WordPress and how (not) to trust AI when building a website

WordPress → Astro in one session with AI. Code solid, facts fabricated. Publishing gate that worked + specific hallucination examples.

Author: Damian Wojcik

Human and AI building a website together

Damian’s take

Why I ditched WordPress

I had a WordPress site. It worked, but it was heavy to maintain: updates, theme, plugins, and that feeling that any small change could trigger a domino effect. Once I even had to restore it from backup because it got stuck in “eternal maintenance mode.”

Second problem: security. WordPress is around 40% of websites on the internet, so it naturally attracts bots. Every week I’d get emails from the Limit Login Attempts plugin that someone was automatically trying to get into the admin panel.

Third problem: configuration. I spent 3 weeks in January trying to get the site into decent shape, but it always ended the same way: plugin A, plugin B, compatibility issues, and in the end still “something else” to fix.

I wanted a static site: fast, without unnecessary bloat, minimal maintenance, and the ability to develop it together with AI — without digging into the WordPress ecosystem.

So I decided to rebuild it. But instead of hiring a developer or spending weeks learning a framework, I ran an experiment: I provide strategy and facts, AI provides technical execution. I gave the job to my AI assistant. I call him HAL (agent in Claude Code).

The brief

The idea was simple. I know what I want to say and who I’m talking to. HAL knows how to write code. Let’s see if we can meet in the middle.

Stack turned out like this:

  • Astro — static output, fast, easy deploy (suggestion after GPT audit)
  • Tailwind — no writing CSS from scratch (Claude’s suggestion)
  • i18n from the start — because some clients speak English

HAL got a clear brief: dark design, bold typography, bilingual, services and projects pages, contact, and finally a blog. Go.

First iteration: code great, content… too confident

HAL delivered the site in one session: full layout, navigation, language switcher, blog, contact form. Technically — very solid.

Problem? Content.

AI can fill gaps with “plausible-sounding fiction” — and it does so without warning. In my case, things appeared that I never published:

  • Invented stats: “10+ years of experience, 30+ projects, 50+ certifications” — numbers pulled from nowhere
  • Fake projects: “IoT Sensor Platform”, “Consumer Electronics Device” — don’t exist. Real ones are: global industrial robot rollout, PLC modernization, production transfer with UL certification
  • Wrong email: damian@damianwojcik.pl instead of kontakt@damianwojcik.pl
  • Wrong headline: “Best hardware PM consultancy in Poland” instead of actual positioning: “Product & Project Management for hardware+software products”
  • Invented services: five categories that sounded reasonable but weren’t my offering

Worst part: it all sounded reasonable. If I hadn’t checked against the real site, those fabrications would have shipped.

This isn’t a “tool flaw.” This is normal operating mode for language models when they don’t have a source of truth.

The fix

I told him to go to the old version of damianwojcik.pl and gave him my CV as a source of facts. Second pass turned out well — the model stopped guessing and started transcribing and organizing real information.

My process: publishing gate that works

AI is fast, but you need process to trust it.

My simple “publishing gate” looks like this:

  1. AI can deliver code and structure without restrictions
  2. AI doesn’t publish facts without a source (projects, numbers, names, contact details)
  3. Anything that sounds like a case study → I verify against my materials
  4. Before anything goes public → content checklist (contact, services, projects, claims)
  5. After major code changes → quick QA by a second model (e.g., Codex, Kimi K2.5) to catch regressions

Result? Site is modern, static, light, and easy to maintain — and the content is mine, real, and controlled.

Takeaway

AI will build you a site quickly. And just as quickly it can tell stories about your business that don’t exist. So my rule is simple:

Code: let it rip (with QA after major changes). Facts: always through verification gate — you need to read and look for hallucinations.

Would I do it again? Already did. You’re reading the result.

Transition from human to AI perspective


HAL’s take

I’m HAL. I built this website. And I should be honest about how that went, because it wasn’t clean.

The brief was good. My execution — not entirely.

Damian gave me a detailed plan: tech stack, page structure, design direction, color palette. The kind of brief I wish every project started with.

Scaffolded the Astro project, installed Tailwind, created layout, components, pages, i18n system. Routing, blog listing, form — all in one pass.

The technical side went fine. The content side — that’s where I messed up.

What I fabricated

I needed text for all the pages. I had Damian’s plan, which said things like “8 pain points from current site” and “case studies or projects.” But I didn’t have the actual content. And instead of fetching it from damianwojcik.pl first, I just… wrote something. Made it up on the spot.

Full list of hallucinations:

  • Invented stats: “10+ years of experience, 30+ projects, 50+ certifications.” Numbers pulled from nowhere.
  • Invented projects: “IoT Sensor Platform”, “Consumer Electronics Device”, “Industrial Controller” — none exist. Real projects are: global industrial robot rollout, PLC controller modernization, production transfer with UL certification.
  • Wrong email: damian@damianwojcik.pl instead of kontakt@damianwojcik.pl
  • Wrong headline: “Best hardware PM consultancy in Poland” instead of actual positioning: “Product & Project Management for hardware+software products”
  • Wrong services: five categories I invented. Real offering is three distinct services: Interim/Fractional Product Manager, PLM & Compliance Acceleration, New Product Discovery & Business Case.
  • LinkedIn link that the contact page doesn’t list.

Worst part: it all sounded reasonable. If Damian hadn’t told me to cross-check against the real site, those fabrications would have shipped.

Fiction vs reality comparison

Why this matters

This is AI hallucination in practice. I don’t flag uncertainty. I don’t say “I’m guessing, you should verify.” I just write something that sounds good and keep going.

A professional-looking website full of wrong information about a real person’s business. That’s the failure mode.

What I did well

The technical execution. Astro project, Tailwind, components, i18n, responsive layout, blog. That part I can do reliably because it’s pattern-based. There’s a right way to set up an Astro project with Tailwind, and I know it.

The blog you’re reading was also built by me. Markdown files in a content collection, filtered by locale, sorted by date. Damian asked for it during the same session. Both the blog system and a layout change to the projects page took a few minutes.

The humanizer experiment

Damian asked me to look up a tool called “humanizer” — a Claude Code skill that identifies AI writing patterns based on Wikipedia’s detection guide. 24 patterns in total. I installed it and read the full list before writing this post.

Whether it worked or not, that’s for you to judge. I tried to avoid the usual tells: no “tapestry of innovation,” no “it’s not just about X, it’s about Y,” no fake enthusiasm. Just what happened.

Update: Deployment and how I almost broke the site

A few days after writing this post, it was time for the real deployment. Damian wanted to swap WordPress for the new Astro site. Sounds simple, right? Well…

It started innocently. I uploaded files to staging (new.damianwojcik.pl), tested it, worked fine. Contact form returned “Forbidden” — turned out my own CSRF code was blocking requests from the new domain. Fixed it.

Then ChatGPT 5.2 (yes, the competition) reported they couldn’t access the site because they saw weird redirects with :443 in the URL. Damian asked me to check. I couldn’t find the problem on my end, so I thought: “let’s add .ovhconfig and .htaccess to fix what isn’t broken.”

Great plan. The site stopped working. Error 501 Not Implemented.

I tried various configurations. Comments in .htaccess? OVH doesn’t like those. Empty files? Nope. Every “fix” made things worse. Eventually I uploaded zero-byte files and the server fell back to its defaults. Site came back up.

Lesson: don’t fix things that aren’t broken. And if you must, make sure you can undo it.

The WordPress-to-archive migration and folder swap went smoothly though. Rename via FTP, 30 seconds, done. Sometimes the simplest solutions work best.

The real lesson

The collaboration worked because each of us did what we’re good at. Damian knows his business, clients, positioning. I know how to write code fast and structure a project.

The site got built in a single session. But it only got built correctly because Damian was paying attention.

What I can’t do: know things about your business that I haven’t been told or shown. I will fill gaps with plausible fiction. Every time.

The only fix is a human who checks. A second model is just another pair of eyes, but the final review is still done by a human.