Fleet {{ stamp }}

{{ err }}

These pages read data/index.json, data/coverage.json and data/keywords.json at runtime. Build and serve with uv run scripts/build_site.py --serve.

Reading the index…

Items indexed
{{ items.length }}
{{ D.meta.window_start }} → {{ D.meta.generated_on }}
Published / month
{{ Math.round(cadenceAvg.recent) }}
last 6 months, {{ cadenceAvg.recent >= cadenceAvg.early ? 'up' : 'down' }} from {{ Math.round(cadenceAvg.early) }} at the window's start
Untagged
{{ untagged.length }}
{{ (untaggedRate*100).toFixed(1) }}% · {{ untaggedLabel }}
Tags gone quiet
{{ quietTags.length }}
of {{ allTags.length }} tags, nothing new in 90+ days
Matrix gaps
{{ cross.empty }}
empty cells of {{ cross.total }} {{ title(rowsFacet).toLowerCase() }} × {{ title(colsFacet).toLowerCase() }}

Coverage is counted on primary tags only — a passing mention is not coverage. {{ gap.length }} of {{ allTags.length }} tags are mentioned at least twice as often as they are the subject; that list is further down and is the sharpest brief in the dataset.

Shortlist collections by author and platform — add them to your saved list

{{ collections.length }} collections saved list · {{ basket.length }} →

Collectiontopicspieceslatest

A collection is three or more pieces by one author with the same primary platform, like Anthony Critelli's Linux desktop series. Saved items persist in this browser and open in the call companion, which orders them and copies them out.

Cadence click a month to list what shipped

Items published per month{{ months.length }} months

{{ drillLabel }}{{ drillItems.length }} items
  1. {{ it.date }}{{ it.title }}{{ it.category }}

Coverage matrix {{ cross.empty }} empty cells of {{ cross.total }}{{ structuralAxis ? ' — where these two axes do not meet' : ' — each one is a piece nobody has written' }}

× {{ cross.rows.length }} rows

Invalid regex — showing everything.
{{ title(rowsFacet) }} {{ c }} primary mentioned
{{ r.tag }}
nonemost
{{ drillLabel }}{{ drillItems.length }} items open in link finder
  1. {{ it.date }}{{ it.title }}{{ it.category }}

Nothing is primary-tagged with both. That is the gap — and the brief.

Named more than covered mentioned at least twice as often as it is the subject

The brief, widest gap first{{ gap.length }} tags

Tagfacetprimarymentionedgaplast publishedread
{{ t.tag }} {{ title(t.facet) }} {{ t.primary }} {{ t.men }} +{{ t.gap }} {{ t.last || 'never' }} finder →

Read the gap column as demand you created and did not meet. A tag near the top is one your own writing keeps raising — the articles that mention it are already doing the work of arguing it matters, and there is nothing to link to.

Thin coverage two primary items or fewer — the shortlist

Where the calendar has room{{ thin.length }} tags

Tagfacetprimarymentionedlast publishedread
{{ t.tag }} {{ title(t.facet) }} {{ t.primary }} {{ t.men }} {{ t.last || 'never' }} finder →

The rows where mentioned is high and primary is zero or one are the sharpest brief you have: readers are being told the topic matters and then sent nowhere.

Momentum and staleness what is rising, what has gone quiet

Share of recent vs earlierlast 6 vs prior {{ D.meta.window_months - 6 }} months

{{ m.tag }} {{ m.d >= 0 ? '+' : '' }}{{ m.d.toFixed(1) }} pts

A rising share is not more output — it is a bigger slice of it. Both sides matter: the falling half is where you used to lead.

Time since last primary use{{ stale.filter(s => s.days === null).length }} never used

{{ s.tag }} {{ s.label }}

Dormant is not automatically bad — some tags describe things that only ship once. It is bad when it describes something you sell.