← Blog

Surprisingly smooth website development with SvelteKit and Claude

7/6/2026

I was thinking of writing this one as a note, but there're too many thoughts, so this is here

Dream come true

I was thinking about my personal website for a long time. I could've build it using Webflow or Squarespace, but you know, I'm a software engineer after all. So I decided to do it myself fully from scratch.

Maybe that's a little overkill, but hey, it took me only two days from zero to a fully functional SPA. I guess, it was worth it.

Picking a framework

I worked with Vue3 and React through my entire developer's career, and I decided to try something new for me. I was watching Svelte for a long time, and when I started, I knew it was the right time for me to try it myself.

Svelte has one huge advantage in front of Vue or React - no virtual DOM. Having a compiler-first approach for such project seemed to me a huge win in terms of performance.

It's also, unlike React or Vue, pure HTML. That's when I felt that web development finally feels right. Alongside with Tailwind it was simple and efficient, like when you only start learning how web works, but the final result seemed already complete from the beginning.

I also want to admit that embedded web server is kinda new to me, as I used to deal with web apps through a separated client-server architecture, but this approach showed a good side in terms of development speed.

I decided to use Bun as a runtime because, you know, I really love Bun. As I think, it gave me some additional points in overall app performance. Moreover, using it with Drizzle ORM and pgvector for FTS felt amazing. My entire server side is literally thin and efficient.

Orchestrating the process

I've started Saturday with an initial project scaffolding, server-side with Drizzle and a small docker-compose.yml for infra. Then I created ARCHITECTURE.md with my end goals and the final vision of the app.

After that, I pointed Claude Code to it, asked to review the plan and correct it or add something useful that I could forget. And this is where the magic started to happen.

Within the following two hours we've built an auth for admin panel with main APIs for Blog, Notes and Projects. This was quirky at the beginning because I had to manually fix many deviations from the original goal, but at the end of this two hours Claude grown a little in context and became much more precise.

The next day I've started to build features around the sceleton, and Claude already started performing much better than before. There were moments when I didn't have to change anything.

At the end of the day there was already functional SPA, but it was lacking the style, so I sat down and played a little with styles. Thanks for SvetleKit templates, it was easy and fast.

This time, the app was ready to become live.

Handlling the deployment

I could have done it much faster, but that's not my way. I've started to prepare my app for k8s deployment. Created a Dockerfile, wrote helm charts for infra and the app itself, added GitHub Action for an automatic image building and pushed it. After a few fights with Prettier and ESLint, image was ready for deplyoing.

Now this would be useful for everyone self-hosting something on a Windows machine. I used Docker Desktop's Kubernetes features with kind bundled alongside with external kubectl and helm. After a couple of tweaks with DB code, it finally went live. At first, I wanted to use ingress as a proxy manager, but it didn't go well as long as I already had Nginx Proxy Manager dealing with the same task for my other services. And I decided - screw ingress, let's just use NPM. Yes, that seems kinda wrong in terms of the whole deployment architecture, but I refused spending a couple of hours to adapt it. I just reused already set up tool, and it worked amazing.

Finishing the job

SPA is live, everything is amazing, but still there was something to improve. That's where I tried to use Claude Code GUI instead of CLI for the first time. And I was shocked: I didn't knew it can be so useful for the frontend development. With Claude Preview capabilities it saw the whole process like I saw it and reacted instantly.

So I've landed some improvements for app's responsiveness, slightly improved the design for the light theme (I don't know if someone still uses it, but it should be added for the completeness) and landed the full internationalization: not only the static text is available in English and Russian, but all the dynamic contents too!

And after that, with the feeling of a full accomplishment, I've deployed the latest build, leaned back in my chair and realized that I've just built one of my long-term dreams in only two days.

Summing up

  • I'm starting to feel that I've got my new blue-eyed boy in the face of Svelte.
  • I'm excited with the new Claude Sonnet 5 as it now feels more optimized in terms of tokens burning and the enlarged context windows (1M feels as a really big leap forward after 200K)