For years, job.army sat parked, a domain I owned, showing someone else’s ads, earning pennies. The domain investing series later in this blog is honest about why parking never pays, but this project is what happened when I finally acted on the conclusion, the domain became a federal jobs board, and this post is the founding decision, what to build on a name like job.army and how the first line of real code framed everything after.
The name decided the niche. Army plus jobs points one direction, United States federal and military-adjacent employment, and that niche has a property most job niches do not, an official, free, public data source, which the next posts explore. The founding technical decision was what a job is inside WordPress, and the answer is a custom post type, jobs are content with their own fields, their own archives, and their own lifecycle, and the plugin’s opening move declares exactly that:
/*
* Plugin Name: USAJOBS Board
* Description: Federal job board engine for job.army
* Version: 1.0.0
*/
if (!defined('ABSPATH')) { exit; }
add_action('init', 'jab_register_types');
function jab_register_types() {
register_post_type('jab_job', array(
'labels' => array('name' => 'Jobs', 'singular_name' => 'Job'),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'jobs'),
'supports' => array('title', 'editor', 'custom-fields'),
'menu_icon' => 'dashicons-businessman',
));
}
Small choices there with long consequences. The jab_ prefix on everything, post type, functions, options, keeps this plugin from colliding with any other, the same namespacing discipline as every project since the limo build. has_archive gives the board a /jobs/ listing for free, and the rewrite slug makes job URLs read as job.army/jobs/position-name, which is the URL a job board should have. And supports custom-fields matters because a job is mostly structured data, salary, location, department, closing date, that will live in post meta beside the content.
The scope decision was equally deliberate, one niche done properly before any dream of generality. The plugin that eventually became a universal any-niche board, the product post near the end of this series, only got there because it first became excellent at exactly one thing, and the parked domain earning pennies became the test bench where that excellence got built.
A few things people ask me about this
Why a custom post type instead of normal posts with a category? Because jobs have their own fields, archives, templates, and lifecycle, expiry, refresh, that blog posts do not. A CPT keeps the two content worlds separate in the admin and in queries.
Do job posts survive if the plugin is deleted? Yes. Posts and their meta live in the database, not the plugin folder. Deleting the plugin removes the engine, the content remains and returns when the plugin does.
Next
A registered post type and an empty archive is a board with no jobs, and typing hundreds of federal listings by hand was never the plan. The empty-board problem, and the case for automation, is the next post.
