Subscribe to masimplo.com

Stay up to date! Get all the latest & greatest posts delivered straight to your inbox

Tips

Shortcuts, workflows, and practical notes.

Google Apps forwarding cover image
Tips

Google Apps forwarding

Google 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.

Run Ghost in Docker behind an nginx reverse proxy cover image
Docker,  Blogging,  Tips

Run Ghost in Docker behind an nginx reverse proxy

docker-compose for Ghost plus a custom nginx proxy image — full compose file, nginx.conf, and Dockerfile.

List globally installed npm packages with versions cover image
Tips,  Tools

List globally installed npm packages with versions

One command lists every globally installed npm package and its version — useful when migrating globals to yarn or a new machine.

Add highlight.js to Ghost with Code Injection cover image
Blogging,  Tips

Add highlight.js to Ghost with Code Injection

Paste highlight.js CSS and script into Ghost Admin Code Injection — no theme file edits required for syntax highlighting.

Ionic VirtualScroll with custom components — wrap in a div cover image
Ionic,  Tips

Ionic VirtualScroll with custom components — wrap in a div

Ionic2 VirtualScroll would not render custom item components — wrap the component in a plain div with *virtualItem until the framework catches up.

Remove sensitive data from git history with BFG cover image
Security,  Tools,  Tips

Remove sensitive data from git history with BFG

Accidentally pushed an API key to GitHub? Scrub it from git history with BFG Repo-Cleaner, then force-push — reverting the commit is not enough.

Install and switch Node.js versions with nvm cover image
Tools,  Tips

Install and switch Node.js versions with nvm

NVM is still the easiest way to install Node.js, switch versions instantly, and migrate global packages when you upgrade.

Sync Cordova config.xml version with npm version cover image
Bash,  Tips,  Ionic

Sync Cordova config.xml version with npm version

Hook npm version so Cordova config.xml gets the same semver as package.json in the same commit and tag.

Delete git tags in bulk — remote and local one-liners cover image
Tips,  Tools

Delete git tags in bulk — remote and local one-liners

How to delete git tags matching a pattern from origin and your local clone in one shot, using git ls-remote, awk, and xargs.

Ionic environment config with NODE_ENV and Angular DI cover image
Ionic,  Code,  Tips

Ionic environment config with NODE_ENV and Angular DI

Typed dev/prod config via OpaqueToken and a NODE_ENV factory so Ionic2 builds pick the right API keys at compile time.

Async/await retry with timeout in Node.js cover image
Code,  Tips

Async/await retry with timeout in Node.js

A small Express middleware that wraps async handlers with timeout and retry for flaky database calls — cleaner than chaining promise-retry.

Enable git rerere so rebase conflicts resolve themselves cover image
Tips,  Tools

Enable git rerere so rebase conflicts resolve themselves

Turn 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.

Remove laptop sticker residue with baking soda and rubbing alcohol cover image
Lifehacks,  Tips

Remove laptop sticker residue with baking soda and rubbing alcohol

Baking soda plus rubbing alcohol removes laptop sticker residue in seconds after nail polish remover, vinegar, and alcohol alone all failed.

Batch resize images on Mac with Preview cover image
Tips,  Tools

Batch resize images on Mac with Preview

Open a batch in Preview, Select All, Adjust Size — no third-party app required. Optional ImageOptim pass for web-ready files.

Help the Helpdesk! Send Info. cover image
Tips

Help 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.

Keeping an old car in great shape when nobody else sweats the details cover image
Tips,  Hobbies

Keeping an old car in great shape when nobody else sweats the details

Old does not mean good enough. What happened when I stopped trusting other people's checklists and kept my Astra OPC running like clockwork.

Daikin weather compensation — 21% less heat from one offset cover image
Smart Home,  Tips,  Hobbies

Daikin weather compensation — 21% less heat from one offset

Installer 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.

One AGENTS.md for every coding agent — stop maintaining three rule files cover image
AI,  Tools,  Tips

One AGENTS.md for every coding agent — stop maintaining three rule files

Put 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.

Building a second brain in Obsidian — and telling my AI agents what not to write there cover image
AI,  Tools,  Tips

Building a second brain in Obsidian — and telling my AI agents what not to write there

I finally built an Obsidian second brain that stuck — by writing down what my AI agents are and aren't allowed to put in it.