Blog
Notes on building products, infrastructure, and the debugging lessons in between. More on Medium.
Your CI/CD pipeline should build new releases, not become a dependency for keeping production alive. Here’s how to design an AWS deployment architecture that survives…
Topics
My CI/CD pipeline builds, scans, and deploys applications to AWS ECS Fargate. It also runs Terraform for staging and production.
From two half-working repos to staged, approved releases
How a Next.js and Express/Socket.IO job platform went from half-working CI to Terraform-managed AWS infrastructure, OIDC deploys, and staged releases.
The fix was the query shape
Per-row writes, full-document loads, and N+1 lookups turned a simple table into a migration. What fixed it was changing the shape of the query.
Describe the cloud, review the plan, apply
You write what the cloud should look like. Terraform shows the plan, then keeps its word. Moving from console clicking to infrastructure as code.
And what happens when the Pod dies
A Pod is a bad place to keep files you care about. How PersistentVolumes and PersistentVolumeClaims keep data alive when Pods come and go.
You don’t have to choose between them
Docker and Kubernetes are often framed as a choice. They aren’t. A beginner-friendly look at how the two work together.
From git push to production with zero manual steps
Walk through a real GitHub Actions pipeline that lints, builds, dockerizes, and deploys a Next.js app to EC2 — with multi-stage Dockerfiles, compose files, and a remote deploy script.
Symptoms vs root cause
What a Docker memory limit taught me about telling a symptom from its root cause while working through a debugging lab.
Full CI/CD from GitHub push to nginx
Step-by-step guide to deploying a React + Vite app on AWS EC2 with nginx and a GitHub Actions CI/CD pipeline — from launching the instance to automated deploys.
Learn how to replace heavy GIF animations with optimized videos to dramatically improve your Next.js performance
Learn why GIFs hurt performance and how to replace them with optimized videos in Next.js using lazy loading and IntersectionObserver.
Production-ready API client with auth and refresh
Configure Axios in React with interceptors, access and refresh tokens, automatic token refresh, and global error handling — centralized and maintainable.
When to use each loop
The difference between for...of and for...in in JavaScript: iterables vs plain objects, values vs keys, and when to use Object.entries().
Truthy, falsy, and other everyday rules
Short notes on JavaScript behaviour worth keeping in mind, starting with truthy and falsy values.
Library or framework?
The difference between a framework and a library, and the core ideas behind React.
The ES6 features you use every day
A quick tour of ES6: variable declarations with var, let, and const, and the other features introduced in the second major revision of JavaScript.
Strings, arrays, and more
A reference of commonly used JavaScript methods for strings, arrays, and numbers.