Mining What's Already There

Building a family atlas, rebuilding a business network from scratch, and recovering old Gumroad purchases.

Some assorted bits and pieces from my AI usage this week: a local family-atlas mapping 8 years of adoption discovery, a network archaeology job recovering a dead business owner’s locked infrastructure, and a TextExpander library rebuilt from scratch using vault context. This week Cerebro needed a little extra steering to invoke Ollama, Codex and Gemini in their respective sandbox modes without being asked (and even in their respective ‘bypass permission’ modes), which is the kind of autonomy I’ve been driving at with building this system.

SBC Issue 9 hero image

WhereWithAll: A Personal Family Atlas

Since uncovering my adoption roots 8 years ago, I’ve slowly been discovering my genetic family and getting in touch with them. I met my birth mother for the first time in 2018 (via an ancestry.com DNA test), and just last year I met a paternal uncle (found via his daughter, my cousin on 23andMe) when he came out to Spain to meet me.

There are a few long stories behind the last 8 years of discovery. One involves my birth father, born in London at St Mary’s in Paddington. I moved from Indiana to London at 14, lived in Kensington & Chelsea, and must have walked past that hospital dozens of times. My uncle also brought footage of my great-grandfather, born in Hackney — another part of the city I know well. I spent 30-odd years kicking around various parts of London and Greater London, never knowing that I had British ancestry a couple generations back (as part of a longer story, I was led to believe from my adoption papers that my father was of Norwegian descent — but that’s something for another time).

But that proximity — undiscovered, uncrossed — is what pushed me to actually build something from all the data that I had at my disposal. I took all of my ancestry.com and 23andme.com data and poured it into a local repo I’ve called WhereWithAll: a personal universe of places, people, photos, and memory, centred on me.

The current layer is OpenStreetMap data on each family member — place of birth, place of death, any other notable locations that have shown up in records or conversations. Where media exists, I’m linking it in. I’ve also been pulling location data from Apple Photos for notable experiences in my own life. The goal is a Family Atlas I can browse: journal entries, videos, family members plotted across the globe, showing where our paths have intersected — and where they nearly did.

To fill in the memory layer, I ran Ollama’s gemma4 against 603 candidate daily notes (filtered from 2,172) over 2h 14m of compute. It extracted 211 high and medium confidence cultural-memory entries with structured fields. Cost: zero. The same job on the Claude API would have been real money.

It’s staying local, but here’s a screenshot.

WhereWithAll family atlas screenshot

When the Operator Is Gone, the Devices Talk

This is part of ongoing consultancy work with a local business, whose owner died, leaving no recovery codes, no handover notes, nothing. I’m rebuilding the whole network from scratch — VLANs, IoT mesh, a full automation system for the building and garden and pretty much everything tied to Google or Apple accounts with 2FA on the previous owner’s phones — which are now locked out.

The setup is genuinely involved: patch panels, IP addresses, device names, MAC addresses — I’ve been walking the building taking notes the old-fashioned way. Claude Code is running nmap scans on both wired and wireless networks, confirming my physical findings and filling gaps into a local network map. I’ve built a central local page with login links and password-reset paths for every device I’ve managed to access.

The BroadLink automation system (used for the business and garden automation systems) was a sticking point — it’s tied to a Google account we can’t get into, but I found a way around it with Python:

The standard path — factory reset and re-pair to my account — would have wiped any chance of preserving the existing setup. Instead, python-broadlink.auth() with no arguments, using the library’s default cloud key, connected straight to the “locked” BroadLink RM pro+. The device responds to authenticated commands. I can read and learn its IR/RF codes locally. The cloud account turns out to be irrelevant.

I also pulled the saved browser credentials on the office PCs from Firefox, put them into a CSV, and used 1Password’s CLI to build a business vault from them. Then I used 1Password’s service account tools to set up automated read/write access so Cerebro can query the vault with natural language.

Back on the IoT front, I found a connected Google Home Hub device with about 75 screens’ worth of automation and device listings. Rather than feed 75 iPhone HEIC files at 2–3MB each into Claude, I had Ollama run a local pipeline first — sips to convert and resize to ~200KB JPEGs, then gemma4 multimodal to batch-extract device cards from the 53 Hub screenshots, then Claude to deduplicate into a per-room inventory. Total external cost: zero. Total time: roughly 26 minutes.

Network discovery isn’t just hostnames and IPs — it’s archaeology. Devices broadcast their identity, their state, their cohabitants. When you can’t ask the operator, the operator’s devices will tell you what you need to know, if you know what to listen for. Protocols designed for user convenience — multicast naming, friendly labels — become forensic surfaces when the original user is gone.

TextExpander: From Archaeology to Actual Use

I’ve been on a lifetime discount for TextExpander for years and barely using it — the library had turned into a museum of past projects, old identities, and inside jokes from eras long gone. So I had Cerebro audit it against my current vault context and 1Password data, rebuild the useful parts, and cut the rest.

TextExpander rebuilt library screenshot

Cerebro found that ~70% of the library was archaeological: snippets for projects, identities, and jokes from past eras. The reason it wasn’t being used wasn’t a habit problem — it was an inventory problem. Rebuilt from current vault context and 1Password data, it’s now something I actually reach for.

Mining the Gumroad App for Lost Purchases

I’ve had a Notion templates video course sitting in Gumroad for years, unfinished — locked behind the Gumroad app or JW Player with no way to download the videos. I tried Perplexity’s Comet and yt-dlp first, looking for a way to bulk-extract URLs from the purchases page. Dead end.

Then I remembered: Gumroad has an iOS app that runs on M-series Macs. I downloaded it, and asked Cerebro to dig through the app’s local storage.

The cookie approach died fast — Cloudflare’s cf_clearance token is bound to the original requester’s TLS fingerprint, not just the User-Agent, so Chrome impersonation via curl_cffi got challenged regardless. Pivoting to the app itself turned out to be the right move. The Gumroad iOS-on-Mac build is an Expo/React Native wrapper, sandboxed at ~/Library/Containers/<UUID>/Data/. Inside that container’s NSURLCache — a SQLite database called Cache.db with blob bodies in fsCachedData/ — sat every recent API response: the user’s mobile_token, the full library manifest, and streaming endpoint URLs. Grepping main.jsbundle for endpoint patterns turned up /mobile/url_redirects/download/<course_token>/<file_id>. That endpoint returns the original-quality MP4, not the transcoded HLS stream the in-app player serves.

52 videos. 5.1GB. Byte-exact to the manifest. About 10 minutes from discovery to download.

I’ve published the tools I built for this on GitHub:

https://github.com/aplaceforallmystuff/gumroad-library-tools


Those are the major things that have surfaced over the last couple of weeks. I’m thinking of writing up my use of MCPs and research tools for next week — stay tuned!

A Tool I Actually Use

The Notion templates video course in the Gumroad section above? Notion is also where almost everything else I touch lives — the family records I’m reconciling for WhereWithAll, my project pipeline, the cat rescue I run as a volunteer, my book list. The reason it sticks isn’t the features. It’s that the people I work with were already in it every day, so handing tasks to my agents (Claude, Codex, Gemini) and having them land in the same database my collaborators check stopped being two systems and became one. Worth a look if you’ve been chasing the perfect to-do list and finding new ways to be unhappy with whatever you last picked.

Try Notion → (affiliate link — costs you nothing, sends a few coins my way if you sign up)

— Jim