Tooling
The tools around the code: git, terminals, SSH, tmux, dev containers, and the Claude Code features that save the most time.
91 posts · page 1 of 4
What Is WSL? Running Linux on Windows, Explained
WSL lets you run a real Linux system inside Windows without dual-booting or a separate virtual machine to manage. What it is, why web developers use it, how to install it, where your files live, and the performance and networking gotchas.
What Is an IDE? Code Editors vs IDEs Explained
An IDE (integrated development environment) puts everything you need to write software in one app: editor, file browser, terminal, debugger, git and more. How it differs from a plain code editor, the popular options, cloud IDEs, and where AI fits in.
Unit vs Integration vs End-to-End Tests: What Each One Catches
Three kinds of automated tests that check your app at different sizes. Unit tests check one function, integration tests check pieces working together, end-to-end tests click through the real app. What each catches, what each costs, and which to write first.
How to Test Webhooks Locally: Stripe CLI, Tunnels, and Replays
Webhook providers can't reach localhost, so local testing needs a forwarder or a tunnel. How to use provider CLIs like stripe listen, general tunnels like ngrok and Cloudflare Tunnel, request-capture tools, and fixture replays in automated tests — plus the signature-verification gotchas.
Playwright Tutorial: End-to-End Tests That Aren't Flaky
Playwright drives real browsers to test your app the way users use it. Install it, write your first test, use role-based locators and auto-waiting assertions, log in once and reuse the session, run against a dev server, debug with UI mode and traces, and run it in CI.
"Command Not Found": The PATH Variable Explained
"command not found" or "is not recognized as an internal or external command" usually means the program is installed but your terminal doesn't know where to look. How PATH works on Mac, Linux and Windows, how to check it, and how to add a folder permanently.
What Is package-lock.json? (And Should You Commit It?)
package.json says which versions your app accepts; package-lock.json records exactly which versions were installed. Why the lock file exists, why you should commit it, npm install vs npm ci, fixing merge conflicts in it, and the equivalent files for pnpm, Yarn and Bun.
Deploy to a VPS With GitHub Actions: Push to Main, Ship to Production
Automate deploys to your own server: run tests in GitHub Actions, then SSH in and run your deploy script — or build a Docker image and pull it. Deploy keys, secrets, known_hosts, environments with approval, rollbacks, and keeping the SSH key's power limited.
Git Push Rejected: "Updates Were Rejected Because the Remote Contains Work"
git push fails with "rejected — fetch first" or "non-fast-forward" when GitHub has commits you don't. How to pull and combine them safely, when force-pushing is fine and when it destroys work, and the other rejection messages: protected branches, large files, and secrets.
"Permission Denied (publickey)" on GitHub: How to Fix It
GitHub rejected your SSH key — either you don't have one, it isn't added to GitHub, your SSH agent isn't offering it, or you're using the wrong account. A step-by-step fix with ssh -T, plus the HTTPS alternative and the 'Support for password authentication was removed' error.
Git Fetch vs Git Pull: What's the Difference?
git fetch downloads new commits from GitHub without touching your work. git pull downloads them and immediately merges (or rebases) them into your branch. When to use each, what origin/main actually is, and how to see what changed before you pull.
Git "Detached HEAD" Explained: What It Is and How to Get Out
"You are in 'detached HEAD' state" means you've checked out a specific commit instead of a branch. It's safe to look around; commits made here are easy to lose. How you got there, how to get back, and how to save work you did while detached.
Git Cherry-Pick Explained: Copy One Commit to Another Branch
git cherry-pick copies a specific commit from one branch onto another — handy for getting a bug fix into production without merging everything else. How to use it, picking ranges, handling conflicts, and when a merge is the better choice.
ESM vs CommonJS: import vs require and the Errors Between Them
JavaScript has two module systems. CommonJS uses require and module.exports; ES modules use import and export. How Node decides which a file is, and how to fix 'Cannot use import statement outside a module', 'require is not defined', ERR_REQUIRE_ESM and __dirname is not defined.
Cursor Rules Explained: .cursor/rules, AGENTS.md, and CLAUDE.md
Rules files tell an AI coding tool how your project works so you don't repeat yourself every chat. How Cursor's project rules work, the rule types, what to put in them, how they compare with AGENTS.md and CLAUDE.md, and how to share one set of rules across tools.
How to Give Claude Code Images and Screenshots
Claude Code can read screenshots, mockups and error images. How to paste or drag an image into the terminal, reference an image file by path, the Ctrl+V vs Cmd+V gotcha on Mac, and the prompts that get the best results from visual input.
Claude Code on Windows: Native or WSL?
Claude Code runs natively on Windows and inside WSL. How to install each, why Git for Windows matters for the native version, when WSL is the better choice, the file-path and performance gotchas, and how to use it with VS Code on Windows.
Claude Code Keyboard Shortcuts: The Ones Worth Memorising
The Claude Code shortcuts that save the most time: Shift+Tab for modes, Esc to interrupt, Esc Esc to rewind, ! for shell commands, @ for files, multi-line input, pasting images, and how to customise keybindings. A cheat sheet for day one.
"Cannot Find Module" and "Module Not Found": How to Fix Them
Node's "Error: Cannot find module" and bundlers' "Module not found: Can't resolve" mean an import points at something that isn't there. The five causes — not installed, wrong path, wrong case, missing build, wrong working directory — and how to fix each.
Bash Scripting for Beginners: Automate the Commands You Keep Typing
A bash script is a text file of terminal commands you can run in one go. How to write and run your first script, variables, arguments, if-statements and loops, the safety line every script should start with, and a real deploy script you can adapt.
What Is YAML? The Config Format Behind GitHub Actions and Docker Compose
YAML is the human-readable format used for config files like GitHub Actions workflows, Docker Compose and Markdown frontmatter. The syntax in five minutes — keys, lists, nesting, strings, multi-line text — and the indentation and "no" gotchas that break files.
What Is Vite? The Build Tool Behind Lovable and Bolt Apps, Explained
Vite is the tool that runs your React app during development and bundles it for production. What Vite does, what npm run dev and npm run build actually produce, why VITE_ environment variables are public, and how to deploy the dist folder.
What Is Linux? A Beginner's Guide for People Building Apps
Linux runs most of the world's servers — including, probably, the one your app will live on. What Linux is, kernels vs distributions, Ubuntu vs Debian vs Alpine, how it differs from Windows and macOS, and the handful of Linux facts that prevent deploy bugs.
VS Code Remote SSH: Develop on a Remote Server as if It Were Local
The Remote - SSH extension lets VS Code edit files, run terminals and debug on a remote Linux server. How it works, setup step by step, SSH config and keys, extensions and port forwarding, and fixes for the common connection problems.