Frontend
Frameworks, languages, and tools I use to build fast, accessible user interfaces. My default stack is Next.js + React + TypeScript + Tailwind — but I pick the right tool for each project.
Next.js
My default for anything that needs SEO, server rendering, or API routes. Covers 90% of web app use cases out of the box.
React
The foundation. I use it with Next.js for production apps and standalone for SPAs that don't need server rendering.
Vue.js
I reach for Vue when the team already knows it, or for projects where its single-file components and gentler learning curve are an advantage.
Nuxt
Vue's answer to Next.js. I use it when a project is Vue-based and needs SSR, SEO, or file-based routing.
Svelte
Great for performance-critical UI where bundle size matters — marketing sites, embeddable widgets, interactive dashboards.
Astro
My pick for content-heavy sites — blogs, docs, marketing pages. Ships zero JS by default and lets you mix React, Vue, or Svelte components.
Remix
A strong choice for apps with complex data flows and nested layouts. Built on web standards like fetch and FormData.
Angular
I use Angular for enterprise clients who need strict architecture, dependency injection, and an opinionated project structure out of the box.
TypeScript
Non-negotiable on every project. Catches bugs at compile time, makes refactoring safe, and serves as living documentation.
Tailwind CSS
My default styling approach. Utility-first means faster iteration, consistent design tokens, and no stylesheet sprawl.
Sass
I use Sass on legacy codebases or when a project has an established Sass architecture. For new projects, I prefer Tailwind.
shadcn/ui
Copy-paste components built on Radix primitives. Accessible, unstyled by default, and fully customizable — no fighting a component library.