Notes to self after I released a site using Claude AI heavily

Recently, I released a website, ogzkritik.com for the readers of the gaming magazine Oyungezer, which I contribute to as a writer. It’s basically a dashboard that indexes articles/reviews so you can easily find the issue number, score and author of the article you are looking for. Also, there are some fun stats with easy-to-use filters to mess with. Oyungezer has released the whole archive digitally but the ones until 2025 are available for free. OGZ Kritik takes an advantage of that so simply clicking the card will take you to exact issue that has the article you clicked on.

This site had existed way before, about 10 years ago I believe. The idea is not new but after seeing Claude improved itself massively, I decided to reawake the site because

  1. It didn’t look like a big project
  2. I wanted to try how leaning on AI plays out in a real-world project

Obviously the very first thing was to decide the tech stack and the architecture. As this was not a big project, I thought to handle everything in frontend, using Angular 21 with PrimeNG. As I started developing, I immediately realized that I had a huge knowledge gap for UX-UI design. I freaked out a little bit but then I knew the previous OGZ Kritik had an awesome design as well as custom icons created only for this site. So I reached out the creator on LinkedIn (I bought Premium just to text him lol) he was generous to share the whole source code, including icons with me.

Creativity Problems

That initially helped a lot. Now I knew what kind of design I was going to lean onto. But after some time, I saw that using the existing icons were not going to be enough. As an example, the main dashboard has different texts and icons compared to old version. That’s where the first AI tool, Gemini, came into play. It helped me to create similar icons with older ones. That took some time though as Gemini was so stubborn to exaggerate to what I prompted. Especially the fonts. Either I couldn’t manage to prompt correct or Gemini wasn’t designed that way, it didn’t generate an ideal font. So I used Google Fonts, found the appropriate fonts and pasted them into icons Gemini created (It is really good with icons). And then I used a site that converts jpegs into png (because Gemini didn’t create png even though I told it thousand times). Finally my icons were ready. It shouldn’t have been possible without Gemini, that is true.

The second problem with design came with the cards. What I mean with “card” is each card is basically a div containing article title, author, score if exists and the issue number. With this few information, it is impossible to make them look fancy. I should be having more information or image to make it fancy. The first prototypes were ugly as hell even though I tried to convince myself they were okey enough. But then the second AI tool popped up into my journey: Google Stitch. This is essentially Gemini for UX-UI designers. It’s still on beta (as of February 2026) but it genuinely surprised me with the ideas it provided. I ended up using one of them although partially.

Coding Became a Sprint More Than a Marathon

Then the coding part. Before starting on that, I knew I was going to store the whole data in user’s browser. There are ~14k items with as size of 600 KB. So not a problem. Also, as long as admin doesn’t update them, the app doesn’t make an additional request and uses the data stored in IndexedDB. Besides, I set up AWS Cloudfront with S3 as origin since the source data is stored in a S3 bucket. Performance was never a problem as there isn’t a dynamic data change or I needed to configure a stream solution.

Most of the implementation went with the tweaks and refactoring. I used Claude Opus 4.5 and Sonnet 4.5 within GitHub Copilot. While they are extremely good at implementing the whole thing, they are not so good at writing bug-free, reusable code. They handled some of the cases that might cause bugs beforehand but I had to check every time I generated something to make sure they broke anything. One regret here is that I should have generated sub-agents as well as a custom rules inside of MD file. Because for example, both Opus and Sonnet were so eager to use good-old ngIf, ngFor but dude get yourself together! They are not advised anymore so yeah I had to inform AI tools every time about that.

I was also surprised how these tools don’t create a shared method/function when there are duplicated lines. I had to specifically tell them to create a util class, extract duplicated lines etc. Last but not least, sometimes they used the longest solution even though there were easier ones. So you definitely need to observe and understand what they are doing and take an action when they go out of the way, which happens inevitably.

But all in all, these tools tremendously helped increase my speed. At some point, I felt like I’m on a horse galloping for 80 km/h without any security measures and I felt like I was out of breath. While this looks fun at first, it can be extremely dangerous if you don’t take it serious.

You might see that the site has cover images for each game that has been reviewed. This was the task that took way longer than I anticipated. The initial implementation was to match Steam appids with what we have reviewed. That itself took a really time because names in Steam wasn’t the same with our data verbatim. So I had to modify the game names, like removing special characters, changing Roman numbers into Latin numbers etc. Eventually I was able to match %64 of them but the problem was that Steam has several urls for vertical covers and not every game developer uploads their cover to each url. And the approach I used was designed only for one url. So the app couldn’t find some the images. Also, there are many non-Steam games such as Nintendo exclusives, old games and I had to find a solution to them as well.

Then with the idea of one of our writers, I switched to IGDB, which basically has every game with every DLC, expansion, updates etc. IGDB supports fuzzy search too! We had very few games unmatched eventually and manual modification would already solve them.

AWS Might Need Some Adaptions

As I teased a little bit above, I used AWS for basically every need. Amplify for web hosting, Route 53 for domain management, Cloudfront for caching, S3 for storing and Lambda for updating the S3 files. The Lambda part was tricky though. I used Python for IGDB integration and I had to add dependencies as Lambda Layer. It also has a 15 minutes timeout limit and IGDB script runs way more than 15 minutes.

The whole script were generated by Claude Sonnet 4.5, which was really good. But the configuration part had to be done by me manually as I didn’t use Terraform or any other IaC solution. It would have been easier to use Terraform or AWS SDK as I can now use generative AI to handle the implementation. It didn’t occur to me unfortunately but hey, the whole idea behind this project was to learn how it would go.

Final Words

This was an interesting experience. This was the first time that I used AI this much. While I will support and probably add new features into the app, I now know how it feels to lean entirely on AI tools. It’s fast and dangerous, but extremely useful in the right hands. So let me prepare myself for it.

Leave a Reply

Your email address will not be published. Required fields are marked *