Building a Modern Website with SvelteKit
Building a Modern Website with SvelteKit
When it came time to rebuild my personal website, I had plenty of framework options. After evaluating Next.js, Nuxt, Astro, and others, I landed on SvelteKit — and I couldn’t be happier with the choice.
Why SvelteKit?
SvelteKit brings several things to the table that clicked with what I needed:
1. Svelte’s Reactivity Model
Svelte 5’s runes ($state, $derived, $effect) offer a clean, explicit reactivity model. No virtual DOM overhead, no hooks rules to memorize — just straightforward reactive code.
let count = $state(0);
let doubled = $derived(count * 2); 2. File-Based Routing That Makes Sense
SvelteKit’s route groups like (portfolio), (portal), and (admin) let me organize entirely different sections of the site with their own layouts, while sharing a root configuration.
3. Full-Stack in One Framework
Server-side rendering, API routes, form actions, and client-side interactivity — all in one framework with zero configuration. The +server.ts and +page.server.ts conventions are intuitive.
The Stack
Here’s what powers this site:
- SvelteKit — framework
- Tailwind CSS v4 — styling
- Convex — backend and real-time data
- mdsvex — Markdown blog posts as Svelte components
- Bun — runtime and package manager
Lessons Learned
A few things I picked up along the way:
- Tailwind v4’s
@themedirective is excellent for design tokens - mdsvex layout paths must be absolute — relative paths fail at build time
- Convex’s real-time subscriptions integrate beautifully with Svelte’s reactivity
$derivedis your friend in Svelte 5 — use it everywhere you’d useconstwith reactive values
What’s Next
I’ll continue iterating on this site, adding 3D effects with Threlte, scroll animations with GSAP, and a full software distribution portal. Stay tuned for more posts covering the journey.