← Projects

Jonesen

Consulting work for a software company — the Client Prospector, a Python and Tornado pipeline that turned raw WHOIS exports into a qualified list of small businesses whose websites needed help.

consultingpythontornadoasyncdata pipelinebashcordovaios

Jonesen LLC was a software company I did consulting work for in the years before Amazon, alongside non-profit work. The problem they brought me is the one every small services business has: finding the customers.

Client Prospector

The insight was that the answer was already public. Every registered domain has a WHOIS record with a registrant, an address, and dates. Every website either does or does not run WordPress, and either does or does not work on a phone. Cross those facts and you have a list of local businesses with a site that needs work and a named human to talk to about it.

Getting from one to the other took a pipeline.

WHOIS exportsmalformed, 39 columnsScrub and mergerecursive, one datasetFilter by zipa territory, not the worldEnrich, concurrentlyruns WordPress? mobile ready?thousands of hosts in flight at onceProspect listgrouped by registrar
Public facts in, a call list out.

It started as Bash. A recursive scrubber walked a directory tree of WHOIS exports, stripped the malformed trailing characters, dropped the columns that carried nothing useful, and concatenated everything into one dataset — the kind of job sed is genuinely good at, until it isn't.

The real tool was the Python rewrite, a command-line program with a handful of verbs:

  • Count the records in a dataset, because knowing the size of the thing is step zero.
  • Filter by zip code range, which is how a national dataset becomes a territory you could actually drive to.
  • Check for WordPress — the enrichment step that made the whole thing worth building. It requests /wp-admin on every domain and reads the status, and it does this across tens of thousands of hosts using Tornado's async HTTP client over a curl backend. Done serially at even a second per host, a large dataset is a week of waiting; done with thousands of requests in flight, it is a coffee break. This was the piece that taught me concurrency as a practical discipline rather than an exam question.
  • Check mobile readiness against Google's PageSpeed Insights API, so a site could be qualified as needing work before anyone picked up a phone.
  • Group by registrar or administrative organization, and pull every record for a given one — because discovering that one web shop administers three hundred local domains changes who you should be calling.

Every script still carries the header I gave it — Created by Aaron Trank · For use by Jonesen LLC only — which is the tidiest possible summary of the arrangement: I wrote the tooling, they ran the business on it.

The dataset itself was full of real people's contact details, so none of it appears here; what is worth showing is the shape of the tool, not its input.

Rising Star Montessori

The other surviving piece of the engagement is an app: a notification app for Rising Star Montessori, built as a Cordova hybrid so one JavaScript codebase could serve iOS, Android, and Windows Phone, with push handled through Telerik's Everlive backend and per-platform settings for badges, sounds, and alerts.

2015 was when I stopped being someone who had written mobile software once and became someone who shipped it — provisioning profiles, distribution certificates, signing, the App Store, all of it. Two years later that turned into Outfit Compare.