Uses
What I reach for
The defaults I start from when designing and shipping a system — and why each one earns its place.
Default backend stack
- Node.js + TypeScript
- First choice for APIs, real-time services and tooling.
- AxilJS
- My own modular backend ecosystem — routing, ORM, auth, queues, AI.
- PostgreSQL
- The system of record, unless there is a strong reason otherwise.
- Prisma / Drizzle
- Typed data access; Drizzle when I want to stay close to SQL.
- Redis
- Caching, rate limiting and lightweight pub/sub.
When the system gets bigger
- RabbitMQ
- Work queues and reliable service-to-service messaging.
- Apache Kafka
- High-volume event streams and replayable history.
- ASP.NET Core
- Enterprise platforms and teams already on .NET.
- Python · FastAPI
- AI services, data extraction and ML workloads.
Real-time
- Server-Sent Events
- One-way streams — dashboards, AI agent progress.
- WebSockets / Socket.IO
- Two-way, low-latency client sync.
AI
- LLM APIs with model fallback
- Resilience first: retries, fallbacks, streaming.
- RAG
- Grounding answers in the customer's own data.
- Multi-agent orchestration
- One focused agent per step instead of one giant prompt.
Infrastructure & delivery
- AWS (EC2, S3, RDS)
- Production hosting and managed databases.
- Docker · Kubernetes · Nginx
- Reproducible environments from laptop to production.
- GitHub Actions
- CI/CD for every repository.
- Vercel
- Next.js front ends — including this site.
Everyday tools
- VS Code & Visual Studio
- Home base for TypeScript, Python and .NET.
- Git & GitHub
- Everything is versioned, reviewed and automated.
- Swagger / OpenAPI
- Every API ships with a contract and live docs.