Somewhere during the multi-source rebuild, I looked at what the plugin had become, any niche via sources and keywords, any branding, complete SEO, its own sitemap, backup and restore, and realised job.army was no longer the product, the engine was. This post is the deliberate work of turning my board’s plugin into JobArmy the product, and the parts that had nothing to do with code.
The productisation audit from the forex kit applied here at larger scale, remove myself from the machine. Branding, colours, and niche assumptions moved into settings pages, the discovery engine already took arbitrary sources and keywords, so a nursing board or a trades board is configuration, not development. Two subsystems were built almost entirely for buyers. The AdSense readiness pack creates the essential pages a monetising site needs, Privacy Policy, About, Contact, Terms, Disclaimer, real copy, idempotently, because the buyer’s goal is a monetisable site and arriving at approval-readiness out of the box is product value the code barely shows. And Backup and Restore, JSON export and import of the whole board with the dedupe chain on restore, exists because buyers migrate, stage, and make mistakes, an escape hatch is a feature:
// restore dedupes with the same strength-ordered chain as discovery
function jab_restore_job($job) {
if (jab_find_by_position_id($job['position_id'])) { return 'skipped'; }
if (get_page_by_path($job['slug'], OBJECT, 'jab_job')) { return 'skipped'; }
if (jab_find_by_title($job['title'])) { return 'skipped'; }
return jab_import_standard($job) ? 'created' : 'failed';
}
The non-code product surface took real effort and repaid it, install order documented plainly, plugin first, then theme, then Settings, Permalinks, Save, because rewrite rules need flushing and a buyer cannot debug that, honest requirements, and answers to the questions buyers actually ask, does deleting the plugin delete my jobs, no, posts outlive plugins, what do the status counts mean. Every support question answered in advance is margin.
And the honest state, as always, the product is real, versioned, packaged with its companion theme, and prepared for marketplace listing, with job.army as its living demonstration site. The deeper change was identity, the site had been the goal and became the showroom, and the plugin I had built to fill one parked domain had become the most complete piece of software I owned, which is a strange and good thing to discover by upgrading your way into it.
A few things people ask me about this
What do buyers of WordPress products actually need most? A working site fast and no surprises, an installer, correct install order, safe updates, and an export path. Feature lists sell clicks, these four prevent refunds.
Why does restore skip instead of overwrite by default? Because restores run on sites with live data, and skip-by-identity is the non-destructive default. Overwriting is a choice a user should make explicitly, never a surprise.
Next
From a parked domain to an engine that builds job boards, the arc closes. The finale weighs the whole journey honestly, including the wall this board still faces.
