TipsGoogle Apps forwardingGoogle Apps has no traditional email forwarders, but with a few steps you can configure its Groups feature to forward mail to any addresses you like.
Docker, Blogging, TipsRun Ghost in Docker behind an nginx reverse proxydocker-compose for Ghost plus a custom nginx proxy image — full compose file, nginx.conf, and Dockerfile.
Tips, ToolsList globally installed npm packages with versionsOne command lists every globally installed npm package and its version — useful when migrating globals to yarn or a new machine.
Blogging, TipsAdd highlight.js to Ghost with Code InjectionPaste highlight.js CSS and script into Ghost Admin Code Injection — no theme file edits required for syntax highlighting.
Ionic, TipsIonic VirtualScroll with custom components — wrap in a divIonic2 VirtualScroll would not render custom item components — wrap the component in a plain div with *virtualItem until the framework catches up.
Security, Tools, TipsRemove sensitive data from git history with BFGAccidentally pushed an API key to GitHub? Scrub it from git history with BFG Repo-Cleaner, then force-push — reverting the commit is not enough.
Tools, TipsInstall and switch Node.js versions with nvmNVM is still the easiest way to install Node.js, switch versions instantly, and migrate global packages when you upgrade.
Bash, Tips, IonicSync Cordova config.xml version with npm versionHook npm version so Cordova config.xml gets the same semver as package.json in the same commit and tag.
Tips, ToolsDelete git tags in bulk — remote and local one-linersHow to delete git tags matching a pattern from origin and your local clone in one shot, using git ls-remote, awk, and xargs.
Ionic, Code, TipsIonic environment config with NODE_ENV and Angular DITyped dev/prod config via OpaqueToken and a NODE_ENV factory so Ionic2 builds pick the right API keys at compile time.
Code, TipsAsync/await retry with timeout in Node.jsA small Express middleware that wraps async handlers with timeout and retry for flaky database calls — cleaner than chaining promise-retry.
Tips, ToolsEnable git rerere so rebase conflicts resolve themselvesTurn on git rerere and git remembers how you resolved a conflict — repeated rebases of a feature branch stop asking you to fix the same thing twice.
Lifehacks, TipsRemove laptop sticker residue with baking soda and rubbing alcoholBaking soda plus rubbing alcohol removes laptop sticker residue in seconds after nail polish remover, vinegar, and alcohol alone all failed.
Tips, ToolsBatch resize images on Mac with PreviewOpen a batch in Preview, Select All, Adjust Size — no third-party app required. Optional ImageOptim pass for web-ready files.
TipsHelp the Helpdesk! Send Info.A small trick that makes app support better — prefill your mailto contact link with device and user info so the helpdesk skips the back-and-forth.
Tips, HobbiesKeeping an old car in great shape when nobody else sweats the detailsOld does not mean good enough. What happened when I stopped trusting other people's checklists and kept my Astra OPC running like clockwork.
Smart Home, Tips, HobbiesDaikin weather compensation — 21% less heat from one offsetInstaller left the weather-compensation offset at +5. Dropping it to 0 cut heat-pump energy about 21% — same house, same week of March, Shelly numbers.
AI, Tools, TipsOne AGENTS.md for every coding agent — stop maintaining three rule filesPut shared project rules in AGENTS.md, keep a thin CLAUDE.md that imports it, and leave Skills for verbs — so Cursor, Claude Code, and Codex stop drifting apart.
AI, Tools, TipsBuilding a second brain in Obsidian — and telling my AI agents what not to write thereI finally built an Obsidian second brain that stuck — by writing down what my AI agents are and aren't allowed to put in it.
Hobbies, Tips, PersonalLelit Anita pump replacement — how a dying pump became my best espresso upgradeA Lelit Anita pump replacement turned into a silent pump, a pulsor, a new OPV and a naked portafilter, and the best espresso I've made at home.