Stack

Languages & Frameworks

The core languages and frameworks I build with daily, from HTML and CSS fundamentals through React, Next.js, and React Native for mobile.

Languages

HTML

- The foundation. Every project starts here regardless of what's rendering it.

CSS

- Core styling language, still the ground truth under Tailwind and every other CSS tool I use.

Sass

- Where I started writing structured, maintainable stylesheets before utility-first CSS took over my workflow.

JavaScript

- The language underneath everything, even now with TypeScript as my default for anything non-trivial.

jQuery

- Used it heavily early in my career for client sites without a JS framework. Still shows up on legacy codebases.

TypeScript

- My default for anything beyond a quick prototype. Catches bugs before they reach production and makes collaborating on client codebases way smoother.

Web Framework

React.js

- The core of everything I build. Even when Next.js is the framework on top, hooks and component patterns are how I actually think through UI.

Next.js

- I use Next as the frontend for all of my projects. Its server-side capabilites make it great for SEO and with small apps a separate backend may not be necessary.

Mobile

React Native

- My go-to for mobile builds, iOS and Android from one codebase, no need to maintain two separate native apps.

Expo

- My toolchain on top of React Native. Handles builds, OTA updates, and native modules without me touching Xcode or Android Studio directly.

Routing

React Router

- Used when a project doesn't need Next's file-based routing, mainly in Vite or CRA setups.

TanStack Router

- A newer pick for projects that want fully type-safe routing without Next.js's file conventions.

State Management

Zustand

- A lightweight state manager for when Context or component state isn't enough, but Redux feels like overkill.

Redux

- My pick on larger client apps with complex, shared state across many screens. Not my default, but solid when the app actually needs it.

Redux Toolkit

- The way I actually write Redux now. Cuts the boilerplate down to something reasonable.