Skip to main content

Skills & stack

The stack behind everything shipped on this site 

Not a list of everything I have ever opened. These are the tools I reach for on real work, grouped by the job they do, with a line on each saying what I actually use it for.

Disciplines
6

Disciplines

Tools in rotation
56

Tools in rotation

Projects shipped
12+

Projects shipped

01 / Agents & AI

Agent runtimes, models, and retrieval 

Where most of my current work sits. Agents that own a task end to end, retrieval that keeps answers grounded, and the plumbing that lets a model touch a real system safely.

10 tools

OpenAI Agents SDK

Primary runtime for tool-calling agents with typed handoffs.

LangGraph

Stateful multi-step graphs when a run needs branching and resume.

LangChain

Retrieval chains, document loaders, and prompt composition.

Anthropic Claude

Long-context reasoning and instruction-heavy agent steps.

MCP

Standard tool interface so agents share one integration layer.

RAG + pgvector

Grounded answers over private docs, with citations back to source.

Hugging Face

Embedding and open-weight models when a task does not need a frontier model.

Ollama

Local model runs for evaluation and offline-first prototypes.

Chainlit

Fast conversational front end for agent prototypes under review.

n8n

Event triggers and glue around agents where code is overkill.

02 / Frontend

Interfaces people actually work in 

Product surfaces, dashboards, and marketing sites. Typed end to end, accessible by default, and fast on the first paint rather than after hydration.

10 tools

Next.js

App Router, server components, and the render strategy per route.

React

Component architecture and state boundaries in every build.

TypeScript

Strict mode everywhere. Types are the contract between layers.

Tailwind CSS

Design tokens in CSS variables, utilities for everything else.

shadcn/ui

Owned, editable primitives instead of a locked component library.

Framer Motion

Component-level transitions and layout animation.

GSAP + ScrollTrigger

Scroll-driven sequences that survive resize and reduced-motion.

three.js

WebGL scenes, gated behind visibility and motion preferences.

React Three Fiber

Declarative three.js inside the React tree, with drei helpers.

TanStack Query

Server-state caching, retries, and background refresh.

03 / Backend & APIs

The services underneath 

Typed APIs, background work, and integrations. Every endpoint validated at the boundary so bad input fails loudly instead of half-writing a record.

10 tools

Node.js

Default runtime for API services and long-running workers.

Express

REST services and middleware for auth, logging, and rate limits.

Python

Agent logic, data processing, and anything ML-adjacent.

FastAPI

Typed Python services with generated OpenAPI docs.

Pydantic

Schema validation for model output and service payloads.

Zod

Runtime validation shared between client and server in TS.

tRPC

End-to-end typed calls when client and server ship together.

GraphQL

Where consumers need to shape their own queries.

REST + OpenAPI

Documented contracts for anything a third party will call.

Odoo

ERP integration work, syncing operational data both ways.

04 / Data & storage

Where state lives 

Relational by default, with a vector store beside it when retrieval is part of the product. Migrations are versioned; nothing gets changed by hand in production.

8 tools

PostgreSQL

Primary database: relational schema, constraints, migrations.

Prisma

Typed data access and migration history in TypeScript projects.

Drizzle ORM

Lighter typed SQL where the query shape matters more than the ORM.

MongoDB

Document storage for irregular or fast-moving shapes.

Redis

Caching, queues, rate limiting, and short-lived agent state.

Supabase

Postgres with auth and storage when a build needs to move fast.

Neon

Serverless Postgres with branch-per-preview databases.

Firebase

Realtime sync and auth on client-heavy apps.

05 / Infra & delivery

Getting it live and keeping it there 

Containerised, deployed from CI, and reversible. If a release cannot be rolled back in a minute, it is not finished.

9 tools

Docker

Same image in dev, CI, and production, with no environment drift.

Kubernetes

Orchestration where workloads need to scale independently.

GitHub Actions

Typecheck, lint, test, and deploy on every push.

Vercel

Next.js hosting with preview deploys per branch.

Railway

Backend services and databases for smaller deployments.

Render

Long-running Node and Python services with managed TLS.

Cloudflare

DNS, caching, and edge protection in front of origins.

Nginx

Reverse proxy, TLS termination, and routing on self-hosted boxes.

Linux

Day-to-day environment and where the servers actually run.

06 / Quality & observability

Knowing it works after handover 

The part most portfolios skip. Tests that gate the deploy, dashboards that show the system's real state, and errors that reach me before a client notices.

9 tools

Grafana

Dashboards for latency, throughput, and agent run outcomes.

Prometheus

Metric collection and alert rules behind those dashboards.

Sentry

Error tracking with release tagging, front end and back.

Vitest

Unit and integration tests wired into CI.

Playwright

End-to-end runs on the flows that must never break.

Cypress

Component and browser tests on existing suites.

ESLint + Prettier

One style, enforced by the pipeline instead of by review.

Git

Trunk-based branches, reviewable commits, tagged releases.

Postman

Contract checks and shared collections for API handover.

Vector DB
Crew AI
Vercel
Netlify
Supabase
Railway
Render
Framer Motion
ShadCN/UI
Clerk Auth
Figma
Trello
Next.js
React Native
GraphQL
Apollo
tRPC
Zod
React Hook Form
Redux
TanStack Query
Vite
Bun
Vitest
Cypress
Storybook
ESLint
Prettier
Turborepo
Tailwind CSS
Prisma ORM
OpenAI Agents SDK
Anthropic Claude
LangChain
LangGraph
Hugging Face
Ollama
MCP
n8n
Python
FastAPI
Pydantic
Node.js
Express
NestJS
Hono
PostgreSQL
pgvector
Drizzle ORM
MongoDB
Redis
Neon
Firebase
Docker
Kubernetes
GitHub Actions
Nginx
Cloudflare
Grafana
Prometheus
Sentry
Git
Linux
TypeScript
WordPress

Boundaries

What I don't take on 

Cheaper to read here than to find out three calls in. If your project sits in one of these, I will say so on the first call and point you somewhere better.

Native mobile

I build web and React Native. A true Swift or Kotlin app belongs with a native specialist.

Model training from scratch

I fine-tune and I build on top of existing models. Training a foundation model is not the same discipline.

Brand and visual identity

I can design a product surface. Logo, brand system, and campaign work should go to a designer.

Long-term staff augmentation

Engagements are scoped around an outcome. If you need a full-time seat filled, a hire is the better answer.

Bring the problem, not the tech list

The right stack falls out of the constraints. Tell me what has to be true when it is done and I will tell you what I would build it with, and what I would leave out.