Blog
Problems I run into building web, mobile and backend, and how I solve them.
How to migrate from Create React App to Vite
A step-by-step Create React App to Vite migration: dependencies, index.html, .jsx extensions, environment variables, scripts and tests.
How to build a 3D Secure payment flow in a Next.js store
The steps of a 3D Secure flow: starting the payment, the bank verification page, the return trip and server-side confirmation. Practical notes from a QNBPay integration.
How to move from AWS managed services to a VPS
The steps for moving from AWS managed services to a VPS: inventory, server setup, database migration, DNS cutover and a rollback plan, including when not to do it.
Sharing code between Next.js and Expo in a Turborepo monorepo
How to organize a Next.js web app and an Expo mobile app in one Turborepo monorepo: folder layout, what to share, wiring packages and turbo.json.
Stripe Checkout and subscriptions with NestJS: the webhook parts that matter
Creating a Stripe Checkout session, verifying the webhook signature, handling subscription events and idempotency. A practical flow with NestJS.
A technical SEO checklist for Next.js (App Router)
A technical SEO checklist for the Next.js App Router: the Metadata API, canonical and hreflang, sitemaps, structured data, performance and Search Console verification.
How to brief a freelance developer: what to prepare before you reach out
What a brief should contain to get a fast, accurate quote from a freelance developer: the goal, users, must-have features, existing systems, timeline and examples.
What is an AI agent? How it differs from a chatbot and how it works
What an AI agent is, how it differs from a chatbot and a fixed workflow, its parts and its loop. When to use an agent and when a simple flow is enough.
Building an AI agent from scratch: the tool-calling loop
Build the tool-calling loop at the core of an AI agent in TypeScript, step by step: tool design, error handling, a step limit and monitoring.
AI agent security: prompt injection and permission limits
What prompt injection is, why it puts AI agents at risk and how to reduce it: least privilege, human approval, untrusted content and tool limits.
What is MCP (Model Context Protocol) and what is it for?
What MCP is, the problem it solves, the concepts of tools, resources and prompts, how messages travel, and a simple server example.
Working effectively with AI coding agents: a practical guide
How to get good results from AI coding agents: shrinking the task, giving a way to verify, a project rules file, reviewing diffs and security habits.
Studying and modernizing an old application: approach and limits
How to work out and modernize an old application with no source or documentation: permission, observing behavior, extracting a contract, characterization tests and a gradual cutover.
Hosting for small projects: Vercel and Neon free tiers or self-hosting?
The real limits of the Vercel, Neon, Supabase and Firebase free plans (October 2026), the commercial-use rules, and when to move to a single VPS.
Firebase, Supabase or your own backend? When to choose which
The differences between Firebase, Supabase and a custom backend, when to choose each, and which jobs to hand to ready-made services and which to build yourself.
How far do Vercel, Neon, Supabase, Firebase and a single VPS scale?
Where these platforms struggle, the connection-pooling problem, the scaling ladder and the signs it's time to move to something else.