Skip to main content
Alejandro Cantero Jódar

Stack

The tools I build with and what I actually use each of them for. Depth varies: some I live in every day, others I pick up when a problem calls for them.

AI

Where most of my time goes right now: building products on top of models, and building the harness around them.

Claude Code
My daily driver for agentic development. I write my own skills, MCP servers and hooks for it, and I run agents inside Docker sandboxes.
OpenAI & Codex
The OpenAI and Responses APIs, including a gateway of mine that translates between OpenAI and Anthropic formats with provider failover.
MCP
Model Context Protocol servers for memory, knowledge bases and internal tools, so agents get context instead of guesses.
Vercel AI SDK
Streaming interfaces and model-agnostic calls: the layer I reach for in every React and Next.js product with AI in it.
Mastra
Typed agent workflows when a pipeline needs several agents handing work to each other.
LangChain
Orchestration for retrieval and multi-step LLM pipelines when a plain API call is not enough.
HuggingFace
Transformers.js and open models for embeddings, transcription and anything that should run locally instead of behind an API.
Agent frameworks
I build my own: a zero-dependency TypeScript agent framework, a CLI coding agent, and persistent memory servers for agents.

Languages

What I actually write code in, roughly in order of how much of it I write.

TypeScript
My default language on both sides of the wire, with strict mode and types shared end to end. Most of what I build starts here.
JavaScript
The runtime underneath everything. Plain JS for CLIs and scripts where a build step would only add friction.
PHP
Symfony and Doctrine codebases in production: maintaining them, refactoring them and moving pieces out into services.
Python
Indexing, data and ML-adjacent tooling, plus MCP servers where the Python SDK is the shortest path.
Swift
SwiftUI apps for iOS, built offline-first and shipped end to end.
Bash
Shell tooling, git workflows and the automation glue I live in every day.
HTML5
Semantic markup and accessibility as the baseline, not as a pass at the end.
CSS3
Modern layout, custom properties and container queries instead of piles of overrides.

Frameworks and runtimes

Rendering strategy first, framework second.

React
The component model I reach for by default, from product interfaces to terminal UIs and video compositions.
Next.js
Full-stack React: app router, server components and auth, for products that need a backend on day one.
Astro
Content-driven sites where shipping less JavaScript is the point. This site runs on it.
Angular
Large enterprise front-ends with SSR: evolving and maintaining applications that outlive their teams.
React Native & Expo
Cross-platform mobile apps with maps, audio and location, shipped through EAS.
Ionic
Hybrid mobile apps built from a single web codebase, with Capacitor underneath.
Tailwind
Utility-first styling on top of design tokens, instead of a bespoke CSS architecture.
Remotion
Video as React components: automated pipelines that turn a script into a rendered, published video.
Node.js
Services, background jobs and the CLI tooling I write to automate my own work.
Bun
My runtime of choice for CLIs and small services: one toolchain for install, run, test and bundle.
Deno
Modern runtime with sane defaults for scripts and small self-contained services.
Express
A minimal HTTP layer for the cases where a full framework would add nothing.
Fastify
Schema-first HTTP services when throughput and typed routes matter more than ecosystem size.
NestJS
Structured, dependency-injected services when a backend needs to survive a team.
Symfony
The backbone of the PHP systems I work on: Doctrine, CQRS and a decade of business rules.
GraphQL
Schema design and resolvers when clients need to shape their own payloads.

Data and storage

Picking the boring option on purpose, most of the time.

PostgreSQL
My default relational database, including geospatial search with PostGIS.
MySQL
Production OLTP databases: slow query analysis, execution plans and index work.
SQLite & libSQL
Embedded storage with full-text and vector search for local-first tools and agent memory.
Redis
Caching, rate limiting and the queues that sit between services.
MongoDB
Document storage for fast-moving schemas that are not ready to be normalised.
PocketBase
A single binary with auth, storage and realtime APIs, for products that need to exist next week.
Firebase
Push notifications and auth on mobile, where the platform integration is worth more than the database.
Supabase
Postgres with batteries: auth, storage and instant APIs without leaving SQL behind.

Infrastructure and tooling

Running things in production and knowing what they are doing.

AWS
ECS, RDS, S3, Lambda and CloudWatch for deploying and observing production services.
Docker
Reproducible local environments, multi-stage images for production, and sandboxes to run agents safely.
Fly.io
Where my side projects and self-hosted services live: deploy from a Dockerfile, forget about it.
Linux
Servers, Alpine images, shell tooling and the automation glue around everything above.
Nginx
Static serving, compression and reverse proxying in front of almost everything I deploy.
RabbitMQ
Asynchronous messaging between services when a request should not wait for the work to finish.
Git
Branching, worktrees, rebasing and a history I can still read six months later.
GitHub Actions
CI, releases to npm and deploys, so shipping is a merge and not a ritual.
Jenkins
The pipelines that build and deploy the microservices I work on day to day.
Biome & ESLint
Linting and formatting decided once, enforced automatically, never argued about again.
Vitest & Playwright
Unit tests where logic lives and end-to-end tests where users do.
PostHog
Product analytics and funnels: shipping a feature and then finding out whether it worked.
Jira
Planning and traceability when the work spans a team and several sprints.