Starting 2026: New Year, Same Hustle
New year, same mission. Here's my approach for the months ahead.
Published journal entries covering engineering decisions, tradeoffs, and field notes.
New year, same mission. Here's my approach for the months ahead.
What a year. Job hunting, building, writing, and growing through it all.
Streams handle large data efficiently. Here's how to use them without the headache.
I've written 70 posts this year. Here's what I learned about consistent content creation.
Server Components change how we think about React. Here's what you need to know.
Protect your API from abuse. Here's how to implement rate limiting in Node.js.
Vite has gained massive popularity. When should you use it vs Webpack?
JWTs are everywhere in modern web auth. Here's how they work and how to use them properly.
With so many state management options now, is Redux still relevant? Let's talk about when it makes sense and when it doesn't.
Time to add the brains! Let's write the JavaScript that makes our chatbot actually respond to users.
The market supposedly slows down in December. But does it? My strategy for the next few weeks.
Joins combine data from multiple tables. Here's a visual guide to the different types.
Custom snippets save keystrokes and enforce patterns. Here's how to make them.
Proper caching makes sites fast. Here's how HTTP caching works and how to use it.
Ever wanted to build a chatbot but don't want to mess with AI APIs? Let me show you how to build one with just HTML, CSS, and JavaScript.
Been on the job market for a bit now. Let me tell you, it's not great out there. Here's what I'm seeing.
I spend way too much time tweaking my editor. Here's what I've landed on for my daily driver setup.
Next.js 15 dropped and there's some genuinely cool stuff in here. Let me walk you through the highlights.
The final chapter: deploying our chatbot to the world with Docker and a VPS.
The Coder Life Discord has been running for a year. Here's what I've learned about building developer communities.
Context is powerful but often misused. Here's when it makes sense and when it doesn't.
More interview stories from the trenches. The good, the absurd, and the lessons learned.
Regex looks scary but it's incredibly useful. Here are the patterns you'll actually use.
Separate deployment from release. Feature flags let you ship code without exposing features.
Our chatbot works. Now let's make it look professional with modern CSS.
Stop arguing about tabs vs spaces. Let Prettier decide and move on.
PM2 keeps your Node apps running. Process management, clustering, and monitoring.
The job search continues. But a lot has happened. Time for reflection.
Testing doesn't have to be painful. Here's a practical approach that actually helps.
The Date object is confusing. Here are the gotchas and how to handle them.
React has been around for over a decade now, and honestly? I'm still a fan. Here's why I think it's still the go-to for building UIs.
You need to change your API but can't break existing clients. Here are your options.
Graceful error handling in React. What error boundaries are, how to use them, and patterns that work.
I hate networking. But ignoring it was a mistake. Here's what I learned.
These hooks are for optimization, not decoration. Here's when they actually help.
A fast, pretty terminal makes development more enjoyable. Here's my current setup.
Writing docs, READMEs, and technical posts is a skill. Here's how to get better at it.
Our chatbot responds to messages. Now let's make it actually useful with pattern matching and response logic.
Async/await makes promises easier, but there are still pitfalls. Here are the mistakes I see most often.
Debugging in mobile browsers is painful. I built a tool to make it less so.
Accessibility matters. Here are the fundamentals every web developer should know.
I have dozens of unfinished projects. Some guilt, some wisdom, and why that's actually okay.
When should you control form state? When should you let the DOM handle it? Let's break it down.
Code review isn't about gatekeeping. It's about making code better together. Here's what I focus on.
Managing configuration across development and production. Here's how I handle env vars.
Debugging is a skill. Here are techniques that help me find and fix bugs faster.
I built a real-time collaborative editor for code review. Here's the story and tech behind it.
For most of my projects, I reach for PostgreSQL. Here's why it's become my default database.
I've been using Git for over a decade. Here are the commands that actually matter for daily work.
I've been on the market for half a year now. Here's what I've learned, what worked, and what didn't.
App Router confused me at first. Here's the mental model that made it click.
We spend way more time reading code than writing it. Here's how to get better at it.
Most APIs have terrible error handling. Here's how to build error responses that actually help developers.
Our chatbot can respond to messages, but it doesn't remember anything. Let's add conversation context.
After 15+ years of collecting tools, here are the ones I actually use daily.
Tailwind, CSS-in-JS, SASS... sometimes plain CSS is still the right choice.
I run a bunch of services on my VPS. Here's how Docker Compose keeps it all manageable.
Here are the browser extensions that make my development workflow smoother.
These two hooks confuse a lot of people. Let's break down when you actually need them (and when you don't).
After years of React, these are the patterns that have stood the test of time. Simple, effective, and maintainable.
Your job application probably never reaches a human. Here's how to write for the robots while staying authentic.
I built a spam detector without using any AI APIs. Here's how heuristics and basic probability can go a long way.
Middleware is the backbone of Express. Let's look at patterns that make your APIs more robust and maintainable.
Docker can seem intimidating at first. Let me break it down in terms that make sense for web developers.
Whiteboard algorithms, LeetCode grinding, system design for a CRUD app... the way we interview developers needs to change.
TypeScript's built-in utility types can save you tons of boilerplate. Here are the ones I use constantly.
I started a Discord community for developers. Here's what it's about and why you might want to join.
The GraphQL hype has died down. Let's have a real conversation about when each makes sense.
Sometimes you build things because you need them. ZipDrop is one of those projects.
New to backend development? Let's build a simple REST API with Express.js from scratch.
I was told it would take 4 hours. It took 8. And then they ghosted me. Let's talk about take-home assignments.
Add AI capabilities to your apps. A practical guide to the OpenAI API.
Treat incoming JSON as unknown, then check its shape before handing it to the rest of your application.
JavaScript’s sort() changes its input. Keep display ordering separate from shared data with a copied array and an explicit comparator.
Sending a response finishes the HTTP exchange. Calling next() is a separate decision—and usually the wrong one afterward.
URLSearchParams supports repeated keys, but set() and Object.fromEntries() can quietly discard them. Use getAll() and append() when a filter accepts multiple values.