100% hand-rolled Svelte

This whole page is built with Svelte

Yes, the entire portfolio you're browsing — sidebar, scenes, tables, this very paragraph — is a SvelteKit app. I built it for one simple reason: fun. There's no interview funnel here, no "hire me" banner — just a collection of one-off projects I wanted to exist, shipped on a weekend when the mood struck.

Reactivity, live

Svelte's superpower is that state changes feel instantaneous. Here's proof you can poke.

Go on, click the bolt. This number is pure Svelte state.

What's under the hood

SvelteKit 2

The whole site is Svelte — components, state, routing. No virtual DOM, just reactive values that update the exact parts of the page that changed.

shadcn-svelte + Tailwind v4

Every card, badge, and button is shadcn-svelte, styled with Tailwind CSS v4 and themed with the 'Sera' base color.

TanStack Table

The data-heavy pages (league leaders, transactions) use headless TanStack tables for sorting and filtering.

Built for fun

No tickets, no standups, no stakeholders. Just a Saturday-and-evenings playground where I get to try whatever I want.

Why does this exist?

Because every good engineer I know keeps a junk drawer of weird projects, and I finally built myself a cabinet to store mine in. Each page behind that sidebar started as a slightly unhinged question — *who in my fantasy league is actually the best at waivers?* — followed by an equally unhinged decision to answer it with a web app instead of a spreadsheet. Some of these will live for exactly one sports season. One of them (the bracket page) exists purely so I could argue with my brother with data. All of them taught me something. If you poke around and smile, the weekend was worth it.

Sports and markets now — whatever the next API dares me to build ⚒️

The one-offs

Pick a card, pick a rabbit hole. 🎰