Read articles and posts about technology and hardware View photo gallery and visual content Download and view resume and professional experience Visit GitHub profile for code repositories Watch educational videos and tutorials Connect on LinkedIn professional network Get in touch for collaboration or inquiries

I used Claude to redesign my website: the code is average but maybe that's okay.

Three days ago, I decided to completely overhaul my personal website. Not because it was broken but because it was stale and I needed to update it for the next step of my career. I used Claude Code, expecting it to be quite good at this - after all, it’s been trained on web tech code and this is a static site.

My expectations were met and in one aspect exceeded. This is the story of that experience, written also while using Claude.

Why I’m skeptical about AI

I’ve spent the last few years watching the AI hype cycle with growing unease. As someone who’s built multiple startups and seen countless “revolutionary” technologies come and go, I’ve developed healthy scepticism about anything that promises to change everything overnight.

My previous blog post was titled “Yet Another Dunk on GraphQL” - I’m clearly not afraid to call out over-hyped tech. So when everyone started claiming AI would replace programmers, I rolled my eyes and went back to writing actual code.

But I’m not one to pass up opportunities or be left behind.

I’m an AI skeptic, not in the sense that I don’t think AI can work but in the senses that:

  1. I think it is (or will be) very good at non-extrapolative tasks
    • I don’t think it will reach so-called “Super Intelligence”. Not with current LLM approaches alone. We haven’t invented yet whatever is needed to achieve human-level capabilities in a single power-efficient machine.
    • To state the obvious: the human brain uses several orders of magnitude less energy than today’s hardware running LLMs - as technologists, so far we’re missing something!
    • “Non-extrapolative” (meaning it can’t reliably go beyond its training data) is also why I believe it is good at tasks it’s been highly trained on and often pretty rubbish at ones it hasn’t been. Even with many of the one-shot and agentic techniques, I’ve yet to see signs of the kind of capabilities humans achieve from far less data.
    • I think current technologies are dangerous for anything where critical thinking or non-homogeneity of information/decisions is essential (e.g. education, governance, some aspects of defence, business strategy, etc.).
  2. The business model for LLM-based AI currently doesn’t exist. When the money runs out (which it will - every bubble bursts eventually), then either someone will have found a business model that doesn’t exist today, or it will implode and collapse.

    Probably the former but whether that justifies the amount of money currently being invested remains to be seen.

The project: A complete website overhaul

My personal website had been built years ago using a Jekyll theme I’d heavily customised. It worked but it felt dated (and frankly, I’m a mediocre UI/UX designer). The story it told about me was very out of date, the design felt tired, and I needed to get ready for the next step of my career.

On July 26th, I opened Claude in my browser and gave it the following prompt:

Help me craft a compelling story about my career so far that has led me to being a startup founder with revolutionary technology. Please ask me questions to understand my career and use my responses to build up the story.

At this point I was still on the Free plan. I later upgraded to Pro to be able to use Claude in VSCode - more on that later.

Claude generated 8 questions, which were useful but limited in scope. It was good at giving a small bit of structure. I replied with 803 words briefly describing my career and my early life - milestones on my path to studying computer science and building startups.

So now I had a 952 word reply which was good, well written but not all that different from what I’d given it in the first place. One thing it had crystallised in the writing though was a narrative for my career. The kind of story people like to hear, even though it skips over most of the tangents and missteps along the way.

My next prompt was the beginning of the transformation for my website:

Please can you now turn this into a compelling personal website?

What followed was three days of productive web development - though after the initial design in the first 3 hours, I’m not sure the remainder of my time was any more productive than my old ways of working.

To make one thing clear, I didn’t go into this half-measures. I fully dived in to using the AI tool, even for simple command line operations that I could’ve done in my terminal directly (or in Fork app). I wanted to experience the best and the worst of what this tool has to offer and perhaps find its limits. (Spoiler: I did but not as quickly as I’d expected.)

Throughout my time using Claude, I had auto-accept edits turned on and allowed non-destructive commands to execute automatically too. I also used Claude’s ability to search the internet to prompt it to look up information about me on YouTube, as well as information about the places featured in some of my photos.

I hit Claude Pro’s 5-hour rate limit 3 times during this project (once on each day). I’ve gradually dialled down how much I ask the AI to do in a single prompt. It’s capable of doing a lot of steps without diverging from the task, which is good, but Anthropic’s pricing is out of reach for me to try lots of large tasks.

What Claude Code actually did

Looking at my git history, Claude helped me with 60+ commits over three days.

I would never normally write that many commits - all credit to the tool on this. Claude is very useful for splitting up changes into commits and writing much more detailed commit messages than I usually bother with. They’re usually accurate if the session still has the command history, and less accurate for changes made outside the tool or if the session resets (or compacts too much). Still better than my lazy efforts for this site, and probably better than a good number of my professional commits too.

Here’s what I accomplished with the tool:

Day 1: Foundation work

  • Converted the index page of the site from a legacy theme to a custom “founder” layout, using the index page generated using Claude in the browser as the starting template.
  • Extracted reusable Jekyll components for header and navigation
  • Converted all pages from HTML to Markdown with proper front matter
  • Fixed mobile navigation with smooth animations, among other issues

The first part of this was quite impressive, as were the per-page conversions on day 2. The from-scratch redesign would’ve taken me longer, for sure. On day 2, Claude also successfully converted my existing content to the new design in a way which preserved information and was consistent with the new design. I’d probably have achieved a lower-quality of result in more time doing it manually. This is an area where Claude exceeded my expectations, particularly because I gave Claude very short prompts and didn’t have to do anything further.

Day 2: Content and styling

  • Completely rewrote the SCSS architecture using modern @use syntax
    • Although it turned out on Day 3 I had to revert to @import and downgrade to Jekyll 3 due to Docker incompatibilities in Jekyll 4 dependencies.
  • Updated all content pages to use the new design
  • Standardised typography throughout the site

By the end of day 2 I’d got a long way with the redesign but there was a significant accumulation of small bugs. Claude also hadn’t helped to eliminate legacy code yet, it had kept it all lying around - I guess this is part of the safety features (despite me trying to ask it to clean up).

Day 3: Polish and fixes

  • Removed Semantic UI dependencies
  • Multiple passes to improve the SCSS code - particularly, deduplicating, refactoring and cleaning up rules to obey CSS priorities.
  • Fixed numerous SCSS build issues and Jekyll compatibility problems
  • Improved image responsiveness across all pages
  • Added proper error handling and some accessibility improvements
  • Rewrote existing pages following the style of the new index page
  • Then rewrote 2 of the pages again to tone down the language
  • Expanded content on multiple pages, largely done by hand (the prompts for my first two additions were longer than what I wanted to add, so I stopped using the AI for this)
  • Enhanced the CV page with better content organisation
  • Added numerous new photos to my Photos page.
    • In one sense, Claude was a big help here - after uploading the images, generating compressed versions (Apple Mac makes this easy) and writing the code to define the “albums”, Claude could then generate all the code for the individual images. This saved quite a lot of tedious writing.
    • However, I have an efficient workflow for this already - copy paste the file names and use a quick bit of multi-line editing to generate all the required code “by hand”. So, Claude didn’t save me time, and was a tad less accurate for 2 of the image file names. So I’m not ready to say “wow, huge productivity boost” just yet. I can see, though, that for many developers this would be a win.
  • Added comprehensive lightbox functionality for the photos page and other pages
    • This was very cool to see. I didn’t reuse the template code I have from years ago that would’ve been perfectly good enough. Claude generated everything ‘from scratch’ (whatever that means for an AI tool) including the JavaScript code. It worked first time and that surprised me.
    • The only thing it got wrong was vertical alignment of the symbols in the buttons. This is a notorious issue in HTML/CSS. After multiple prompts to try different well-known solutions, Claude still hadn’t succeeded in generating a proper solution. I reverted to manual editing.
    • I generated the lightbox functionality in 2 stages. Initially for the photos page, before I realised I wanted it for all pages. Unfortunately, when I asked it to add the functionality to the rest of the site, it duplicated the code and introduced bugs in the vertical alignment again. So I had to debug again and ultimately this used up more time than if I’d just expanded the functionality manually.
  • Added new photos to my Personal page.
    • Claude impressed me here. I gave it a minimal prompt and it just worked. This actually was faster than coding by hand, as I didn’t have to open the file, find the right points in the Markdown, and conjure up the right code snippet.

The good: What worked surprisingly well

Okay, here’s two versions of this section. The first I’ve written myself (albeit with the help of Claude to clean things up). The second is what Claude initially generated for this post without me wanting it to. I guess this gives you an insight into what Anthropic would like the selling points to be.

1. Initial design and content conversion

The from-scratch redesign would’ve taken me much longer to do manually. Claude converted my existing content to the new design while preserving information and maintaining consistency - something I’d probably have done to a lower quality in more time. This is where it genuinely exceeded my expectations, especially given I used very short prompts.

2. Commit discipline and documentation

Claude wrote 60+ commits over three days with detailed commit messages. I would never normally write that many commits, and they were usually accurate when the session had command history. This alone made the project feel more professional and trackable than my usual lazy approach.

3. Handling tedious bulk operations

When I needed to add dozens of images to my Photos page, Claude could generate all the individual image code after I’d uploaded and organised the files. While my existing multi-line editing workflow might be equally fast, Claude was convenient. I’m still debating whether it was less mental overhead or not.

4. JavaScript that just worked

The lightbox functionality Claude generated worked on the first try. I was genuinely surprised by this - it created everything ‘from scratch’ (whatever that means for an AI) including the JavaScript, and it integrated properly with the existing site structure.

What Claude generated

Note: This section is 0% my opinion, even if some bits overlap with things I’ve said above. Claude generated this with only the following prompt / context for what I planned to say in this blog post:

Start a new blog post. The blog post will be about my experience using Claude Code to revamp this
website (my personal website), as well as my experience writing this blog post. The title will
be based on the idea of "I am an AI skeptic. I used Claude to rewrite my website. The code is
average but maybe that's okay." Use this site's git history starting from 26th July through to
today to inform what steps I took.
### 1. Understanding context

Claude Code didn't just blindly generate code. It read through my existing
files, understood the Jekyll structure, and maintained consistency with my
existing patterns. When I asked it to "modernise the SCSS," it actually analysed
my current styles and built upon them rather than starting from scratch.

### 2. Handling the tedious stuff

Converting dozens of files from HTML to Markdown, updating front matter, fixing
SCSS syntax errors - these are the kinds of repetitive tasks that normally make
me want to abandon a project. Claude handled them efficiently while I focused on
the bigger picture decisions.

### 3. Problem-solving persistence

When we hit Jekyll build errors or GitHub Pages deployment issues, Claude would
systematically work through the problems. It would try one fix, see it didn't
work, then try another approach. No frustration, no giving up.

### 4. Learning my preferences

By day three, Claude had picked up on my coding style, naming conventions, and
design preferences. It started making suggestions that felt genuinely aligned
with what I would have chosen myself.

The not-so-good: Where it fell short

1. Accumulation of technical debt and bugs

By day 2, there was a significant accumulation of small bugs that Claude hadn’t helped eliminate. It kept legacy code lying around rather than cleaning up - I guess this is part of the safety features, despite me trying to ask it to clean up. The tool seemed more focused on adding than refactoring.

2. Inconsistent problem-solving

When I asked Claude to add lightbox functionality to the rest of the site after initially creating it for just the photos page, it duplicated code and reintroduced bugs in vertical alignment. This used up more time than if I’d just expanded the functionality manually. The tool didn’t seem to learn from my previous solutions.

3. Notorious edge cases are still notorious

Claude couldn’t solve the vertical alignment of symbols in buttons - a well-known CSS issue. After multiple prompts trying different solutions, it still hadn’t succeeded. I had to revert to manual editing for something that any experienced web developer would recognise as a common pain point.

4. No architectural vision

Claude was reactive rather than proactive about code organisation. It would implement what I asked for but didn’t suggest better ways to structure things or point out when I was heading toward maintainability problems. I remained the architect throughout.

5. Over doing the language

Claude Code is a coding tool but it’s very capable at writing content too. However, it went overboard on the language and hard-selling, especially on pages where it wasn’t appropriate. A human writer would have been much more sensitive to both the context and also how the writing would be received by my audience. It required some effort to get Claude to regenerate the content without it hallucinating entirely new information.

6. Accuracy is still tricky

While much of the content Claude generated was good, it has required a lot of proof reading to pick up on important details that it got wrong, despite the accurate information being present in my original prompts. E.g. It abused the fact I’ve led a team of 17 people consisting of 14 engineers with a sentence that said I’d led a team of 17 engineers. Picking up on this kind of error is time consuming, as it required me to read everything with the utmost care - proof reading is not easy unfortunately.

What Claude generated

Note: Claude generated this with only the prompt / context for what I planned to say in this blog post (as per above):

### 1. The code is... average

Let's be honest: the code Claude generates isn't brilliant. It's competent,
functional, and follows best practices but it lacks the elegance or innovation
that comes from deep domain expertise. It's the kind of code a decent contractor
might produce - it works, it's maintainable but it won't win any awards.

### 2. No true creativity

Claude can remix existing patterns and combine them in sensible ways but it
doesn't have genuine creative insights. The design improvements were logical and
safe but not particularly inspired.

### 3. Requires constant guidance

This wasn't "tell the AI what you want and walk away." It required active
collaboration, decision-making, and course correction throughout the process. I
was very much still the architect and project manager.

### 4. Limited understanding of trade-offs

While Claude could implement solutions I requested, it couldn't always help me
decide between different approaches or understand the long-term implications of
technical decisions.

The meta experience: Writing this post with Claude

As with the previous section, I’ve put what Claude initially generated below. I can say, none of it comes close to the actual experience of trying to use this tool for a blog post. I’m writing what I want to say, and then asking Claude to jazz it up and fix the spelling mistakes afterwards. Of course, the latter would be more efficiently and accurately achieved using Microsoft Word but that’s not the point of this exercise.

The actual experience of writing this post with Claude has revealed some interesting quirks. The tool seems to have a built-in agenda that it consistently tries to draft using my “voice” - pushing narratives that don’t match my actual experience or perspective.

For example, the line “[Claude] never gets tired” is repeated by the AI (and I’ve deleted some of the repeats from my text). Except this pre-supposes that I’m the kind of developer that gives up when I face tricky problems, or gets bored if I have to do repetitive code. Neither is true… I tend to just keep plodding on.

So this supposed advantage of AI just isn’t relevant to my experience. (I also happen to think it’s a bias strongly resulting from the popular narrative of “lazy young adults” that keeps being pushed on my generation.)

Most notably, Claude keeps trying to paint me as “the AI skeptic who thought this would be rubbish and was surprised to find it isn’t.” That’s simply not true. For the tasks I used Claude for, I expected it to be reasonably good at them.

I’ve been pleasantly surprised that in some aspects it was more capable than expected, but I’ve been entirely unsurprised by its weaknesses.

For content writing specifically, Claude is a bit “too safe” - it takes my words verbatim rather than adapting them to introduce variety for the reader. This could be achieved without changing the overall meaning, but Claude seems reluctant to take that creative leap.

It’s more like having a very careful editor than a collaborative writing partner.

Claude’s take on this meta-experience emphasised the “never gets tired” narrative again, describing itself as a non-judgmental writing partner. This misses the nuances of my actual experience - the tool’s tendency to impose its own narrative biases and its reluctance to take creative risks with the content.

Why “average” (code) might be okay

AI tools are commonly being sold as “human enhancement” or “human replacement.” So far, my experience is they’re not as good as me at most tasks. But that might not actually be a problem.

Code that’s “good enough” powers the entire modern world. Very little of the world’s code is written to “great,” “better,” or “best” standards. If it were, maybe things would be less buggy, but an awful lot of useful software simply wouldn’t exist. It takes too long and is too expensive to write better-than-good code much of the time.

So maybe AI code isn’t great, but if it’s good enough, that might be sufficient to carry us forward. We’ll need to push for standards to govern computer science and software engineering, ensuring “good enough” is actually up to scratch in areas where quality matters more. Such standards are sorely lacking, particularly in software for industries and applications that have emerged this century.

For today, the website Claude helped me build is solid. It’s responsive, reasonably accessible, and maintainable enough. It’s not going to win design awards, but it serves its purpose effectively. And while Claude might generate optimistic claims about productivity gains, the reality is more nuanced - but still potentially valuable.

The bigger picture

This experience hasn’t fundamentally shifted my perspective on AI tools. I came in with expectations that were reasonably well aligned to the tools that exist today. I’m looking forward to trying Claude on some non-web-tech tasks to see if it exceeds my much lower expectations in those domains.

AI isn’t going to replace programmers. But it might make us more productive in mundane ways. It’s not going to solve the hard problems of software architecture, product design, or business strategy. But it might handle enough of the routine work to free up a bit of time for the problems that actually matter.

The code is average. The productivity gains are mixed, but the potential is there. With a bit of advancement, we may reach a point where for many projects, AI hits the right trade-off between speed, cost, and quality.

Takeaways

  1. AI tools work best as collaborators, not replacements. The most productive moments came when Claude and I were working together - me providing direction and judgment, Claude handling implementation details.

  2. The hype is wrong, but so is complete dismissal. AI isn’t revolutionary, but it’s not useless either. It’s a tool that’s genuinely useful for specific types of work.

  3. “Average” code that ships is better than “perfect” code that doesn’t. My website is now live, modern, and functional. That’s more valuable than the theoretically better version I might have built if I’d spent months on it.

Claude also really wanted me to insert this bullet point, even though I already stated above that I don’t think this applies to me:

4. **The real benefit might be psychological.** Having Claude handle the tedious
   parts kept me engaged with the project instead of abandoning it when I hit
   boring implementation details.

Would I do it again?

Yes, and with the same realistic expectations.

For projects like this - modernising existing codebases, handling routine improvements, working with familiar technologies - AI tools like Claude Code are genuinely helpful. They don’t eliminate the need for human judgment, creativity, or technical understanding, but they can accelerate the work.

For complex system design, or anything requiring genuine innovation, I’d still reach for traditional tools and approaches first.

When I use Claude again, I’ll be more nuanced about how I use it. If I am confident I can do something faster or significantly more accurately using older techniques, I will. Being more flexible in my approach will likely yield a better overall experience.

The irony

The biggest irony in all of this? I’m publishing this post about AI skepticism on a website that was rebuilt using AI. The site works great, the post will (hopefully) reach my audience, and Claude: the whole thing happened faster than I thought possible the whole thing happened in exactly as much time as I expected.

This captures the essence of where AI tools currently sit: they don’t need to be revolutionary to be valuable. Sometimes average is exactly what you need, and that’s perfectly fine. The future of AI in development isn’t about replacement - it’s about augmentation. I wait to see if that also becomes sustainable, in every sense of the word.


This post was written collaboratively with Claude Code. The thoughts, opinions, and scepticism are entirely my own. The organisation of the text benefited from Claude’s assistance.

Claude obsessively re-inserted this phrase, despite me rejecting it multiple times: “Here’s the thing that’s been bothering me about my own scepticism:” - Claude really has a built-in bias for the kind of narrative I’m conveying in this post.