March 2026
Futuristic Coding With Ancient Mobile Internet
Here are the beginnings of a long blog, written from a bus in rural Costa Rica, but published as I write.
I’ve been travelling around The Caribbean and Central America these last few weeks, which means a lot of time on planes, buses and in places with sub-optimal or expensive WiFi.
I’ve taken a few steps using the latest and greatest technology to make the experience more productive, and enabled some workflows that you might find interesting if you’re an engineer that travels frequently.
Offline NPM modules
Even in the age of AI, I can still just about remember how to code manually, what stops me from doing anything fun is being able to install packages from NPM to get going.
Enter the package manager PNPM, it has incredible offline features due to it’s cache. I think originally built to improve install speeds, over time your local machine becomes an incredible offline registry of packages as you install your project’s dependencies, and they install theirs and so on.
This means we can use pnpm add package -offline in a new repository and install it directly from the local cache.
But what about discoverability? How do you know what packages you have available? The pnpm cache is not super explorable, and packages are stored in “integrity hash” folders.
It would be nice - I thought if there was a local version of the npm website that’s backed by your pnpm cache. It didn’t exist, but of course with Claude we can build it.
Offline PNPM Browser
So I built it! OPB mimics all of the functionality of npm.js.org, backed by your pnpm cache.
The first step after installing is to convert the pnpm cache into a searchable database.
We do this with pnpm run index command. This takes every node module in the cache, extracts the name, version, dependencies, and readme.md and puts it into a full-text-searchable sqlite database locally.
This drastically improves the speed of the app and the experience of finding and discovering packages. Now I can just type “formatter” into the search box and get both “prettier” and “oxfmt” as results. The key here is not knowing the package name off by heart is no longer an obstacle, we can search by readme text and descriptions. Very cool.
Using:
- openclaw
- Obsidian sync
- Obsidian mobile
- GitHub actions
- Organic Maps
- Pnpm cache
- mix models
- Continue vs code extension