Release ledger

Change Notes

Public release tracker focused on shipped website capabilities and user-facing outcomes.

Current: v2.4.49 Released 2026-05-01
/search gthencchanges ?shortcuts
Fine-grained tags (171)

v2.4.49 2026-05-01 uxheadersconsistencytypography

Header action top-align + tighter divider spacing across shared surfaces

Updated shared header layout so action rails anchor to the top-right and tightened divider spacing; also widened description rail to avoid awkward writing-summary wraps.

Why it matters: Header buttons now consistently sit at the top, divider feels closer to content, and writing summary wraps less aggressively.

Changed

  • Updated `SurfaceHeader` desktop alignment from bottom-anchored to top-anchored actions (`align-items:flex-start` on row/actions).
  • Tightened shared header bottom spacing (`surface-header` and row padding/gap tokens) to bring divider line closer to content.
  • Expanded default description width ceiling and main max width to reduce premature wrapping in writing header summary.
  • Updated writing and experience header action wrappers to top alignment (`md:items-start`).
  • Updated profile compact header override to top-align with shared behavior while keeping description rail suppressed.

Improved

  • Resolved repeated user-reported header action vertical misalignment and awkward writing line breaks.
v2.4.48 2026-05-01 cideployperformance

Deploy speed pass: streamlined push-path workflow

Reduced deploy critical-path time by removing redundant lint gates from deploy-dev-pages and limiting optional analytics/smoke steps to manual deploys.

Why it matters: Push-triggered Pages deploys now run on a faster build-and-publish path while quality checks remain enforced in dedicated a11y/linkcheck/lighthouse workflows.

Changed

  • Removed lint gates (`lint:content`, `lint:seo`, `lint:config`) from `deploy-dev-pages` push critical path.
  • Limited optional Plausible fetch steps to `workflow_dispatch` runs only.
  • Limited preview smoke test to `workflow_dispatch` runs only.

Improved

  • Faster push-based deploy turnaround with less duplicated CI work.
v2.4.47 2026-05-01 uxprofilespacing

Profile header micro-gap cleanup under title

Removed residual reserved-description spacing in profile header that left an awkward empty gap below "Profile".

Why it matters: Profile top shell now sits tighter and cleaner with no phantom description rail spacing.

Changed

  • Profile-only header override now suppresses hidden description placeholder and zeroes description margin/line-height.

Improved

  • Eliminated visual dead-space under profile title while preserving right-rail alignment.

Fixed

  • Resolved user-reported weird gap/spacing under profile header words.
v2.4.46 2026-05-01 uxprofileheadersconsistency

Profile header rail alignment correction (single-line + vertical centering)

Adjusted profile header compact overrides so the resume/clearance rail stays single-line and vertically aligned with the header title region instead of dropping to the lower border.

Why it matters: Profile top shell now presents the right rail in a cleaner, intentional position while preserving no-wrap behavior.

Changed

  • Added profile-specific `SurfaceHeader` token overrides and md+ vertical-centering rules for the header/action row via `profile-header-compact` class.

Improved

  • Eliminated low-slung action rail presentation shown in screenshot while keeping one-line rail requirement.

Fixed

  • Resolved follow-up profile header layout issue after initial one-line rail hard-lock.
v2.4.45 2026-04-30 uxprofiletypographyconsistency

Profile header rail hard-lock: single-line resume + clearance

Converted profile header actions into one non-wrapping inline rail (resume link + separator + clearance) to prevent any stacked rendering.

Why it matters: Profile header now preserves one-line action presentation consistently at desktop widths.

Changed

  • Refactored `/profile/` action slot to a single `inline-flex` + `whitespace-nowrap` line containing `Resume PDF ↗` and `Clearance: ...`.

Improved

  • Eliminated residual action-rail stacking behavior reported after prior fix.

Fixed

  • Addressed follow-up user report that profile header actions were still not on one line.
v2.4.44 2026-04-30 uxconsistencyprofile

Profile header action rail: inline resume + clearance alignment

Updated profile top-header actions so resume link and clearance metadata render on one line instead of stacked rows.

Why it matters: Profile header right rail now matches expected single-line action layout at desktop widths.

Changed

  • Updated `/profile/` header action slot to inline `Resume PDF ↗` and `Clearance: ...` with nowrap behavior.

Improved

  • Reduced visual misalignment and removed unwanted two-line stack in profile top shell.

Fixed

  • Resolved user-reported profile header action wrapping issue.
v2.4.43 2026-04-30 uxtypographyconsistency

Header description wrap tuning to avoid awkward mid-phrase breaks

Increased shared header description line-width ceiling so short operational summaries do not wrap prematurely into awkward two-line splits.

Why it matters: Status and other surface headers keep description copy on one line more often at desktop widths while preserving responsive wrap behavior.

Changed

  • Updated `SurfaceHeader` description max width from fixed `66ch` to tokenized `--surface-header-description-max-width` with wider default `84ch`.

Improved

  • Reduced awkward phrase-splitting wraps such as the reported `/status/` operations description break.

Fixed

  • Addressed user-reported line break between “for” and “events” in status header description.
v2.4.42 2026-04-30 uxconsistencyheaderstypography

Header spacing uniformity pass across Writing/Profile/Capabilities surfaces

Standardized shared header description rail spacing and aligned first-section top offsets to remove page-to-page header rhythm drift.

Why it matters: Writing, Profile, Capabilities, and other `SurfaceHeader` pages now present more uniform top-shell spacing and action-rail alignment.

Changed

  • Updated `SurfaceHeader` to always reserve description-rail space (with a hidden placeholder when description is absent) so title/action rows keep consistent vertical rhythm.
  • Added shared description min-height tokens in `SurfaceHeader` for desktop/mobile spacing uniformity.
  • Aligned `/capabilities/` first content section offset to `md:mt-5` to match Writing/Profile top-gap behavior.

Improved

  • Reduced visible spacing drift across the pages highlighted by user screenshots.

Fixed

  • Resolved inconsistent top-header spacing and forced-variance feel between Writing, Profile, and Capabilities pages.
v2.4.41 2026-04-30 uxconsistencytypography

UX cleanup: remove forced line-break balancing from surface headers

Removed CSS-driven forced title balancing in shared surface headers to prevent awkward line breaks like the reported /status/ “Operations Status” split.

Why it matters: Status and all other pages using `SurfaceHeader` now render header titles with natural wrapping instead of forced balancing behavior.

Changed

  • Removed `text-wrap: balance` from `src/components/SurfaceHeader.astro` title styling so line breaks are no longer forced by balancing logic.

Improved

  • Eliminated the forced-break pattern across all shared surface headers, including `/status/`.

Fixed

  • Resolved reported /status/ header description/title wrapping annoyance caused by balanced wrapping behavior.
v2.4.40 2026-04-30 architecture12-factorciops

12-factor hardening: config contract lint + env-aware analytics candidates

Added a deterministic environment/config lint gate, wired it into core CI workflows, and removed more hardcoded domain assumptions in analytics/OG generation scripts.

Why it matters: Build/deploy safety improves with earlier config failures, while analytics and OG tooling now adapts more cleanly to domain/environment changes.

Added

  • Added `scripts/lint-config-env.mjs` to validate `.env.example` key presence and URL/email/E.164 formatting contracts.
  • Added `npm run lint:config` script in `package.json`.

Changed

  • Integrated config/env lint into CI workflows: a11y, lighthouse, linkcheck, and deploy-dev-pages.
  • Updated Plausible pageviews/funnel candidate resolution to include host derived from `PUBLIC_SITE_URL` before legacy fallbacks.
  • Updated OG image generator kicker text to derive from configured `PUBLIC_SITE_URL` host instead of fixed domain literals.

Improved

  • Reduced configuration drift risk and tightened preferred-practice CI guardrails for environment portability.
v2.4.39 2026-04-30 architecture12-factorconfigops

12-factor continuation: env-driven robots + contact submit endpoint

Moved robots sitemap origin and contact form submit routing behind environment-backed configuration and reduced hardcoded domain coupling in support scripts.

Why it matters: Deploy portability improved again: environment/domain moves no longer require editing robots or contact submit code paths, and crawler/plausible defaults now respect environment context.

Added

  • Added env-backed contact form endpoint support (`PUBLIC_CONTACT_FORM_ENDPOINT`) via shared site config.
  • Added generated `src/pages/robots.txt.ts` that derives sitemap URL from configured site origin.

Changed

  • Updated contact form page/script wiring to use dataset-provided submit endpoint + subject prefix instead of hardcoded values.
  • Replaced static `public/robots.txt` with generated route to keep sitemap origin environment-consistent.
  • Updated Plausible sitemap analytics defaults and radar crawler user-agent contact URLs to honor environment variables.

Improved

  • Reduced source edits required when moving across domains/environments and tightened 12-factor operational hygiene.
v2.4.38 2026-04-30 architecture12-factorconfigquality

12-factor config pass: centralized site/contact env wiring

Moved key site identity and contact wiring to environment-driven config, removed hardcoded public URLs/emails from page surfaces, and documented runtime/build config contract.

Why it matters: UI and metadata are now easier to deploy across domains/environments without source edits, improving portability and preferred-practice configuration hygiene.

Added

  • Added `src/config/site.ts` with centralized `PUBLIC_SITE_URL`, `PUBLIC_CONTACT_EMAIL`, and `PUBLIC_CONTACT_PHONE_E164` handling plus helper builders (`absoluteUrl`, `contactMailto`).
  • Added `.env.example` documenting public runtime and build-time analytics variables.

Changed

  • Replaced hardcoded canonical origins in core pages (`/contact/`, `/sitemap/`, `/changes/`, `/license/`, `/events/`, `/events/sources/`, `/capabilities/`) with env-driven `absoluteUrl(...)` calls.
  • Replaced hardcoded contact links in homepage/contact/writing-detail surfaces with `contactMailto(...)` and env-backed E.164 tel wiring.
  • Updated profile JSON-LD page URL and status analytics sitemap fallback URL to derive from shared site config.

Improved

  • Improved deployment portability and reduced source-level edits required for environment/domain changes.
v2.4.37 2026-04-30 speakingcilinkcheckreliability

Link-check reliability hardening for NavalX speaking entry

Replaced an intermittently unresolved NavalX host URL in speaking data with a stable authoritative Black Pearl URL to reduce strict-linkcheck flakes.

Why it matters: Speaking data remains accurate while avoiding DNS-related CI failures during strict external-link validation.

Changed

  • Updated NavalX speaking event `eventUrl` from `https://www.navalx.navy.mil/` to `https://blackpearl.navy.mil/`.

Improved

  • Reduced recurring strict-linkcheck instability caused by intermittent DNS resolution failures.
v2.4.36 2026-04-30 uxconsistencyheadersquality

Sterling pass: header baseline lock + remaining index-surface unification

Locked shared header baseline metrics to reduce micro-jitter across page switches and migrated remaining background index pages to the shared page-header wrapper.

Why it matters: Header position and action-rail alignment are more stable across desktop transitions; experience/education indexes now use the same shared top-shell framing as other surfaces.

Changed

  • Updated `SurfaceHeader` with shared row/action min-height baseline tokens to reduce subtle cross-page header shift on larger breakpoints.
  • Migrated `/experience/` index and `/education/` index to `SurfacePageHeader` for consistent sticky-nav + header composition.

Improved

  • Reduced visual jitter when switching between pages with different header action payloads.

Fixed

  • Updated NavalX speaking event URL to `https://blackpearl.navy.mil/` to avoid intermittent DNS failures on `www.navalx.navy.mil` in strict link checks.
v2.4.35 2026-04-30 uxconsistencyheadersrefactor

Header-frame stabilization across core navigation surfaces

Unified top-of-page scaffolding on core pages to reduce subtle cross-page header drift when switching between main surfaces.

Why it matters: Writing, Profile, Events, Opportunities, capability-topic pages, and writing-tag detail pages now share one header wrapper pattern with consistent sticky-nav + header alignment behavior.

Changed

  • Migrated `/profile/` header framing to `SurfacePageHeader`.
  • Migrated `/writing/` header framing to `SurfacePageHeader`.
  • Migrated `/writing/tags/[tag]/` header framing to `SurfacePageHeader`.
  • Migrated `/capabilities/[slug]/` header framing to `SurfacePageHeader`.
  • Migrated `/opportunities/` header framing to `SurfacePageHeader`.
  • Migrated `/events/` header framing to `SurfacePageHeader` and removed extra top-margin wrapper offset (`mt-2`) causing subtle page-to-page shift.

Improved

  • Reduced top-shell alignment variance across core nav destinations when toggling between pages.

Fixed

  • Addressed reported subtle header position shifting across primary surfaces.
v2.4.34 2026-04-30 refactorformattingreusequality

Pretty-code foundation + broader shared header adoption

Added first-class Prettier tooling and migrated additional surfaces to the shared page-header wrapper for cleaner, more reusable page framing.

Why it matters: Code style is now enforceable with one formatter command, and more pages use shared top-of-page composition instead of duplicating sticky/header boilerplate.

Added

  • Added Prettier setup (`prettier`, `prettier-plugin-astro`, `.prettierrc`, `.prettierignore`).
  • Added npm scripts: `format` and `format:check` for consistent code-style enforcement.

Changed

  • Migrated `/contact/`, `/404/`, `/sitemap/`, `/events/sources/`, `/capabilities/`, and `/writing/tags/` to use `SurfacePageHeader`.
  • Extended `SurfacePageHeader` sticky-nav typing to cover all sticky route keys used by `StickyBrowseBar`.

Improved

  • Reduced duplicated header framing across more surfaces and tightened maintainability for future UI changes.
v2.4.33 2026-04-30 refactorreuseheaderslayout

Shared surface-page header wrapper introduced and adopted

Added a reusable page-header wrapper that combines mobile sticky browse + standardized SurfaceHeader framing, then migrated multiple pages to it.

Why it matters: Reduced header boilerplate and improved consistency by routing common top-of-page layout patterns through one shared component.

Added

  • Added `src/components/SurfacePageHeader.astro` to compose `StickyBrowseBar` + `SurfaceHeader` with shared action/content slots.

Changed

  • Migrated `/speaking/` top-of-page framing to `SurfacePageHeader`.
  • Migrated `/status/` top-of-page framing to `SurfacePageHeader`.
  • Migrated `/status/site-analytics/` top-of-page framing to `SurfacePageHeader`.
  • Migrated `/blog/` top-of-page framing to `SurfacePageHeader`.

Improved

  • Established a clearer path for additional page migrations to shared header scaffolding.
v2.4.32 2026-04-30 refactorreuseprofilespeakingux

Shared modal controller extracted for profile and speaking surfaces

Replaced duplicated modal behavior code with a shared controller utility used by both profile and speaking, improving reuse and consistency.

Why it matters: Modal focus trapping, escape handling, scroll locking, close timing, and restore-focus behavior now follow one shared implementation path.

Added

  • Added `src/scripts/ui/modal-controller.ts` shared utility for modal open/close lifecycle, focus trap, and body scroll lock behavior.

Changed

  • Refactored `/profile/` modal script to use shared modal controller instead of inline duplicated modal state logic.
  • Refactored speaking modal script in `SpeakingEventsSection` to use the same shared modal controller path.

Improved

  • Reduced duplicated modal behavior code and lowered drift risk between profile and speaking interactions.
v2.4.31 2026-04-30 uxconsistencyheaderslayout

Surface-header consistency pass across core pages

Normalized page-header structure so secondary surfaces match the same visual rhythm as Writing/Profile, and migrated Writing/Profile to shared header framing for cross-site consistency.

Why it matters: Top-of-page formatting is now more uniform across primary and secondary surfaces, reducing header drift while preserving page-specific actions.

Changed

  • Migrated `/writing/` and `/profile/` top sections to the shared `SurfaceHeader` component with existing actions preserved.
  • Aligned `SurfaceHeader` typography, spacing, border treatment, and action styling to match the established Writing/Profile framing pattern.

Improved

  • Reduced cross-page visual variance in eyebrow/title/description/action alignment.

Fixed

  • Addressed inconsistent header/page framing across non-Writing/Profile surfaces.
v2.4.30 2026-04-30 speakinguxinteraction

Speaking title affordance pass (link clarity)

Made speaking engagement titles look unmistakably clickable by switching to accent link styling with underline and external-link cue.

Why it matters: Users can now immediately recognize speaking titles as interactive controls that open detailed modal context.

Changed

  • Updated speaking title button style to use link-color treatment, underline, and a small `↗` cue on card titles.

Improved

  • Increased visual affordance for modal-open interactions on speaking cards.
v2.4.29 2026-04-30 speakingcontentcorrectioncybersecurityagile

Speaking updates: NavalX title correction + OPNAV N7 C2C24 engagement added

Updated the NavalX event naming and added a 2020 OPNAV N7 MyNavy HR cybersecurity off-site opening presentation entry focused on C2C24.

Why it matters: Speaking history now reflects corrected NavalX event naming and includes the newly added OPNAV N7 leadership talk context with RDML Danelle Barrett reference.

Added

  • Added speaking event `opnav-n7-mynavyhr-cybersecurity-offsite-c2c24-2020` with C2C24 opening-presenter context in `src/data/speaking.ts`.

Changed

  • Renamed NavalX event display title to `NavalX Center for Adaptive Warfighting Scrum for Leaders` per user correction.
  • Used `2020 (exact date not publicly listed)` for the new OPNAV N7 entry where exact date is unavailable.

Improved

  • Expanded speaking taxonomy with C2C24/MyNavy HR/OPNAV N7 tags for filter discoverability.
v2.4.28 2026-04-30 speakingcontentcorrection

Speaking date correction for NavalX Scrum for Leaders entry

Updated the newly added NavalX speaking engagement date from provisional May 7 to confirmed June 9, 2022.

Why it matters: Speaking timeline now reflects the corrected event date while keeping the same role and context details.

Changed

  • Updated `eventDateRange` to `Jun 9, 2022` for `navalx-scrum-for-leaders-2022-agile-cyber-software`.
  • Updated session text to `Thu, Jun 9, 2022 · exact session time not publicly listed`.

Fixed

  • Corrected prior fallback date based on user-provided confirmation.
v2.4.27 2026-04-30 speakingprofilecontentagilecybersecurity

Speaking entry added for NavalX Scrum for Leaders (2022)

Added a new speaking engagement covering agile leadership in cybersecurity and software development during Black Pearl support to PEO Digital PAS Software Practice & Automation.

Why it matters: Speaking timeline now includes the 2022 NavalX guest session with role/context details and topic tags aligned to cyber + software leadership themes.

Added

  • Added speaking event `navalx-scrum-for-leaders-2022-agile-cyber-software` in `src/data/speaking.ts`.

Changed

  • Set event date fallback to `May 7, 2022` pending publicly verifiable exact session timestamp.
  • Included augmented context in event summary (Black Pearl outreach/onboarding/planning leadership + PEO Digital PAS support scope).

Improved

  • Expanded topic taxonomy coverage with agile-leadership and DevSecOps-adjacent tags for speaking filter discoverability.
v2.4.26 2026-04-30 profilespeakingmobileux

Modal close-button anchoring fix for mobile

Stabilized modal close-button placement so the `✕` remains pinned at top-right regardless of content length or wrap.

Why it matters: Profile and speaking modals no longer shift close-control position as title/meta content changes on smaller screens.

Changed

  • Updated `.profile-modal-head`/`.profile-modal-close` to use reserved right padding + absolute-positioned close control.
  • Applied the same anchoring pattern to `.speaking-modal-head`/`.speaking-modal-close` for consistency across modals.

Improved

  • Close control now has predictable tap target location independent of dynamic text wrapping.

Fixed

  • Resolved reported mobile issue where modal close button position changed with content.
v2.4.25 2026-04-30 profilemobileuxlayout

Profile mobile overflow fix for education/experience cards

Fixed horizontal text overflow in profile mobile cards by hardening width constraints and word wrapping.

Why it matters: Long credential and role text now wraps cleanly on narrow screens without clipping or side-scroll artifacts.

Changed

  • Updated mobile experience and education card wrappers in `/profile/` with `min-w-0` on button and flex rows.
  • Applied explicit text wrapping (`break-words` + `overflow-wrap:anywhere`) to role/credential lines to prevent overflow.

Improved

  • Improved consistency of mobile profile card rendering under long institution and certification names.

Fixed

  • Resolved reported mobile overflow in Education & Certifications cards.
v2.4.24 2026-04-30 speakinguxprofileinteraction

Speaking UX pass: clickable tags + modalized detail + simplified links

Refined speaking cards to prioritize scan clarity by moving dense metadata into a click-open modal and making topic tags interactive filters.

Why it matters: Speaking entries now show cleaner summaries by default, with one clear outbound event link and fast in-section tag filtering for topic exploration.

Added

  • Added interactive topic-tag filtering controls (including Clear) in `SpeakingEventsSection`.
  • Added speaking-detail modal opened by clicking engagement titles, with keyboard focus trap + close affordances.

Changed

  • Moved extraneous speaking metadata (When/Stage/Track/Role/Speaker profile/Sponsorship) from inline cards into the modal.
  • Kept a single external URL per engagement (`Event Name ↗`) and removed the trailing source URL row.

Improved

  • Unified tag interaction model across top-level topic chips and per-card tag chips for faster browsing.
v2.4.23 2026-04-30 seowritinguxsyncci

SEO hardening phase 2 + writing UX/polish + sync guardrails

Shipped a broad second-phase SEO and UX batch: stronger writing schema/metadata, CI SEO linting, profile modal hardening, edge-header normalization, and whitepaper sync safety checks.

Why it matters: Search metadata and schema coverage are more resilient, writing pages gained better share/citation affordances and read-time context, profile modals now behave more accessibly, and sync pipelines now guard against silent published-note loss.

Added

  • Added `scripts/lint-seo-guards.mjs` and wired it into `a11y`, `deploy-dev-pages`, `linkcheck`, and `lighthouse` workflows.
  • Added Whitepaper sync protection in `.github/workflows/sync-whitepaper.yml` to detect missing previously published notes and fail unless explicitly allowed (`SYNC_ALLOW_REMOVED_NOTES=true`).
  • Added sync diagnostics artifact upload (`sync-whitepaper-diagnostics`) for removal debugging.

Changed

  • Upgraded writing detail schema to consistent `Article` JSON-LD coverage across notes, memos, and papers (papers include `additionalType: Report`).
  • Enhanced writing detail UX with citation-copy action (`📚 Cite`), canonical link strip, related-label clarity, and estimated read-time display.
  • Tightened writing/capabilities SEO metadata copy for stronger intent-aligned snippets.
  • Extended sticky TOC visibility from `2xl` to `xl` and tuned TOC/right-rail spacing for earlier availability on large screens.
  • Normalized edge surface headers and semantics on `/404/`, `/license/`, and `/content-license/` to reduce style drift and improve index hygiene.
  • Hardened profile detail modals with focus trapping, return-focus behavior, iOS-safe body scroll locking, transition polish, and swipe-down close gesture support.

Improved

  • `SurfaceHeader` now supports tokenized CSS variables for consistent eyebrow/title/description/action spacing control.
v2.4.22 2026-04-30 writingheaderuxconsistency

Writing header aligned to Profile formatting

Adjusted `/writing/` top header to match the visual hierarchy and spacing rhythm used on `/profile/`.

Why it matters: Writing now uses the same cleaner border-bottom header structure as Profile, removing the subtle formatting mismatch between the two key surfaces.

Changed

  • Replaced `/writing/` `SurfaceHeader` usage with the same `pb/pt + border-b + title stack` pattern used on `/profile/`.
  • Kept Writing actions (`Browse tags`) while aligning typography, label casing, spacing, and right-rail alignment to Profile style.

Improved

  • Reduced cross-surface visual drift between the two most frequently compared navigation surfaces.
v2.4.21 2026-04-30 profileuxwritingsync

Profile modal interaction + CVEAgentNet note restoration

Moved profile experience and education detail expansion into click-to-open modals and restored the CVEAgentNet note path that had fallen out after Whitepaper sync.

Why it matters: Profile scanning is now cleaner with on-demand detail views, and the CVEAgentNet note URL is restored and durable through upstream Whitepaper source sync.

Added

  • Added profile detail modal system on `/profile/` with keyboard-close support (`Esc`) and reusable trigger wiring for table and mobile card views.

Changed

  • Replaced in-page experience and education expansion blocks with modal-driven detail presentation when company/role or credential rows are clicked.
  • Restored `src/content/writing/notes/2026-04-29-cveagentnet-next-control-plane-vulnerability-management.md` after upstream sync removed it from site content.

Improved

  • Kept CVEAgentNet note durable by adding the same note into the Whitepaper source repository so scheduled sync no longer deletes it.

Fixed

  • Fixed `/writing/2026-04-29-cveagentnet-next-control-plane-vulnerability-management/` returning 404 after sync.
v2.4.20 2026-04-30 uxstylingconsistencynavigation

Unified surface header system across writing, capability, ops, and utility pages

Replaced boxed control-shell title blocks with the cleaner Profile-style header treatment across major site surfaces.

Why it matters: Top-level surfaces now share a consistent, less-boxed visual rhythm with eyebrow/title/description hierarchy and right-rail actions, improving scan flow and cross-page cohesion.

Added

  • Added reusable `src/components/SurfaceHeader.astro` component with support for eyebrow labels, action slots, and supplemental metadata rows.

Changed

  • Adopted the new surface header style on `/writing/`, `/writing/tags/`, `/writing/tags/[tag]/`, `/capabilities/`, `/capabilities/[slug]/`, `/opportunities/`, `/status/`, `/status/site-analytics/`, `/contact/`, `/speaking/`, `/experience/`, `/education/`, `/blog/`, `/events/sources/`, `/sitemap/`, and `/changes/`.
  • Updated `/events/` to use a Profile-style top header while retaining radar controls and filters in the existing control shell below.

Improved

  • Normalized top-of-page hierarchy and spacing so surface headers feel consistent regardless of route function (content, operations, or utility).
v2.4.19 2026-04-29 writingtypographyux

Writing readability pass: expanded note paragraph spacing

Improved readability for note-style writing entries by increasing paragraph spacing in the main content block.

Why it matters: Long and medium-length notes now scan more comfortably with clearer visual separation between ideas, including the new CVEAgentNet note.

Changed

  • Adjusted note-page paragraph spacing via `article[data-writing-type="note"] .paper-content p` in `src/styles/global.css`.
v2.4.18 2026-04-29 seometadataindexingschema

SEO hardening pass: snippet quality + index hygiene

Strengthened branded-search quality by improving top-surface metadata and noindexing utility/duplicate surfaces that were diluting SERP results.

Why it matters: Home/profile/capabilities/writing descriptions are more specific, profile now includes ProfilePage schema, and low-priority operational pages are explicitly marked `noindex,follow` to concentrate index authority on core surfaces.

Added

  • Added `noindex` support in `BaseHead`/`SiteLayout` (`robots` + `googlebot` tags).
  • Added `ProfilePage` JSON-LD on `/profile/`.

Changed

  • Updated core descriptions for stronger branded snippets (`SITE_DESCRIPTION`, `/profile/`, `/capabilities/`, `/writing/`).
  • Applied `noindex={true}` to utility and duplicate surfaces: `/opportunities/`, `/events/`, `/events/sources/`, `/status/*`, `/changes/`, `/sitemap/`, `/blog/`, `/credentials/`, `/experience/*`, `/education/*`.
v2.4.17 2026-04-29 profileuxnavigation

Profile row-level links restored as in-page anchors

Restored row-level link behavior for experience and education while keeping all navigation inside `/profile/`.

Why it matters: Clicking rows/cards now jumps to detailed in-page anchor blocks (`#exp-*`, `#edu-*`) on `/profile/` instead of navigating to separate pages.

Added

  • Added in-page detail anchor sections for each experience and education record within `/profile/`.

Changed

  • Restored row-level links in desktop tables and mobile cards to target profile-local anchors.
v2.4.16 2026-04-29 profilenavigationspeakingux

Profile-first consolidation + tools dropdown + second speaking engagement

Removed profile-page detours, promoted a cleaner profile header, demoted Events/Opportunities under Tools navigation, and added another speaking panel entry.

Why it matters: `/profile/` is now the primary background surface without "full page" escape links. Nav now prioritizes `Writing`, `Profile`, and `Capabilities`, with `Events` and `Opportunities` grouped under `Tools`. Speaking entries now include both Modern Day Marine 2026 and DON Red Hat PAX River 2024 panel participation.

Added

  • Added speaking engagement: DON Red Hat PAX River Tech Day (Partner Lunch Panel featuring AWS, KBR, Confluent, Colossal), with topic tags and KBR panel contribution summary.

Changed

  • Replaced header hub labels with a `Tools` dropdown that groups `Events` and `Opportunities` on desktop and mobile.
  • Reworked `/profile/` top header section into a cleaner, non-boxed layout with stronger hierarchy.
  • Removed `Full experience page` and `Full education page` links and in-section deep-link wrappers so background content is fully consumed within `/profile/`.
v2.4.15 2026-04-29 cideployperformancemedia

CI/deploy loop acceleration baseline + external media toggle

Reduced wasted CI runtime by canceling superseded runs and prepared deploy pipeline to drop heavy audio payloads when external media hosting is configured.

Why it matters: a11y/linkcheck/lighthouse now auto-cancel older runs on the same ref. Deploy workflow no longer runs paper/memo lint gates and can omit `dist/audio` from Pages artifacts when `PUBLIC_MEDIA_BASE_URL` is set, enabling a much faster deploy loop once media is externalized.

Added

  • Added `src/utils/mediaUrl.ts` to resolve audio URLs via optional `PUBLIC_MEDIA_BASE_URL`.
  • Added deploy step to trim `dist/audio` from artifact when external media base URL is configured.

Changed

  • Updated `WritingAudioPlayer` to use media URL resolver (supports external media hosting without content-schema changes).
  • Added `concurrency` + `cancel-in-progress` for `a11y`, `linkcheck`, and `lighthouse` workflows.
  • Removed `lint:papers` and `lint:memos` steps from `deploy-dev-pages` to keep deploy focused on build + smoke + publish.
v2.4.14 2026-04-29 speakingcontent-modeleventsux

Speaking restructured by event with topic tags and sponsorship metadata

Replaced placeholder speaking layout with an event-indexed format and seeded the first engagement entry from Modern Day Marine 2026.

Why it matters: `/speaking/` is now a real destination (no redirect language) with event cards, topic tags, and reusable sponsorship modeling (`employer` / `external` / `self`). Profile now reuses the same speaking event block so content stays synchronized.

Added

  • Added `src/data/speaking.ts` with normalized speaking-event schema, topic-tag derivation, and sponsor labeling helpers.
  • Added reusable `src/components/SpeakingEventsSection.astro` for event-card rendering and tag display.
  • Added first speaking entry: Modern Day Marine 2026 (MBSE talk, Acquisition Stage, Apr 28, 2026).

Changed

  • Converted `/speaking/` into an event-based speaking page with topic tags and metadata, removing redirect-only behavior.
  • Updated `/profile/` speaking section to use the shared event-based component and removed legacy/upcoming-past placeholder framing.
v2.4.13 2026-04-29 navigationuxheadermobile

Nav label cleanup: remove hub captions from header and mobile rail

Dropped the explicit `Profile` and `Capability` hub labels in favor of a cleaner direct-link navigation model.

Why it matters: Top navigation now reads as direct links in priority order: `Writing`, `Profile` | `Capabilities`, `Events`, `Opportunities` across desktop and mobile.

Changed

  • Removed `Profile`/`Capability` text labels from desktop header nav in `src/components/Header.astro`.
  • Flattened mobile sticky nav into one horizontal rail with a visual separator after `Profile` in `src/components/StickyBrowseBar.astro`.
v2.4.12 2026-04-29 navigationprofilespeakinginformation-architecture

Header simplification: Speaking folded into unified Profile surface

Finalized top-nav strategy by removing a standalone speaking slot and consolidating speaking, experience, and education under one Profile destination.

Why it matters: Header now follows a tighter two-hub model (`Profile`: Writing + Profile, `Capability`: Capabilities + Events + Opportunities). The Profile page now includes a full Speaking section, while `/speaking/` remains as a compatibility pointer to `Profile → Speaking`.

Added

  • Added dedicated Speaking section inside `src/pages/profile/index.astro` (upcoming, past, topics).

Changed

  • Simplified desktop and mobile nav groups to remove standalone Speaking tab from top header rails.
  • Updated `/speaking/` to act as compatibility redirect/pointer into `/profile/#speaking`.
v2.4.11 2026-04-29 navigationinformation-architectureprofilespeakingmobile

Navigation architecture split into Profile + Capability hubs

Reorganized navigation into two clear discovery hubs so speaking and other profile surfaces are no longer forced into experience/education buckets.

Why it matters: Desktop and mobile navigation now present two top-level groups: `Profile` (Writing, Speaking, Profile) and `Capability` (Capabilities, Events, Opportunities). Experience and education are collapsed into a single new `/profile/` page, while speaking has its own dedicated `/speaking/` route.

Added

  • Added new page route `src/pages/speaking/index.astro` as a dedicated home for speaking engagements.
  • Added new consolidated route `src/pages/profile/index.astro` that combines experience and education into one page.
  • Added `speaking` and `profile` active-state support to `StickyBrowseBar` props and links.

Changed

  • Updated desktop header navigation in `Header.astro` to grouped hubs: `Profile` and `Capability`.
  • Updated mobile sticky navigation in `StickyBrowseBar.astro` to the same two-hub structure with grouped horizontal rails.
v2.4.10 2026-04-24 a11yresponsivenavigationopportunitiesmobile

Navigation semantics + responsive table/focus refinement pass

Continued report closure with stronger mobile nav semantics and a more keyboard-friendly, responsive opportunities table container.

Why it matters: Mobile sticky browse now exposes explicit navigation semantics (`nav` landmark + `aria-current`), and opportunity-table interaction is cleaner on tablets/phones with focused horizontal scroll regions, reduced medium-screen column density, and explicit table guidance for assistive tech.

Added

  • Added a dedicated `nav` landmark + `aria-current="page"` support in `src/components/StickyBrowseBar.astro`.
  • Added table region semantics on opportunities (`role="region"`, `aria-label`, keyboard focus via `tabindex="0"`, and an accessibility caption).

Changed

  • Added explicit reset control label (`aria-label="Reset all opportunity filters"`) for filter controls.
  • Improved opportunities table responsive behavior at medium/mobile breakpoints with narrower min-widths and hidden lower-priority columns at <=1023px and <=767px.
  • Hardened horizontal scroll behavior on opportunities table wrapper for touch/trackpad interactions.
v2.4.09 2026-04-24 responsivemobileopportunitiesuxconsistency

Responsive edge-case pass on mobile nav + opportunity table ergonomics

Continued report closure with responsive behavior hardening on mobile navigation overflow and dense opportunity-table handling.

Why it matters: Mobile browse tabs now avoid negative-margin overflow behavior, and the opportunities table now behaves more predictably on small screens with reduced default column density and improved horizontal-scroll containment.

Added

  • Added touch/contain scroll behavior on opportunities table wrapper (`overscroll-behavior-x: contain`, momentum scrolling) for cleaner small-screen horizontal navigation.

Changed

  • Removed negative-margin mobile browse-bar wrapper offsets in `StickyBrowseBar.astro` to reduce edge overflow artifacts.
  • Reduced mobile opportunities table minimum widths and hid low-priority columns on narrow screens (`Sol #`, `Agency`, `Events`, `Signals`) for better scanability.
v2.4.08 2026-04-24 uxconsistencyeventsopportunitiesa11y

Report continuation: empty-state consistency + broader a11y route coverage

Extended the report pass with more consistent empty-state recovery actions, map-view labeling alignment, and expanded automated axe coverage to additional showcase routes.

Why it matters: Events now provides clear reset affordances in both list and calendar empty states, map language is consistent (`Map View`), live result counters are announced for assistive tech, and a11y CI now scans capabilities/opportunities surfaces too.

Added

  • Added `Clear filters` action + dynamic active-filter guidance inside Events calendar empty state (`#radar-cal-empty`).
  • Expanded `tests/a11y.spec.ts` route coverage to include `/capabilities/` and `/opportunities/`.

Changed

  • Renamed Events map section heading from `Geographic View` to `Map View` for consistent route language.
  • Added live-region announcements on dynamic result counters (`#radar-count`, `#opp-table-count`).
  • Added explicit `aria-label="Search opportunities"` on opportunities global search input.
v2.4.07 2026-04-24 a11ycitestingstability

A11y pipeline stability fix for report pass

Fixed flaky CI accessibility checks by removing `networkidle` dependency from Playwright a11y navigations.

Why it matters: A11y workflow now validates actual accessibility issues rather than timing out on long-lived network activity.

Changed

  • Updated `tests/a11y.spec.ts` to use `waitUntil: "domcontentloaded"` for page navigation before axe scans.

Improved

  • Local a11y suite now completes reliably across homepage + core routes during preview checks (7/7 passing).
v2.4.06 2026-04-24 uxnavigationwritingeventsopportunitiesconsistency

Exhaustive report pass: navigation semantics, writing UX, events/opportunities clarity

Applied a broad implementation pass against the styling/consistency report, including nav semantics, writing filter/card behavior, events empty-state clarity, and grouped opportunity metrics.

Why it matters: Primary flows are more consistent and actionable: header now exposes `aria-current`, writing supports explicit All mode + limited visible tags, events/opportunities zero states are clearer, and opportunity KPIs are grouped into Coverage/Enrichment/Decision/System Health.

Added

  • Added `aria-current="page"` behavior to primary nav links in `HeaderLink.astro`.
  • Added explicit `All` control for writing type filters and persisted all-on state handling (`src/scripts/writing-index.js`).
  • Added grouped opportunity KPI sections: `Coverage`, `Enrichment`, `Decision Signals`, `System Health`.
  • Added clear-action controls in empty states for Events and Opportunities views.

Changed

  • Updated writing search placeholder to `Search writing...` and event/opportunity placeholders to `Search events...` / `Search opportunities...`.
  • Normalized writing/date labels to human-readable format (e.g., `Apr 24, 2026`) across compact cards, writing index, and tag detail cards.
  • Limited visible writing card tags to 4 with `+N more` overflow indicator.
  • Normalized noisy participant-organization labels on Events (e.g., removed image-dimension suffix artifacts like `1024x607`).
  • Balanced capability-card layout by enforcing equal-height cards with metadata/actions anchored consistently.
v2.4.05 2026-04-24 formattinguxlayoutconsistency

Cross-page formatting pass on headings and spacing rhythm

Applied a consistency pass across secondary pages to normalize header treatment, top spacing, and section rhythm.

Why it matters: Experience, education, writing-tag, and blog surfaces now use the same carded header pattern and tighter, consistent vertical spacing.

Added

  • Added control-shell header cards to `experience/index`, `education/index`, `writing/tags/index`, `writing/tags/[tag]`, and `blog/index` for consistent page framing.

Changed

  • Normalized top spacing from legacy `mt-6/mt-8` patterns to a consistent `mt-4` (`md:mt-5`) rhythm after page headers on updated pages.
  • Unified heading style on updated pages to use `section-title` within header cards for visual consistency.
v2.4.04 2026-04-24 homeuxspacinglayout

Homepage section spacing normalized

Aligned vertical spacing between homepage card groups so transitions feel consistent after recent section removals.

Why it matters: The gap between `Featured Reading` and the `Operating Principles/Engagement` row now matches the hero-to-featured spacing.

Changed

  • Changed homepage container spacing from `mt-10` to `mt-6` before the `Operating Principles` + `Engagement` row in `src/pages/index.astro`.
v2.4.03 2026-04-23 homeuxcleanupcopy

Removed homepage “Core Surfaces” explanatory card

Dropped the homepage `Core Surfaces` card to reduce fourth-wall/meta framing and keep the landing experience immersive.

Why it matters: Homepage remains focused and direct: hero + featured reading + operating principles + engagement, without explicit explanatory taxonomy cards.

Changed

  • Removed `Core Surfaces` section from homepage (`src/pages/index.astro`).

Improved

  • Reduced immersion-breaking, explicit audience/taxonomy framing on home.
v2.4.02 2026-04-23 footernavigationuxcleanup

Footer simplified; primary nav duplication removed

Cleaned footer to utility-only links and removed top-nav duplicates so homepage hierarchy remains clear.

Why it matters: Footer now acts as a compact utility rail (`Sitemap`, `Changes`, `Status`, `Contact`) while primary discovery remains in top navigation and sitemap.

Changed

  • Removed redundant footer links that duplicated top navigation and secondary background routes.
  • Removed deploy badge/social/license/rss shortcut clutter from footer in favor of sitemap-based discovery.
  • Kept footer to four utility links: `Sitemap`, `Changes`, `Status`, `Contact`.
v2.4.01 2026-04-23 navigationhomeprioritizationuxbackground

Navigation priority reset + experience/education demoted to background surfaces

Updated primary navigation to prioritize Writing → Capabilities → Events/Opportunities and repositioned experience/education as lower-priority background proof surfaces.

Why it matters: Top-level wayfinding now matches the intended emphasis: writing and capability showcase first, operational tools second, and resume-depth pages available but demoted.

Added

  • Added homepage `Core Surfaces` section to frame `Writing` and `Capabilities` as showcases, with `Events` and `Opportunities` presented as operational features.
  • Added subtle `Background` links (Experience, Education, Resume PDF) under Engagement to keep proof surfaces accessible but secondary.

Changed

  • Updated desktop header priority/order to: `Writing`, `Capabilities`, `Events`, `Opportunities`.
  • Updated mobile sticky browse links to match the same priority and removed direct Experience/Education tabs from primary mobile nav.
  • Added Experience/Education links in footer navigation as secondary discovery paths.
v2.4.00 2026-04-23 homeuxcleanupcopysummary

Removed homepage audience framing card language

Stripped fourth-wall audience labels and removed the `How to use this site` card from homepage to keep the landing page direct and content-first.

Why it matters: Homepage now avoids explicit audience/meta framing while retaining a concise summary structure through hero, featured reading, operating principles, and engagement.

Changed

  • Removed hero pills: `For customers + employers` and `For readers + technical audiences`.
  • Removed the full `How to use this site` homepage card section.

Improved

  • Reduced homepage copy overhead and removed fourth-wall/meta explanatory language.
v2.3.99 2026-04-23 homeuxnavigationaudiencesummary

Homepage shifted to topical summary + audience routing

Removed long-form resume/writing blocks from the homepage and refocused the page on summary intent with explicit routing for customer/employer and reader audiences.

Why it matters: Homepage now acts as a concise mission overview: featured reading is cleaner (no topic counts), deep resume/background content moves to dedicated pages, and visitors get immediate guidance on where to go next.

Added

  • Added `How to use this site` summary card section on homepage with clear routing for customer/employer, reader/background, and operational-tool paths.

Changed

  • Removed homepage long-form sections for `Writing`, `Experience`, and `Education` in favor of topical summary navigation.
  • Removed topic-count (`# topics`) metadata from homepage featured reading cards.
  • Updated engagement CTA flow to emphasize `Capabilities` as the customer-facing summary surface.

Improved

  • Clarified homepage positioning as a dual-audience landing page (customers/employers and readers/background).
v2.3.98 2026-04-23 audiopapersacp-racontentwriting

Attached ACP-RA audio to the ACP-RA paper

Moved the provided `acp-ra.m4a` audio into the site audio library and linked it to the ACP-RA paper metadata.

Why it matters: The `Agent Control Plane Reference Architecture (ACP-RA)` paper now exposes audio via the standard writing/paper audio path.

Added

  • Added paper audio metadata: `audioPath: /audio/writing/acp-ra.m4a` in `src/content/papers/acp-ra.md`.

Changed

  • Moved source audio file into `public/audio/writing/acp-ra.m4a` for canonical static serving.
v2.3.97 2026-04-23 audiopaperscontentwritingcode-as-policy

Attached policy-as-code audio to “From PDFs to Pull Requests”

Moved the provided `policy-as-code.m4a` audio into the site audio library and linked it to the `code-as-policy` paper metadata.

Why it matters: The “From PDFs to Pull Requests” paper now has first-class audio availability via standard writing/paper audio surfaces.

Added

  • Added paper audio metadata: `audioPath: /audio/writing/code-as-policy.m4a` in `src/content/papers/code-as-policy.md`.

Changed

  • Moved source audio file into `public/audio/writing/code-as-policy.m4a` for canonical static serving.
v2.3.96 2026-04-23 writinghomeuxcontrolscleanup

Writing pill row unification + homepage quick-intents removal

Moved all writing filter pills onto the same row as paper/note/memo and standardized active/inactive pill contrast; removed the homepage quick-intents strip.

Why it matters: Writing controls now read as one coherent pill system with clearer active state visibility, and homepage hero is cleaner without quick-intent clutter.

Added

  • Added explicit active color states for density pills (`Compact`, `Comfortable`) and aligned inactive treatment to dull gray.

Changed

  • Moved `Has audio`, `Recent 30d`, and density pills into the same control row as `paper/note/memo` on `/writing/`.
  • Removed `Quick intents` strip from homepage hero and tightened associated engagement copy.
v2.3.95 2026-04-23 writingfiltersuxstatesvisual-feedback

Writing quick-filter active states: Has audio + Recent 30d

Added explicit visual active states for writing quick filters so users can immediately see when `Has audio` or `Recent 30d` is turned on.

Why it matters: Filter intent is now obvious at a glance, reducing ambiguity while scanning the writing index controls.

Added

  • Added distinct active color treatments for `Has audio` and `Recent 30d` quick-filter pills when `aria-pressed="true"`.

Changed

  • Updated default/inactive quick-filter pill styling for clearer on/off contrast on `/writing/`.
v2.3.94 2026-04-23 analyticsuxline-chartdashboardsimplification

Site analytics simplification + true line chart trends

Simplified `/status/site-analytics/` by removing low-signal route dumps and converting the trend sparkline bars into an actual line chart.

Why it matters: Dashboard is cleaner and faster to scan, with trend movement represented as a real temporal line while noisy off-sitemap/zero-view tables are removed from the page.

Added

  • Replaced trend sparkline bars with an SVG line chart + point markers for 7d/30d/90d windows.

Changed

  • Removed `Top sitemap routes (table)` from `/status/site-analytics/`.
  • Removed `Zero-view sitemap routes` section from `/status/site-analytics/`.
  • Removed off-sitemap sections from `/status/site-analytics/`, including tracked off-sitemap table/risk surface.
  • Reduced KPI strip by dropping off-sitemap counter card to match the simplified surface.
v2.3.93 2026-04-22 privacyanalyticsstatusformscleanup

Removed public form-submission analytics surface from site

Removed the public lead-funnel status page and all site navigation links to form-submission analytics so this data is no longer exposed on the website.

Why it matters: Form-submission funnel analytics are no longer publicly available on adamboas.com.

Changed

  • Removed `/status/leads/` route from published pages.
  • Removed `Lead funnel analytics` quick route from `/status/`.
  • Removed `Lead Funnel Status` link from `/sitemap/` utility links.
v2.3.92 2026-04-22 analyticsgraphsplausiblesitemapdesign-language

Analytics representation upgrade: Pareto, heatmap, risk chart, and trend panel

Upgraded `/status/site-analytics/` with stronger decision-first visual representations while keeping the existing compact house style and detailed tables.

Why it matters: The dashboard now answers concentration, section coverage, off-sitemap risk, and momentum questions at a glance without sacrificing route-level drilldown.

Added

  • Added Pareto chart for top sitemap routes with per-route share and cumulative contribution markers.
  • Added section heatmap cards aggregating route families (home/writing/experience/etc.) with coverage and views context.
  • Added off-sitemap risk chart with risk score tiers to prioritize sitemap drift cleanup.
  • Added trend sparkline panel for 7d/30d/90d windows + momentum chips when totals are available.

Changed

  • Extended sitemap analytics snapshot schema with `insights` and `trends` blocks generated by `fetch-plausible-sitemap-analytics.mjs`.
  • Updated dashboard layout to emphasize scan-first visual analytics while preserving detailed supporting tables below.

Improved

  • Local/dev fallback now carries trend metadata from existing snapshots (when only partial windows are available).
v2.3.91 2026-04-22 analyticsgraphsplausiblesitemapstatus

Site analytics graphs pass: visual bars for coverage and route traffic

Added graph-style visualizations to the sitemap analytics dashboard so key route and coverage signals can be scanned instantly without parsing only tables.

Why it matters: Faster readout of route performance and sitemap coverage at a glance, with direct visual emphasis on traffic concentration and off-sitemap drift.

Added

  • Added `Coverage graph` bars showing viewed vs zero-view sitemap route split.
  • Added `Top routes graph` horizontal bar visualization for top sitemap paths.
  • Added off-sitemap path mini-graph bars above the off-sitemap table for quick anomaly scanning.

Changed

  • Updated `/status/site-analytics/` layout to pair KPI cards with visual graph sections while preserving detailed tables.
v2.3.90 2026-04-22 analyticsplausiblesitemapstatusseo

Site analytics dashboard: Plausible traffic mapped to sitemap routes

Added a new status dashboard that maps Plausible route traffic against sitemap coverage, highlighting top routes, zero-view pages, and off-sitemap tracked paths.

Why it matters: Gives fast visibility into what content is actually being discovered/visited versus what is published in the sitemap, helping prioritize SEO and internal linking work.

Added

  • Added `/status/site-analytics/` dashboard with KPI cards and route-level tables for top sitemap traffic, zero-view sitemap pages, and tracked off-sitemap paths.
  • Added `scripts/fetch-plausible-sitemap-analytics.mjs` to generate `src/generated/plausible-sitemap-analytics.json` from Plausible pageview snapshots + live sitemap index.
  • Added npm task `analytics:plausible:sitemap` for snapshot refresh.

Changed

  • Updated `/status/` quick routes with direct link to the new sitemap traffic analytics view.

Improved

  • Sitemap analytics snapshot now supports fallback generation from local Plausible pageview snapshots when API keys are unavailable in local/dev environments.
v2.3.89 2026-04-22 resumepdfmetadatawritingfix

Resume body regeneration: clearance + phone + bold writing titles now visible in PDF

Regenerated the canonical site resume PDF from source so requested updates are visible in the document body, not just surrounding site metadata.

Why it matters: The downloadable `adam-boas-resume.pdf` now visibly shows phone and clearance in the header, and writing entries render with bold titles.

Changed

  • Regenerated `public/files/adam-boas-resume.pdf` from `Whitepaper/memos/adam-boas-resume/tex/memo.tex` with visible header updates: phone `(301) 904-2011` and `Clearance: Top Secret`.
  • Updated writing section styling in the generated resume to use bold writing titles.

Improved

  • Kept PDF document metadata aligned with request (`Subject: Top Secret`, `Keywords: Clearance: Top Secret`).
v2.3.88 2026-04-22 resumemetadatacontactwritingux

Resume metadata clearance + contact phone + bold writing titles

Updated resume-facing metadata language to include clearance context, added direct phone contact across key pages, and made writing card titles fully bold for stronger scan contrast.

Why it matters: Resume links now surface clearance status more explicitly, visitors can call directly from key contact surfaces, and writing lists are easier to scan at speed.

Added

  • Added `CONTACT_PHONE` and `RESUME_CLEARANCE` shared resume constants for reuse across pages.
  • Added direct click-to-call actions (`tel:`) on homepage and contact page.

Changed

  • Updated resume metadata display in sitemap/download surfaces to include `Clearance: Top Secret` and updated the resume PDF document metadata (`Subject` + `Keywords`) to `Top Secret`.
  • Added phone + clearance context on resume-adjacent homepage/experience surfaces.
  • Made writing list card titles bold on homepage, writing index, and sitemap writing entries.

Improved

  • Enhanced Person structured-data payload with direct telephone metadata.
v2.3.87 2026-04-22 writinguxshortcutstestingfilters

Writing controls pass 2: sticky active filters + keyboard shortcuts + regression coverage

Continued writing UX hardening with a sticky active-filter strip, built-in keyboard shortcuts for common actions, and dedicated Playwright regression tests for writing controls and URL sync behavior.

Why it matters: Faster power-user flow on `/writing/`, clearer active-filter state while browsing long lists, and stronger guardrails against regressions in quick filters/type toggles.

Added

  • Added writing keyboard shortcuts: `/` search, `a` audio toggle, `r` recent toggle, `d` density toggle, `t` tags toggle, `x` clear filters.
  • Added dedicated Playwright suite `tests/writing-regression.spec.ts` covering tooltip metadata, hidden-tag behavior, URL-sync stability, shortcut handling, and type-toggle guardrails.

Changed

  • Promoted active filter chips into a sticky strip for better visibility while scrolling writing results.
  • Added inline shortcuts help disclosure in writing controls.

Improved

  • Updated CI Playwright regression command in `build-site` workflow to include writing-control regression coverage.
v2.3.86 2026-04-22 writinguxtooltipstagsconsistency

Writing filter tooltip fix + hidden-tag UX cleanup

Fixed blank hover popups on writing key pills by requiring explicit tooltip metadata and added missing tooltip text for quick/density controls. Also removed the `+N tags` preview chip when tags are hidden.

Why it matters: Tooltips now render meaningful content instead of empty boxes, and hidden-tag mode is cleaner with less visual noise.

Changed

  • Added explicit tooltip copy (`data-tooltip` + `title`) for `Has audio`, `Recent 30d`, `Compact`, and `Comfortable` writing controls.
  • Removed per-card `+N tags` preview chips while tags are hidden; hidden mode now suppresses the tag metadata row entirely until tags are shown.

Fixed

  • Prevented empty tooltip popovers by scoping tooltip pseudo-elements to `.writing-key-pill[data-tooltip]` only.
v2.3.85 2026-04-22 eventsopportunitiesuxconsistencyperformance

Pass 2 consistency sweep: events + opportunities filter UX and shared control tokens

Improved high-traffic `/events/` and `/opportunities/` surfaces with debounced search input handling, event-type-specific filter listeners, and replacement of page-local action/pill styles with shared global UI tokens.

Why it matters: Smoother filter interactions under rapid typing, lower accidental rerender churn, and stronger cross-page visual consistency with less page-specific CSS to maintain.

Changed

  • Events filters now debounce free-text search and use `change` handlers for select controls instead of broad `input` wiring.
  • Opportunities filters now debounce search, use control-appropriate event bindings (`change` for selects/checkboxes), and keep numeric weight as immediate input.
  • Replaced opportunities page-local `opp-link-btn` and `opp-status-pill` usage with shared `ui-link-btn`/`ui-link-btn-muted` and `ui-pill` tokens.
  • Normalized search control semantics on both pages with `autocomplete=off` and `spellcheck=false`.

Improved

  • Removed redundant opportunities CSS blocks for button/pill variants now covered by shared global styles.
v2.3.84 2026-04-22 uxconsistencywritinghomeaccessibility

UI/UX consistency coding pass: writing controls hardened + homepage style alignment

Applied a focused consistency pass across `/writing/` and homepage sections to tighten filter ergonomics, semantic form behavior, and shared visual language usage.

Why it matters: Filter interactions are less error-prone, controls are more accessible/consistent, and homepage section typography + intent chips align better with shared design tokens.

Changed

  • Writing type-toggle behavior now prevents disabling the last active type, avoiding accidental zero-result states caused by all-off filters.
  • Updated writing search input semantics (`type=search`, `autocomplete=off`, `spellcheck=false`) for cleaner query UX and predictable control behavior.
  • Aligned homepage section headings (`Writing`, `Experience`, `Education`) to shared `.section-title` styling.
  • Normalized hero quick-intent chip styling to shared pill language (`.ui-pill`) for stronger cross-page consistency.

Improved

  • Cleaned minor homepage markup indentation inconsistencies in the Experience section for readability/maintainability.
v2.3.83 2026-04-22 writinguxfiltersconsolidation

Writing quick filters simplified by removing redundant `Papers only` pill

Removed the `Papers only` quick-filter pill from `/writing/` and simplified filter state logic to rely on the existing type toggles for paper-only views.

Why it matters: Cleaner controls with less duplicated filtering behavior, while preserving backward compatibility for existing `papers=1` links and saved preferences.

Changed

  • Removed `Papers only` from quick filters since paper-only targeting already exists in the type toggle row.
  • Removed duplicate paper-only chip rendering and quick-filter state handling from `writing-index.js`.

Improved

  • Consolidated filter logic and URL normalization by stripping `papers` from rewritten query state while still honoring legacy `papers=1` on initial load.
v2.3.82 2026-04-22 cideployworkflowperformanceconsolidation

CI/CD fast path for deploys: lighter main-branch deploy workflow + PR-only full regression gate

Reduced deploy critical path by replacing heavy Playwright/linkcheck gates in `deploy-dev-pages` with a quick preview smoke check, and moved `build-site` full regression workflow to PR/manual triggers.

Why it matters: Main-branch deploys should land materially faster while preserving deep quality gates for pull requests and optional manual runs.

Changed

  • Replaced deploy-time Playwright regression + strict/warn linkcheck steps with a fast preview smoke check (`/`, `/writing/`, `/events/`).
  • Updated `build-site` workflow triggers to `pull_request` + `workflow_dispatch` so full regression gates run where they add the most value before merge.

Improved

  • Removed duplicate heavy checks from the deploy path to shorten push-to-live cycle time on `main`.
v2.3.81 2026-04-22 homewritingcontactuxconsolidation

Homepage writing cards compacted and contact CTA lane consolidated

Applied compact writing-card styling to homepage reading sections, added quick-intent contact shortcuts, and consolidated duplicated homepage card markup into a shared component.

Why it matters: Homepage scan is denser and cleaner, contact routing is faster for high-intent visitors, and the page now has less duplicated UI code to maintain.

Added

  • Added hero `Quick intents` shortcuts for `Consulting` and `Proposal support` that prefill `/contact/` intent routing.
  • Added reusable `WritingCompactCard` component for homepage writing/featured-card rendering.

Changed

  • Updated homepage Featured Reading and Writing lists to use compact, title-row signal-first card presentation (inline audio marker, lighter metadata footprint).
  • Consolidated engagement CTA lane to reduce duplicated contact actions and keep one clear project-start path.
  • Replaced remaining `import.meta.env.BASE_URL` homepage links with `withBase(...)` for path consistency.

Improved

  • Improved homepage maintenance posture by removing duplicated writing-card markup blocks.
v2.3.80 2026-04-22 writingaudiouxdensity

Writing audio indicator compacted into the title row

Moved the audio indicator from the metadata chip row into a compact inline marker beside each writing title.

Why it matters: Audio availability remains visible while card metadata wraps less and no longer burns an entire line for audio-only entries.

Changed

  • Replaced the larger `🎧 audio` metadata pill with a compact inline `🎧` marker in the title row.
  • Removed audio from the tag/metadata chip line so tags can occupy that row without audio forcing standalone wrapping.

Improved

  • Improved card scan density on `/writing/`, especially for entries that previously rendered only an audio pill beneath the summary.
v2.3.79 2026-04-22 writingtagslocalstorageuxfiltersnavigation

Writing index upgraded with canonical tags, quick filters, density controls, and stronger related-reading recommendations

Delivered a full `/writing/` UX pass: canonicalized tag routing, added hidden-by-default tag previews with local preference toggles, introduced quick filters + sort + density controls, persisted view preferences in localStorage, and upgraded writing-detail related suggestions to use shared tags plus type-aware fallback logic.

Why it matters: Writing discovery is now faster and cleaner by default, tag pages no longer fork on formatting variants, personal browsing preferences persist, and detail pages surface more relevant follow-up reading.

Added

  • Added writing quick filters (`Has audio`, `Papers only`, `Recent 30d`) and card density toggles (`Compact` / `Comfortable`).
  • Added per-card subtle `+N tags` preview chips that appear when tags are hidden.

Changed

  • Canonicalized writing tag routing so spacing/hyphen variants share one canonical slug page instead of forking.
  • Updated `/writing/tags/` aggregation to merge canonical tag counts and labels by normalized slug.
  • Extended related-reading ranking on writing detail pages to weight shared tags + same-type affinity with fallback fill to maintain 3-5 recommendations.

Improved

  • Persisted writing view preferences (type filters, sort, density, quick-filter state) in localStorage while preserving URL state for shareable views.
  • Kept controls aligned to existing control-shell/key-pill design language and compact scan rhythm.
v2.3.78 2026-04-21 writingmobileuxresponsive

Mobile writing cards now hide tag chips

Adjusted `/writing/` card metadata on small screens so topic tags are hidden while the positive audio badge remains visible.

Why it matters: Cleaner mobile scan and less card crowding without removing the audio-availability signal.

Changed

  • Added mobile-only hiding for writing-card tag chips (`.writing-mobile-hide-tags`) at widths <= 767px.

Improved

  • Preserved the `🎧 audio` badge on mobile so audio availability remains explicit while tags are suppressed.
v2.3.77 2026-04-21 homeuxconsistencyresponsiveoverflowstatuscapabilitiescontact

Homepage declutter + shared UI primitives + overflow hardening

Removed the redundant home `Jump to` panel and standardized button/pill styling across contact, status, leads, and capability pages using shared global UI classes.

Why it matters: Cleaner homepage hierarchy, tighter cross-page visual consistency, and stronger resilience against long-text overflow on key status/capability surfaces.

Changed

  • Removed the redundant home hero `Jump to` box and kept section navigation in global header/sticky navigation surfaces.
  • Normalized CTA/action controls to shared `.ui-link-btn` variants across home, contact, status, lead-funnel, and capability pages.
  • Replaced page-local pill styles with shared `.ui-pill` tokens for consistent card metadata treatment.

Improved

  • Added `.wrap-anywhere` utility and applied it to long labels/titles on capability and status-lead surfaces to avoid clipping and horizontal pressure.
  • Hardened lead-funnel table behavior by allowing first-column wrapping with a minimum readable width.

Fixed

  • Fixed duplicated/fragmented style definitions by consolidating repeated button/pill CSS into global shared primitives.
v2.3.76 2026-04-21 analyticsconversionstatusseocapabilitieseventsopportunitieswriting

Lead-funnel analytics view + capability landing pages

Shipped a lead-funnel status surface from Plausible event snapshots and launched SEO-first capability/topic pages that aggregate writing, events, and opportunities.

Why it matters: You can now monitor conversion health (`CTA -> submit -> success`) and rank for capability-intent queries with focused topic landing pages.

Added

  • Added `scripts/fetch-plausible-funnel.mjs` plus generated snapshot `src/generated/plausible-funnel.json` for contact-funnel event aggregation.
  • Added `/status/leads/` lead funnel page with stage metrics, conversion rates, and by-page event breakdown.
  • Added `/capabilities/` index and `/capabilities/[slug]/` landing pages for AI/autonomy, cyber, cloud, DevSecOps, data, and proposal/capture topics.
  • Added shared capability taxonomy in `src/data/capabilities.ts`.

Changed

  • Updated deploy + sync workflows to fetch Plausible lead-funnel snapshots alongside pageviews.
  • Extended footer and sitemap navigation with capability and lead-funnel routes.
  • Added capability-topic discovery link on homepage featured-reading section and lead-funnel quick route in `/status/`.

Improved

  • Improved SEO internal-link graph by connecting core pages to capability/topic hubs and conversion telemetry surfaces.
v2.3.75 2026-04-21 homeheronavigationconversioncontactux

Homepage hero reorganized for cleaner navigation and better CTA placement

Refactored the homepage header/banner so Writing/Experience/Education live in a dedicated jump panel, while `Start project` is promoted as the primary action near the mission statement.

Why it matters: Top-of-page scan is cleaner: one clear conversion path and one clear navigation cluster, with less visual competition in the hero row.

Changed

  • Restructured hero layout into a content/CTA column plus a right-side `Jump to` panel.
  • Moved `Start project` to the primary CTA row next to mission copy and moved section links into a dedicated navigation block.
  • Simplified Engagement section CTA wording from `Start project intake` to `Open contact form` to reduce repeated primary emphasis.

Improved

  • Improved hierarchy for home-banner actions by separating conversion intent from in-page section navigation.
v2.3.74 2026-04-20 contactconversioneventsopportunitiesstatusoperationsux

Contact intake + pipeline status surfaces shipped across core pages

Added a dedicated `/contact/` intake form, conversion CTAs on Home/Events/Opportunities, and pipeline freshness/status surfaces including a new `/status/` page.

Why it matters: Visitors can move from discovery to project intake faster, while events/opportunities users can verify deploy and data freshness without leaving the site.

Added

  • Added `/contact/` page with structured intake form (name/email/org/intent/brief) and direct email fallback.
  • Added `/status/` page with deploy badge, feed-crawl health snapshot, and SAM opportunity drift/freshness KPIs.
  • Added footer `Status` and `Contact` routes plus sitemap entries for both pages.

Changed

  • Updated Home hero + Engagement CTAs to include `Start project` / `Start project intake` flows.
  • Extended Events and Opportunities header action rows with direct intake CTA and status routing.

Improved

  • Added top-of-surface freshness pills on `/events/` and `/opportunities/` (feed crawl dates, source health, drift recency).
  • Added contact-form client instrumentation/guardrails (validation, anti-spam checks, Plausible event hooks, async submit feedback).
v2.3.73 2026-04-20 footerdeploygithub-actionsstatusux

Footer now includes live deploy status badge from GitHub Actions

Added a sleek deploy-status indicator in the footer wired to the `deploy-dev-pages` workflow badge on the main branch.

Why it matters: Visitors can immediately see whether production deploys are passing, directly from the site footer.

Added

  • Added footer Deploy status link to the GitHub Actions workflow page (`deploy-dev-pages`).
  • Added live workflow badge image (`badge.svg?branch=main`) with lazy loading and accessible alt text.

Improved

  • Kept deploy visibility compact by styling the indicator as a small inline footer pill.
v2.3.72 2026-04-20 writingaudiouxmetadata-density

Writing index audio pill now appears only when available and moved into tag row

Updated `/writing/` cards so the audio pill renders only for entries with audio and is positioned first on the same line as tags.

Why it matters: Cards are cleaner (no negative no-audio marker), and audio availability stays obvious in the exact metadata row where people scan tags.

Changed

  • Audio pill now renders only when `audioPath` is present (removed `no audio` pill).
  • Moved audio pill into the tag row and placed it first when present.

Improved

  • Reduced right-side card clutter by keeping date-only metadata in the trailing column.
v2.3.71 2026-04-20 writingaudiouxdensity

Writing index audio summary row removed for cleaner top-line scan

Removed the top audio-coverage summary pills from `/writing/` while keeping the per-item audio availability pill on each card.

Why it matters: The `/writing/` control row stays shorter and cleaner, while audio visibility remains available exactly where needed per item.

Changed

  • Removed the audio-coverage summary row from the writing index control shell.

Improved

  • Reduced top-of-page control-line clutter for faster scan and cleaner visual rhythm.
v2.3.70 2026-04-20 writingaudiopodcastuxaccessibility

Writing index now shows audio coverage + per-item audio status

Added a visual audio enumeration on `/writing/` with total and per-type coverage chips, plus explicit per-item audio availability badges on each card.

Why it matters: You can now scan instantly for which papers, memos, and notes include an audio/podcast component without opening each entry.

Added

  • Added writing-index audio coverage summary chip (`with audio / total`) plus per-type chips for paper, memo, and note.
  • Added per-card audio status badge on `/writing/` entries (`🎧 audio` vs `○ no audio`).

Changed

  • Extended writing index card data model with explicit `hasAudio` state sourced from content frontmatter.

Improved

  • Added tooltip and ARIA text on audio-status chips for clearer scan behavior and accessibility.
v2.3.69 2026-02-28 eventsopportunitiessamplatformdata-engineeringversioning

SAM full-mirror archival mode with immutable snapshot history

Added a mirror-forever mode to SAM opportunity imports so every run can be archived in-repo with per-run snapshots, per-notice version history, and optional raw query payload captures.

Why it matters: You can now keep a Git-versioned long-term mirror of SAM content and compare how notices evolve over time without losing previous states.

Added

  • Added importer flags: `--mirror-forever`, `--mirror-root`, `--run-id`, and `--skip-query-payloads`.
  • Added mirror outputs: run snapshots, run metadata index, `latest` pointer, and per-notice version history under mirror directories.
  • Added npm script `events:sam-import:mirror` for deep, immutable, full-text mirror runs.

Changed

  • Extended detail-cache semantics so `--detail-cache-ttl-hours -1` behaves as immutable cache (fetch once, reuse forever).
  • In mirror mode, notice-description cache path now lives under mirror tree for Git-visible provenance.

Improved

  • Improved reproducibility for SAM intelligence ingestion with deterministic, content-hash based notice versioning.
v2.3.68 2026-02-28 opportunitiessamuxintelreadabilitybusiness-development

Opportunities deep-text formatting + attachment filename labels

Enhanced intel modal readability by formatting deep-text preview into structured blocks and showing human-readable file names + host context for attachment/resource links.

Why it matters: You can scan solicitation detail faster and understand linked files immediately without parsing raw URLs.

Added

  • Added attachment link labeling with extracted file names and source host metadata.

Changed

  • Changed deep-text preview from raw monospace blob to formatted paragraphs/lists/subheads in the intel modal.
  • Updated detail-preview extraction to preserve line breaks for richer formatting.

Improved

  • Improved attachment readability and analyst scan speed in opportunity drilldown modal.
v2.3.67 2026-02-28 opportunitiessamuxanalyticsbusiness-developmentintel

Opportunities intel modal: deep text + attachments in-page

Added an in-page intel modal on `/opportunities` so each solicitation can be opened directly for deep-text preview and attachment/resource-link review.

Why it matters: You can now inspect notice intelligence context without leaving the opportunities workflow, then jump to source links only when needed.

Added

  • Added per-row `Open` intel action in Opportunity Table.
  • Added modal with solicitation metadata (who/what/agency/type/due/intel depth) plus deep-text preview and attachment/resource-link list.
  • Added direct links from modal to SAM notice and detail endpoint when available.

Changed

  • Extended opportunities client payload to include detail preview text, detail URL, and captured resource link arrays.

Improved

  • Added modal keyboard/backdrop close behavior and responsive layout for mobile review workflows.
v2.3.66 2026-02-28 opportunitieseventssamuxanalyticsbusiness-development

Opportunities WHO/WHAT client intelligence explorer

Expanded `/opportunities` so you can directly target buyer organizations (WHO) and work lanes (WHAT) with explicit filters, visual distributions, and table columns.

Why it matters: You can now isolate likely client accounts and capability demand patterns in one workflow, then pivot into specific solicitations without leaving the page.

Added

  • Added `Who (client)` filter with dynamic client-family options derived from agency paths.
  • Added `What (work type)` filter with capability taxonomy classification (software/cloud/AI/cyber/data/etc).
  • Added `WHAT: work profile mix` chart and upgraded `WHO: target clients` chart for click-to-filter exploration.
  • Added `Client` and `Work type` columns to Opportunity Table for direct targeting analysis.

Changed

  • Updated control-shell guidance to emphasize WHO + WHAT targeting workflow.
  • Extended sort options with `Client org` and `Work type` modes.

Improved

  • Chart-filter status now surfaces active WHO/WHAT/NAICS pivots for fast context awareness.
v2.3.65 2026-02-28 eventsopportunitiessamuxsitemapplatform

Deep SAM intel controls expanded + maintenance cohesion sweep

Extended both `/events` and `/opportunities` with deep-notice intelligence controls/metrics, then completed a maintenance pass to keep release metadata and sitemap navigation in sync.

Why it matters: You can triage opportunities by evidence depth (text + attachments) faster, and supporting utility surfaces stay current as the platform evolves.

Added

  • Added deep-intel controls in `/opportunities`: Intel-depth filter/sort, deep/attachment KPI counters, and table depth/files columns.
  • Added deep-intel controls in `/events` solicitation tables: deep-text and attachment columns, plus depth/file sort and filters.

Changed

  • Updated human sitemap core links to include `/opportunities/` and `/radar/` for better intelligence-surface discoverability.
  • Expanded sitemap utility links with `Content License` and bumped global displayed release version to `v2.3.65`.

Improved

  • Improved maintenance cohesion between operational event/SAM updates and user-facing release/navigation surfaces.
v2.3.64 2026-02-27 opportunitieseventssamanalyticsux

Opportunities now includes full SAM feed mirror + resilient chart interactivity

Expanded `/opportunities` to include broad SAM candidate feed data (not only event-cached notices) and restored clickable bar filtering across fallback render paths.

Why it matters: You can analyze a much wider SAM opportunity set immediately and still use click-driven filtering even when chart runtime falls back.

Added

  • Added ingestion of `events-candidates-sam-opportunities.json` directly into `/opportunities` data model.
  • Added KPI visibility for SAM global feed row volume alongside event-linked SAM cache metrics.

Fixed

  • Restored full bar-click filtering behavior for fallback chart rendering (click + keyboard interactions).

Changed

  • Updated page framing from event-only SAM mirror to combined SAM feed + event enrichment intelligence surface.
v2.3.63 2026-02-27 opportunitiesanalyticsuxvisualizationevents

Opportunities visuals streamlined for signal density

Removed underperforming/redundant charts from `/opportunities` to keep the analytics surface focused on high-signal views that support fast exploration.

Why it matters: You get a cleaner cockpit with fewer dead or overlapping visuals and faster scan-to-insight behavior.

Changed

  • Removed `Gem score vs due pressure` chart from `/opportunities`.
  • Removed `Due timeline` chart to avoid overlap with urgency distribution.

Improved

  • Reduced visual redundancy so remaining charts carry clearer analytical intent.
v2.3.62 2026-02-27 opportunitiesanalyticsvisualizationuxevents

Opportunities upgraded into interactive analytics cockpit

Expanded `/opportunities` with richer interactive visual analytics using ECharts: clickable agency/NAICS distributions, due-pressure scatter analysis, and upgraded timeline rendering.

Why it matters: You can now explore patterns by clicking charts directly and instantly pivot the table for deeper analysis.

Added

  • Added interactive `Gem score vs due pressure` scatter plot (bubble size by weight) with click-to-focus behavior.
  • Added chart click interactions on Top Agencies and Top NAICS to pivot table focus instantly.

Changed

  • Converted remaining opportunities visuals from static bars to ECharts-powered interactive charts.
  • Upgraded due timeline from static bars to smoothed trend visualization for faster temporal interpretation.

Improved

  • Improved visual analysis flow: each chart now acts as an exploration control surface, not just a display.
v2.3.61 2026-02-27 opportunitieseventsuxtableanalytics

Opportunity Table upgraded with release-age, sorting, and pagination controls

Upgraded the opportunities table into a full interactive data grid with per-column sorting, page-size controls, pager navigation, and a new Days Since Release signal for faster triage.

Why it matters: You can now scan large opportunity sets without scroll fatigue and sort exactly by the field you care about.

Added

  • Added `Days Since Release` column to Opportunity Table (derived from posted date).
  • Added table pagination controls with first/prev/next/last navigation and rows-per-page selector.

Changed

  • Renamed section heading from `Opportunity mirror table` to `Opportunity Table`.
  • Converted table headers to interactive sort controls (numeric + text-aware defaults).

Improved

  • Improved table UX polish for desktop/mobile paging controls and active sort-state visibility.
v2.3.60 2026-02-27 opportunitieseventsuxdesign-systemplatform

Opportunity Intelligence UI aligned to Events design language

Restructured Opportunity Intelligence into a tighter scan-first shell with consistent controls, denser visual cards, and improved table readability matching the Events polish baseline.

Why it matters: Opportunity triage now feels like the Events workflow: compact, consistent, and much faster to scan.

Changed

  • Converted top sections to shared control-shell styling for design consistency with `/events`.
  • Restructured filter area into a unified scan-first control shell with grouped fields and dedicated action row.
  • Reflowed visualization cards to a denser 3-column layout with responsive spans for gem/timeline focus cards.

Improved

  • Improved typography, spacing, and hierarchy across KPI cards, filter controls, and analytics panels.
  • Added zebra/hover treatment for table rows and tighter numeric/readability styling for scan speed.
v2.3.59 2026-02-27 eventsopportunitiessamuxplatformci

Opportunity Intelligence mirror launched with rendering + CI hardening

Shipped a new `/opportunities` intelligence surface with full filtering, ranked gem detection, and visual analytics across cached SAM opportunity data; then patched rendering and deploy blockers.

Why it matters: You can now scan and triage opportunities directly from one page, while CI/deploy reliability was tightened to keep dev pages moving.

Added

  • Added `/opportunities` page that deduplicates cached SAM intelligence across enriched events into one mirror table.
  • Added filters/sorting for search, notice type, branch, due windows, minimum weight, focus-only mode, and gem ranking.
  • Added visual analytics blocks: gem picks, urgency distribution, notice mix, top agencies, top NAICS, and due timeline.

Changed

  • Added Opportunities to desktop/mobile navigation and global keyboard shortcuts (`g` then `o`).
  • Trimmed opportunity page header copy to remove the “Open this page to answer...” sentence per request.

Improved

  • Adjusted strict linkcheck policy to reduce false deploy blocks (moved `xponential.org` to warn tier; accepted HTTP 202 in strict checks).

Fixed

  • Fixed opportunities client dataset embedding so table/charts/gem list render instead of showing empty sections.
v2.3.58 2026-02-24 eventsuxcalendarmapicons

Map popup calendar links now show icons only

Updated calendar links in event map popups to icon-only actions (🍎 / 🗓️ / 📘) while preserving accessibility labels/tooltips.

Why it matters: Calendar popup actions are cleaner and more compact, matching your icon-first preference without losing clarity.

Changed

  • Removed text labels (`iOS (.ics)`, `Google`, `Outlook (.ics)`) from map popup calendar links and kept only icons.

Improved

  • Added ARIA labels and title attributes so icon-only links remain accessible and self-describing on hover.
v2.3.57 2026-02-24 eventsuxcalendarlegendtopics

Tracked event legend now shows topic-coded icon key inline

Updated calendar legend to show `Tracked Event [ AI | Software | Cloud | Cyber ]` with icons in a single consolidated key.

Why it matters: Legend now reads exactly as an at-a-glance topic key and better matches the icon-forward calendar action style.

Changed

  • Replaced separate topic legend chips with one consolidated tracked-event key: `Tracked Event [ 🤖 AI | 🧩 Software | ☁️ Cloud | 🛡️ Cyber ]`.

Improved

  • Kept hover explanation + accessibility labels on tracked legend key while aligning label style to icon-first calendar actions.
v2.3.56 2026-02-24 eventsuxcalendarlegendclarity

Tracked event legend key now includes hover guidance

Added a hover explanation on the `Tracked event` calendar legend chip, mirroring the attending-key interaction style.

Why it matters: Users can quickly understand that tracked events are monitored feed items and not necessarily attended unless explicitly marked.

Added

  • Added hover copy on the `Tracked event` key: “Tracked event from monitored sources. Not marked as attending unless starred.”

Changed

  • Applied title/ARIA fallback text to the tracked legend key for accessibility parity with the attending key.
v2.3.55 2026-02-24 eventsuxcalendarintegrationlabels

Events calendar actions now include iOS, Google, and Outlook with clearer labels

Updated event calendar action labels to `Calendar: iOS / Google / Outlook` with icon-marked options and explicit `.ics` cues for iOS/Outlook.

Why it matters: Calendar actions are now easier to understand at a glance and better aligned to device-specific intent (especially iOS + Outlook `.ics`).

Added

  • Added iOS calendar action (`🍎 iOS (.ics)`) alongside Google and Outlook in event cards and details.
  • Added iOS calendar action in map popup calendar group for parity across list/map surfaces.

Changed

  • Updated calendar group label to `Calendar:` and standardized icon-led labels (`🍎`, `🗓️`, `📘`).
  • Clarified Outlook and iOS actions with explicit `.ics` label suffixes.
v2.3.54 2026-02-24 eventsuxcalendarlegendattending

Attending legend key now includes a connect note on hover

Added a hover message on the calendar `Attending` legend chip to explicitly signal you will be there and welcome connection.

Why it matters: The attending marker now carries clear social intent for anyone scanning the calendar legend.

Added

  • Added hover copy on the `Attending` legend key: “I’ll be there and would love to connect.”

Changed

  • Introduced a styled legend-tooltip pattern (`data-tooltip`) to keep hover behavior visually consistent with calendar detail surfaces.

Improved

  • Added title/ARIA text fallback for accessibility and non-custom-tooltip contexts.
v2.3.53 2026-02-24 eventsuxfilterssignalcalendar

Events status facet now auto-hides when all events share the same status

When all visible feed entries are effectively Upcoming, the status designation/facet is suppressed to reduce noise.

Why it matters: You no longer see a pointless all-Upcoming status filter or repetitive status labels when they add no decision value.

Added

  • Added status-facet mode detection that checks unique status values across event cards.

Changed

  • Auto-hides the status filter control when all events share one status and clears stale status filter state.
  • Event kicker metadata now omits status in single-status mode (`Branch · Type`).
  • Calendar hover detail metadata now omits status when status facet mode is disabled.
v2.3.52 2026-02-24 eventsuxcalendarnavigationaccessibility

Events calendar bars now show a styled hover detail card

Calendar bars now show a custom hover card with full event name plus key metadata.

Why it matters: You can read full event names and key context without leaving the month view or guessing from truncated labels.

Added

  • Added a styled hover detail card for calendar bars with full title, date range, and branch/type/status context.

Changed

  • Calendar bars now render truncation inside a dedicated label span while keeping overflow visible for hover detail cards.

Improved

  • Added ARIA labels on calendar bars so screen readers get equivalent detail context.
v2.3.51 2026-02-24 eventsuxcalendarnavigationworkflow

Events list now jumps directly to the matching calendar month/event

Added a per-event list action that jumps the calendar to that event month, scrolls to the calendar section, and briefly highlights the matching calendar bar.

Why it matters: You can move from list triage to month context in one click without manually paging the calendar.

Added

  • Added an `In Calendar` action on each event card in the list.

Changed

  • Clicking `In Calendar` now sets the calendar to the event's month and scrolls directly to Calendar View.

Improved

  • Added temporary focus highlighting on the matching calendar bar so the selected event is easy to spot in dense months.
v2.3.50 2026-02-24 eventsuxcalendarattendingvisuals

Events calendar reverted to uniform event colors with attendance-only highlighting

Removed topic-based color tones from calendar bars while keeping topic icons, and retained color emphasis only for attended events.

Why it matters: The calendar now reads cleaner with one default event color; your attended events remain visually distinct, and topic context still shows via icons.

Changed

  • Removed topic-tone bar classes so all non-attending calendar events render in the same baseline color.
  • Kept topic icon labeling (AI/Software/Cloud/Cyber) in event bars and legend for lightweight semantic cues.

Improved

  • Increased visual focus on attendance state by keeping color-coding exclusive to attended events.
v2.3.49 2026-02-24 eventsuxcalendartopicsattending

Events calendar day-height stabilization, topic coding, and SOF Week attendance tag

Stabilized day-cell height for clearer month scanning, added lightweight topic icon/color coding for primary themes, and marked SOF Week as attending.

Why it matters: Calendar stays readable in dense months, AI/software/cloud/cyber priorities are easier to spot at a glance, and personal attendance now appears directly in calendar bars.

Added

  • Added topic legend cues for primary event themes (AI, Software, Cloud, Cyber).

Changed

  • Calendar bars now derive and display a primary topic icon with matching tone classes for minor at-a-glance coding.
  • Marked `radar-sofweek-2026` as attended via `attendingEventIds` so SOF Week is visibly flagged.

Improved

  • Raised calendar day-cell minimum height to keep month rows visually stable and easier to scan.
v2.3.48 2026-02-24 eventsuxcalendarcssbugfix

Events calendar rendering fixed to preserve traditional month-grid layout

Fixed calendar styling scope so dynamically rendered week/day grid rows and spanning bars keep their intended month layout instead of collapsing into stacked text.

Why it matters: Calendar now renders as a recognizable traditional month view with clear weekday columns, day cells, and readable multi-day bars.

Changed

  • Promoted calendar CSS selectors to global scope for JS-generated calendar nodes (`weekdays`, `days`, `bars`, and bar states).
  • Applied matching global mobile overrides so compact calendar typography and spacing still hold on small screens.

Improved

  • Improved calendar readability and month-grid fidelity for high-event-density months.

Fixed

  • Resolved scoped-style mismatch causing calendar rows and bars to render like unstyled stacked text.
v2.3.47 2026-02-24 eventsuxcalendarplanningattending

Events month calendar added with spanning bars and attending highlights

Added a themed month-by-month calendar view with full month day grids and event bars that span across every day of each event duration.

Why it matters: You can now scan event timing as a true calendar, navigate month to month, and visually distinguish attended events for future reusable personal calendars.

Added

  • Added a new `Calendar View` section with Prev/Next/This month controls and themed week/day rendering.
  • Added event bars that stretch across every day of an event (including multi-day spans across week boundaries).
  • Added attended-event highlighting via code-managed `attendingEventIds` for distinct calendar enumeration and future reuse.

Changed

  • Calendar data now derives from filtered event results, so the month view stays in sync with active list filters.
  • Added event card data attributes (`data-end-date`, `data-attending`) to support reusable calendar rendering pipelines.
v2.3.46 2026-02-24 eventsuxmaplocalstoragelayout

Events map pinning: above/below list with saved preference

Replaced the map hide toggle with a map placement pin control that moves the map above or below the event list and persists preference in localStorage.

Why it matters: Users can keep map and list both visible while choosing preferred scan order; default remains map below list and preference persists per browser.

Changed

  • Replaced `Hide map` with a `Pin map above/below list` toggle button in the control shell.
  • Added persistent map placement preference (`adamboas.events.mapPin.v1`) with default `below`.
  • Updated render logic to reposition the map section above or below the list without hiding either section.
v2.3.45 2026-02-24 eventsuxlayoutcontrolsdensity

Events control shell compacted with aggressive default collapse

Reduced the vertical footprint of the DoW Events Intelligence header by collapsing overview chips and quick filters into a closed panel by default.

Why it matters: The page now lands on search/results faster with significantly less top-of-page height while keeping all controls one click away.

Changed

  • Collapsed summary chips and quick topic/window controls under a default-closed `Overview + quick filters` panel.
  • Reduced control shell spacing/padding and tightened title/toolbar density to cut initial vertical space.
  • Kept search and advanced filters immediately available while reducing non-critical content above the fold.
v2.3.44 2026-02-24 eventsuxbadgeslocalstoragerecency

Events recency state: New is view-based, Fresh is add-window based

Switched event recency badges to persistent local state so `New` only appears for events you have not seen yet, while `Fresh` tracks newly discovered events for a short window.

Why it matters: New badges now clear permanently after first view, and Fresh appears only for events first discovered in your browser within the last 14 days.

Changed

  • Replaced simple seen-id storage with a persistent per-event localStorage state object (`firstDetectedAt`, `firstSeenAt`, `lastSeenAt`).
  • Updated `New` badge logic to display only for currently visible events that have never been seen before on this browser.
  • Updated `Fresh` badge logic to show only when an event is newly discovered and within a 14-day freshness window.
v2.3.43 2026-02-24 eventsuxlabelscalendaroutlookgoogle

Events action labels clarified + calendar controls grouped

Renamed event CTA labels for clarity and grouped Google/Outlook calendar actions into a single intuitive control in cards and map popups.

Why it matters: Event actions are now clearer at a glance (`Event Link`) and calendar options feel like one coherent action instead of separate unrelated buttons.

Changed

  • Renamed card and map link CTA text from generic `Link` to `Event Link`.
  • Grouped Google + Outlook calendar actions under one segmented `Calendar` control in event cards.
  • Grouped calendar actions in map popups and consolidated detail-view calendar links into a single `Add to calendar` row.
v2.3.42 2026-02-24 eventsuxsearchfiltersmap

Events page flow streamlined: search + list first, map moved below

Reordered the DoW Events page so users land on full-text search and the event list immediately, with advanced filters collapsed and the map positioned after the list.

Why it matters: You can now open `/events/` and immediately scan/search the list without scrolling past the map; advanced controls remain available under More filters.

Changed

  • Moved the list section above the map section so search and results are adjacent at page entry.
  • Promoted full-text search to always-visible in the control shell.
  • Collapsed advanced controls under `More filters` to reduce top-of-page clutter.
v2.3.41 2026-02-24 eventscalendaroutlookicsux

Events calendar export expanded to Outlook (.ics)

Added Outlook-compatible ICS downloads for each event alongside existing Google Calendar links across cards, event details, and map popups.

Why it matters: DoW events can now be added from the page into both Google Calendar and Outlook workflows without manual re-entry.

Added

  • Added per-event Outlook (.ics) download links in event card actions and verified-links detail sections.
  • Added Outlook (.ics) actions in map popups for parity with list view event controls.

Changed

  • Relabeled the existing card calendar button as `Google` for clearer provider distinction.
v2.3.40 2026-02-22 footernavigationuxlayout

Footer link order rationalized

Reordered footer utility links to put internal site navigation first, legal next, and external/contact links last.

Why it matters: Footer scanning is now more intuitive and consistent: sitemap and site utilities appear before outbound links.

Changed

  • Reordered footer links to: Sitemap, RSS, Changes, License, Email, GitHub, LinkedIn.
v2.3.39 2026-02-22 sitemaplayoutuxnavigation

Sitemap core/utility two-column restore

Restored the sitemap top box to the preferred two-column structure with Core on the left and Utility on the right.

Why it matters: Sitemap keeps the improved overall layout while matching the previously preferred Core/Utility scan pattern.

Changed

  • Restored two-column sitemap structure inside the top box (`Core` + `Utility`).
v2.3.38 2026-02-22 sitemapwritingpdflayoutux

Sitemap layout alignment + PDF-link consolidation

Aligned the sitemap to the site’s standard single-column layout, removed the separate published-PDF page, and folded PDF links directly into the Published Writing list.

Why it matters: Sitemap now matches the established visual system and avoids overflow, while published writing pages expose direct PDF access in one consolidated list.

Changed

  • Reworked `/sitemap/` to a single-column structure with standard card/control-shell spacing and heading treatment.
  • Renamed section heading to `Published Writing` and moved PDF access into each writing entry.

Fixed

  • Fixed long-title overflow in sitemap writing entries via safer wrapping behavior.

Improved

  • Removed the standalone `/pdfs/` route to consolidate published writing navigation in one place.
v2.3.37 2026-02-22 navigationsitemapwritingpdfuxplatform

Human sitemap + published PDF index

Added a human-readable sitemap page, linked it from the footer, and added a dedicated published-PDF index page discoverable from the sitemap.

Why it matters: Visitors can now find a single navigable site map and quickly access a clean list of all published PDFs in one place.

Added

  • Added `/sitemap/` as a human-readable site map with core pages, utility links, and published writing entries.
  • Added `/pdfs/` page listing all published PDFs with direct PDF links plus corresponding page links.

Changed

  • Updated global footer utility links to include `Sitemap`.
v2.3.36 2026-02-21 writingmemospipelinecireliabilityplatform

Memo pipeline upgraded to LaTeX-first artifact workflow

Moved memos to a deterministic LaTeX source pipeline with CI-built PDF/HTML/manifest artifacts and site-side verification gates, aligned with paper pipeline quality controls.

Why it matters: Memo rendering now follows the same reproducible build discipline as papers, reducing format drift and making sync validation deterministic across Whitepaper and site repos.

Added

  • Added Whitepaper memo artifact pipeline (`build-memos.yml`) with PDF/HTML/manifest outputs and metadata validation from `MEMO.yml`.
  • Added shared memo LaTeX preamble (`tex/memo_preamble.tex`) and memo source directories under `memos/<slug>/tex/memo.tex`.
  • Added site-side memo artifact verification (`scripts/verify-memos.mjs`) and CI gates (`npm run lint:memos`) in build/deploy workflows.

Changed

  • Updated `sync-whitepaper` workflow to ingest memo artifacts from Whitepaper `build-memos` runs instead of relying on ad-hoc local PDF generation.
  • Updated writing detail rendering to prefer generated memo HTML fragments (`src/generated/memos/*`) for published memos.

Improved

  • Introduced memo metadata mirror sync checks so `writing/memos/*.md` frontmatter stays aligned with `memos/*/MEMO.yml`.
v2.3.35 2026-02-20 cilinkcheckeventsreliability

CI reliability: move unstable AUSA links to warn-tier checks

Updated linkcheck policy classification so `ausa.org` links are checked in warn-tier mode instead of strict blocking mode.

Why it matters: Intermittent upstream AUSA connection resets no longer break blocking CI gates, while warn artifacts still retain visibility for remediation and verification.

Changed

  • Classified `ausa.org` URLs into warn-tier policy handling during linkcheck preparation.
  • Removed transient AUSA transport failures from strict blocking gates while preserving non-blocking diagnostics.
v2.3.34 2026-02-20 cilinkcheckeventscalendarreliability

CI reliability: move Google Calendar template links out of strict blocking checks

Updated linkcheck policy classification so generated Google Calendar template URLs run in non-blocking warn-tier checks instead of strict blocking checks.

Why it matters: Deploy and build workflows stay green more consistently while still preserving visibility into Calendar-link health through warn artifacts.

Changed

  • Classified `calendar.google.com` URLs into warn-tier policy handling during linkcheck preparation.
  • Removed calendar-template URL volatility from strict blocking gates while retaining non-blocking diagnostics.
v2.3.33 2026-02-20 eventswritingchangesuxfiltersconsistency

Events quick-scan windows + unified control-shell alignment

Added timeline quick filters (Next 30d/90d/180d), introduced compact confidence-plus-source badges on event cards, and aligned control-shell rhythm across Events/Writing/Changes.

Why it matters: Event triage is now faster by narrowing to near-term windows in one tap, trust context is easier to parse at a glance, and top control surfaces feel more consistent across core list pages.

Added

  • Added quick timeline chips on `/events/`: `Next 30d`, `Next 90d`, `Next 180d`, with URL-persisted state.
  • Added compact event-card badges combining source confidence and source type (`High · Official`, etc.).

Changed

  • Aligned control-shell styling hooks across `/events/`, `/writing/`, and `/changes/` for tighter spacing rhythm and mobile wrap consistency.
v2.3.32 2026-02-20 changesuxaccessibilityperformancenavigation

Changes UX sweep: sticky mini filters, accessibility polish, and idle prefetch

Upgraded the Change Notes flow with a sticky compact filter row, stronger focus visibility, reduced-motion safeguards, and smoother list transitions.

Why it matters: Filtering/scanning long release history now stays fast during scroll, keyboard focus is easier to track, and transitions/navigation feel quicker without extra visual noise.

Added

  • Added a sticky mini filter row on scroll with compact search, topic-group toggles, and one-click reset.
  • Added skeleton loading states for filter and pagination transitions to improve perceived responsiveness.

Improved

  • Improved keyboard focus consistency with stronger visible rings across interactive controls.
  • Added reduced-motion handling so transitions/animations respect user motion preferences.
  • Tightened low-emphasis contrast on chips/meta text for better readability.
  • Added idle-time route/page prefetching for likely next navigation targets.
v2.3.31 2026-02-19 uxeventscopyconsistency

Header title-case consistency pass

Standardized key UI section headers to Title Case across Events and supporting pages.

Why it matters: Interface labels read cleaner and more consistent, including “Geographic View” and related section titles.

Changed

  • Updated “Geographic view” to “Geographic View” on `/events/`.
  • Applied Title Case to related section headings on `/events/sources/` and `/404/` for consistency.
v2.3.30 2026-02-19 cilinkcheckpapersbuild-fix

Build-failure hotfix: paper-manifest integrity + linkcheck suppression

Restored generated paper HTML to match manifest hashes and moved a known legacy WEF citation URL out of blocking/warn checks.

Why it matters: CI paper verification is green again, and linkcheck avoids failing on a known unstable legacy citation while still surfacing actionable stale-link suggestions.

Fixed

  • Restored `agentic-force-creation` generated HTML/raw artifacts to match `manifest.sha256` expectations used by `lint:papers`.
  • Added targeted ignore rule for legacy WEF citation URL in linkcheck policy classification to prevent recurring noise during CI runs.
v2.3.29 2026-02-19 eventsuxresponsivelayout

Events list header responsiveness polish

Updated the events-list heading/sort control layout so “Upcoming Events” stays one line on larger viewports and stacks cleanly on smaller screens.

Why it matters: Desktop keeps a compact one-line title + sort control row, while mobile/small screens place the dropdown on the next line for cleaner readability.

Changed

  • Renamed heading to “Upcoming Events” and applied nowrap behavior for larger viewports.
  • Adjusted list-header flex layout to stack on smaller screens and keep one-row alignment on larger screens.
v2.3.28 2026-02-19 cideploytestinglinkcheckchangesux

Pre-deploy quality gates + linkcheck reliability repair

Expanded CI/deploy quality gates with smoke/overflow/a11y regression coverage and tightened linkcheck signal quality.

Why it matters: Deployments are now blocked behind practical route-level and accessibility checks, while stale/noisy linkcheck findings are reduced and better surfaced as artifacts.

Added

  • Added core-route smoke Playwright suite (`tests/smoke.spec.ts`) and integrated it with overflow + a11y in CI/deploy gates.
  • Added topic-level linkcheck/test artifact uploads for easier triage from GitHub Actions runs.

Changed

  • Build and deploy workflows now run practical regression gates before deployment artifacts are published.
  • Events source page now supports `displayUrl` so public references can remain stable while crawler endpoints stay internal.

Fixed

  • Updated known stale links (AUSA events URL and WEF Amodei citation canonical path) to reduce recurring linkcheck noise.
  • Updated SAM API public reference links to stable Open.GSA documentation in user-facing content.
v2.3.27 2026-02-19 changesuxsearchgroupingrelease-tracker

Change Notes scale pass: topic groups + fuzzy search

Added high-level topic grouping and fuzzy search matching to keep Change Notes usable as release count grows.

Why it matters: You can now filter by broad groups first and use tolerant search matching, reducing scanning load across long release histories.

Added

  • Added topic-group filters (Writing, Events, UX, Platform, Other) with release counts to quickly narrow scope.
  • Moved detailed tag pills under a collapsible “Fine-grained tags” section to reduce filter-bar clutter.

Improved

  • Enhanced Change Notes search with fuzzy token matching (subsequence support) for typo-tolerant lookups.
v2.3.26 2026-02-19 writingmobiledesktopux

Read-progress split restored by viewport

Restored original desktop in-bar read-progress behavior while keeping the sticky mobile progress row.

Why it matters: Desktop now shows only the action-row read chip (no right-rail duplicate), while mobile keeps the persistent sticky read indicator.

Fixed

  • Constrained `.writing-mobile-progress` to mobile breakpoints only so it no longer appears on desktop layouts.

Changed

  • Preserved desktop read progress as the original action-bar button-style chip, with sticky mobile row reserved for small screens.
v2.3.25 2026-02-19 writingmobileuxoverflow

URL overflow hardening on writing detail pages

Hardened writing content link wrapping so long URLs no longer force horizontal overflow on mobile.

Why it matters: Long source URLs now wrap safely within the content column, preserving clean mobile reading width on pages like ACP-RA.

Fixed

  • Applied robust link wrapping (`overflow-wrap:anywhere` + `word-break:break-word`) to writing content anchors to prevent long URL spillover.

Improved

  • Extended mobile overflow regression coverage to include `/writing/acp-ra/` so long-link edge cases stay protected.
v2.3.24 2026-02-19 writingmobileuxreadability

Mobile-visible read progress chip

Adjusted writing detail progress display so read percentage remains visible on mobile without horizontal scrolling.

Why it matters: On phones, a dedicated read-progress chip now appears beside the back link while desktop keeps the inline action-row version.

Changed

  • Added a mobile-only progress chip in the writing action bar and kept desktop progress chip in the action controls group.
  • Updated progress updater to sync all progress-label instances on the page.
v2.3.23 2026-02-19 paginationwritingchangeseventsux

Pagination controls expanded with First/Last

Extended paginated list controls to include First and Last actions across Writing, Change Notes, and Events.

Why it matters: Navigation across long result sets is now faster with one-click jumps to beginning/end while preserving existing clean control styling.

Added

  • Added First/Last buttons to paginated list controls on Writing index, Change Notes, and Events list views.

Changed

  • Pagination button disabled states now cover edge jumps (First/Prev disabled on page 1, Next/Last disabled on final page).
v2.3.22 2026-02-19 paginationwritingchangeseventsux

List pagination across writing, changes, and events

Added clean paginated list controls (10 items per page) with filter-aware behavior and automatic control hiding when pagination is unnecessary.

Why it matters: Long lists are now easier to scan, while pages with 10 or fewer results stay visually clean with no extra controls.

Added

  • Added styled Prev/Next pagination controls and page status indicators on Writing index, Change Notes, and Events list views.

Changed

  • Pagination is filter-aware and defaults to 10 items per page; controls are hidden automatically when results are 10 or fewer.
  • Pagination state now persists in query params (`?page=`) for direct links and back/forward navigation consistency.
v2.3.21 2026-02-19 footermetadatareleaseux

Footer release/version metadata

Added persistent site version and precise last-updated timestamp to the global footer.

Why it matters: Every page now shows a visible release version plus an Eastern-time timestamp including weekday, hour, and minute.

Added

  • Footer now displays `Version vX.Y.Z` and `Last updated` with weekday + date + hour:minute (ET).

Changed

  • Introduced shared `SITE_RELEASE_VERSION` constant for consistent version rendering across site UI and release notes.
v2.3.20 2026-02-19 uxspacingvisual-cohesionsite-wide

Site-wide spacing and alignment cohesion pass

Ran a full-site spacing and centering pass across shared navigation chrome and primary list pages to tighten rhythm and normalize control alignment.

Why it matters: Navigation tabs/links and page-level control stacks now align more consistently with reduced dead space between major sections.

Changed

  • Normalized header nav and mobile sticky-browse tab heights/alignment for a consistent control baseline.
  • Aligned footer utility links to the same centered control rhythm and tuned top/bottom spacing for cleaner scan flow.
  • Tightened first-stack spacing on Experience and Education listing surfaces for better page rhythm continuity.
v2.3.19 2026-02-19 writinguxspacingvisual-cohesion

Writing index spacing and alignment refinement

Tightened control-to-card spacing, removed empty filter-chip gap, and normalized type-pill centering for cleaner visual rhythm on the Writing index.

Why it matters: Controls and cards now feel more evenly spaced with better vertical alignment and less dead space in the filter shell.

Changed

  • Retuned writing-index control shell spacing (padding and row gaps) and reduced control-to-card stack gap.
  • Adjusted type toggle pill sizing for more consistent centering and hit-area alignment with other controls.

Fixed

  • Removed empty-state whitespace under writing filters by hiding the chip row when no active chips are present.
v2.3.18 2026-02-19 writinguxvisual-cohesion

Writing action-row cohesion pass

Aligned spacing and sizing of action-row controls by styling the read-progress chip with the same button tokens used by PDF, Copy, and Discuss.

Why it matters: Writing action controls now read as one cohesive control set with consistent spacing, typography, and hit area.

Changed

  • Restyled the read-progress indicator to match existing action-button dimensions and visual treatment.
v2.3.17 2026-02-19 writinguxreadability

Writing progress indicator switched to persistent percent chip

Replaced the top progress line with a persistent read-percentage chip beside PDF/Copy/Discuss for clearer visibility.

Why it matters: Reading progress is now always visible in the action row as text (for example, `42% read`) instead of a subtle line at the top.

Changed

  • Replaced the thin sticky progress line with an inline action-chip percentage indicator in the writing controls row.

Improved

  • Progress percentage now updates only when value changes to reduce unnecessary DOM churn while scrolling.
v2.3.16 2026-02-19 writinguxregression-fix

Reading progress bar behavior fix

Fixed writing detail reading progress so it tracks correctly in the site’s body-scrolling layout instead of appearing static.

Why it matters: The top reading line now visibly advances as you scroll long writing pages and reaches full width near the end of the article.

Fixed

  • Progress calculation now reads from whichever scroll container is active (`window`, `documentElement`, or `body`) and listens at document capture level for reliable updates.
v2.3.15 2026-02-19 cilinkcheckeventscalendarreliability

Linkcheck reliability lane + events intelligence CTA pass

Introduced tiered external link checking, added stale-link suggestion output, and expanded events quick actions with Calendar plus stronger confidence/acquisition context.

Why it matters: CI linkcheck now fails less on known unstable domains while still enforcing strict-quality links, and event cards/map/details provide faster actionability and evidence context.

Added

  • Added linkcheck policy preprocessing (`strict`/`warn`/`ignore`) and new scripts for warn-tier checks plus stale-link replacement suggestions.
  • Added event-level Google Calendar deep links on cards, map popups, and expanded event links.

Changed

  • Linkcheck workflow now blocks only strict-tier domains while running unstable domains in non-blocking warn mode with machine-readable output artifacts.

Improved

  • Added confidence-notes and acquisition-reference summaries in event details to improve source provenance clarity during triage.

Fixed

  • Addressed stale known links via actionable suggestion reporting (AUSA events URL, SAM API docs endpoint, and WEF canonical URL mapping).
v2.3.14 2026-02-18 writingtocuxregression-fixultrawide

TOC hover scrollbar no-shift fix

Eliminated TOC text jitter caused by scrollbar mode-switching on hover/focus.

Why it matters: Hovering the right-side TOC now reveals scroll affordance without shifting words or reflowing line breaks.

Fixed

  • Changed TOC scrollbar behavior to keep a stable gutter and constant scrollbar width, with colors transitioning on hover/focus instead of width toggling.
  • Prevented TOC content reflow by removing hidden-to-visible scrollbar width changes that caused horizontal text movement.

Added

  • Playwright regression test asserting TOC hover does not shift first-link position or width.
v2.3.13 2026-02-18 writinglayoutultrawideuxregression-fix

Writing detail rail no-clip fix on ultra-wide screens

Fixed clipping between writing detail sticky actions and the right-side TOC rail after the ultra-wide width expansion.

Why it matters: On large displays, the PDF/Copy/Discuss action box no longer clips into the TOC rail, and TOC width stays compact and stable.

Fixed

  • Reserved a dedicated right rail on 2xl+ for writing detail pages so sticky action controls and article surfaces do not collide with TOC.
  • Capped TOC rail width (`max-width`) to avoid overstretching and keep scan-friendly proportions on very wide monitors.

Added

  • Playwright regression coverage to assert action bar and TOC do not overlap at 1536px, 1900px, and 2200px widths.
v2.3.12 2026-02-17 pipelinewritingmemospublishingsafety

Draft writing guardrail in sync pipeline

Hardened Whitepaper sync so notes/memos marked as draft are excluded from site content and memo PDF publishing.

Why it matters: You can now keep writing in pipeline with `status: draft` without accidentally publishing markdown pages or direct memo PDFs on the public site.

Changed

  • `sync-whitepaper` now syncs only published notes/memos (status defaults to published when omitted).
  • Memo PDFs are now copied only when tied to published memos (via `pdfPath` or matching slug stem).
v2.3.11 2026-02-17 layoutdesktopultrawideux

Ultra-wide layout expansion for large screens

Expanded overall content width on very large displays (1900px+) so center content uses substantially more horizontal space.

Why it matters: On ultra-wide monitors, pages no longer feel boxed into a narrow center column and can use much more of the available viewport.

Changed

  • Added a 1900px+ responsive breakpoint that increases `.site-main` max width to `min(96vw, 116rem)`.
  • Expanded shared `.container` width at 1900px+ to `min(94vw, 112rem)` for better header/footer and section alignment.
v2.3.10 2026-02-17 changesmobileuxfilters

Changes mobile filter usability fix

Fixed `/changes` mobile usability by removing sticky filter lock on phones, tightening search/control sizing, and constraining the tag area so release content stays visible.

Why it matters: On mobile, release entries are now immediately readable instead of being obscured by an oversized sticky filter surface.

Changed

  • Changed `.changes-filter-bar` to non-sticky on mobile and retained sticky behavior for desktop only.
  • Added mobile-friendly sizing for search/clear controls and improved input shrink behavior.
  • Constrained tag cloud height on phones with internal scroll to prevent viewport takeover.
v2.3.9 2026-02-17 uxvisualmobileglobal

Global visual polish across all pages

Applied a site-wide beautification pass: calmer background grid, softened surface borders, cleaner card depth, tighter mobile heading rhythm, and refined header/footer link chrome.

Why it matters: Pages now feel cleaner and more consistent end-to-end with better scanability and less visual noise, especially on mobile.

Changed

  • Updated global surface tokens and card styling (`.card`) for cleaner border hierarchy and subtler elevation.
  • Refined header navigation pills and footer utility links for a more consistent visual system.
  • Reduced body grid intensity and tuned mobile spacing for section titles and footer controls.

Improved

  • Added global control transitions for smoother hover/focus feedback across form and button elements.
v2.3.8 2026-02-17 eventsmobileuxreadability

Events mobile readability cleanup

Refined `/events` card layout and typography on phones to prevent right-rail controls from crushing title/metadata width and to improve scan speed.

Why it matters: Event cards now read cleanly on mobile with less wrapping noise, tighter action controls, and clearer metadata grouping.

Changed

  • Card action rail now stacks below content on small screens instead of competing for horizontal title space.
  • Converted card metadata line into wrapped meta items with separators that collapse cleanly on mobile.
  • Compacted mobile button/chip sizing (`In Nd`, `Link`, `Map`, confidence/freshness/new badges) to reduce visual crowding.
v2.3.7 2026-02-17 uxeventsmobileperformancechanges

UX sweep: quick topic filters, trust badges, newness cues, and lighter script loading

Implemented a broad UX pass across Events/Writing/Changes: quick AI-cloud-software-cyber filters, inline confidence/freshness badges, new-since-last-visit cues, mobile control compaction, and page-specific helper-script loading.

Why it matters: Faster scanning, higher trust clarity, improved mobile reading space, and lower non-essential script overhead on non-writing pages.

Added

  • Added quick topic filter chips on Events (`AI`, `Cloud`, `Software`, `Cyber`) with URL-persisted state.
  • Added inline trust signals to event cards: confidence band + evidence freshness + `New` badge for unseen events.
  • Added `New` badge support on Change Notes releases based on last-seen version in browser local storage.

Changed

  • Further compacted mobile top chrome: tighter header spacing, compact sticky browse shell, and icon-labeled compact writing action pills.
  • Moved non-critical helper scripts (`copy-link`, `codeblock-tools`) to writing pages only and switched global shortcuts script from inline payload to external module URL loading.
v2.3.6 2026-02-17 mobilewritinguxdensity

Mobile writing header density reduction

Reduced vertical space used by mobile writing pages by compressing sticky browse controls and converting the writing action bar to a compact single-row scroller.

Why it matters: On phones, the top navigation/action region now occupies materially less height, preserving more visible reading area above the fold.

Changed

  • Sticky mobile browse bar is now a single compact row (removed secondary row actions from the top rail).
  • Writing action controls now render as a compact horizontal scroller on mobile instead of a two-row stacked block.

Improved

  • Hidden PDF page/size metadata on small screens to reduce control width and visual clutter.
v2.3.5 2026-02-17 eventsaicloudsoftwarefooter

Cloud/software/AI event expansion + footer nav trim

Added additional cloud/software/AI-focused federal event records from official GovCIO event pages and trimmed footer links to utility-only navigation.

Why it matters: The events tracker now includes more AI/cloud/software signal while the footer is cleaner and avoids duplicating primary header navigation.

Added

  • Added six official GovCIO 2026 events to the radar dataset: Defense IT Summit, CyberScape Summit, Federal IT Efficiency Summit, Federal Tech Leaders Summit, Federal Cloud & Data Forum, and Health IT Summit.

Changed

  • Trimmed footer navigation to utility links only (RSS, Changes, License, GitHub, LinkedIn, Email), removing duplicate primary-section links already present in header navigation.
v2.3.4 2026-02-17 siteprofilelinkedinseofooter

LinkedIn profile link added to site navigation/footer surfaces

Added Adam’s LinkedIn profile link to the site footer and homepage Person structured data (`sameAs`).

Why it matters: Visitors and search engines now have an explicit LinkedIn profile reference directly from site UI and metadata.

Added

  • Added LinkedIn link to footer navigation: `https://www.linkedin.com/in/adamnboas/`.

Changed

  • Extended homepage Person schema `sameAs` list to include LinkedIn profile URL.
v2.3.3 2026-02-17 writingpapersacp-rarenderingfix

ACP-RA web duplicate Executive Summary suppression

Fixed duplicate Executive Summary rendering on the ACP-RA writing page by suppressing a leading unnumbered duplicate block when an in-body Executive Summary section is already present.

Why it matters: ACP-RA now displays a single Executive Summary section in web view, matching expected reading flow.

Fixed

  • Added generated-paper HTML normalization to remove duplicate leading Executive Summary block when duplicate `id="executive-summary"` sections are present.
v2.3.2 2026-02-17 eventsndiantsametadatabrowser-relay

NDIA/NTSA event-detail enrichment from live browser data

Enriched the full NDIA/NTSA 2026 event set with card-level metadata from the live NDIA browser page, including registration/agenda links, type/location parsing, and cleaned deduplication.

Why it matters: Tracker records now carry substantially more actionable detail for NDIA/NTSA events while preserving official-link legitimacy gating.

Changed

  • Updated NDIA/NTSA 2026 entries with live card metadata: date ranges, type/venue/location normalization, and richer event descriptions.
  • Added available registration and agenda links into ontology links for newly integrated event records.

Fixed

  • Removed duplicate I/ITSEC representation and retained a single canonical tracker record tied to the official NTSA event URL.
v2.3.1 2026-02-17 eventsingestndiantsabrowser-relay

Bulk NDIA 2026 calendar ingest from live browser session

Pulled the full currently listed NDIA/NTSA 2026 calendar set from a live browser-visible NDIA events page and added missing records with official event URLs.

Why it matters: Coverage expanded immediately with broad NDIA/NTSA 2026 event visibility despite direct-fetch anti-bot blocking on NDIA endpoints.

Added

  • Added 27 missing NDIA/NTSA 2026 events from the live NDIA events calendar into `src/data/radar/events.ts`.
  • Attached official event links for each newly ingested calendar record (event-page canonical URLs).

Changed

  • Normalized new records to Radar schema with consistent provenance notes indicating browser-relay ingest path.

Improved

  • Expanded near-term conference pipeline coverage while NDIA anti-bot protection continues to block direct crawler fetches.
v2.3.0 2026-02-17 eventssourcesautomationgithub-actions

Public feed registry + daily crawl automation

Added a public source registry and one-off URL list for PR-based contributions, plus a scheduled GitHub Action that crawls feed health daily and opens report PRs.

Why it matters: Contributors now have a clear PR target for event sources, and feed reliability monitoring is automated with a daily crawl report.

Added

  • Added public registry file `src/data/radar/feed-registry.json` and public page `/events/sources/` for feed transparency + PR contribution.
  • Added crawler `scripts/crawl-radar-feed-registry.py` with outputs `feed-crawl-report-latest.json|md`.
  • Added scheduled workflow `.github/workflows/radar-feed-crawl.yml` to run daily and open/update a PR with crawl report changes.

Changed

  • Linked source-feeds and registry PR target directly from `/events/` header.
  • Added npm script `events:feed-crawl` for local/manual feed health runs.
v2.2.0 2026-02-17 eventssourcesingestoperations

Marine Military Expos source integration + feed inventory

Integrated Marine Military Expos into priority-source ingestion and published a durable inventory of active event feeds and aggregator pull targets.

Why it matters: Event sourcing is now clearer and broader, with explicit feed operations guidance for ongoing monitoring and ingestion.

Added

  • Added `Marine Military Expos` scraper support in priority-source import pipeline.
  • Added source inventory file: `src/data/radar/event-source-feeds-2026-02-17.md` (active feeds + aggregator targets + cadence).

Changed

  • Updated `Modern Day Marine 2026` provenance/links to official `marinemilitaryexpos.com` source.
  • Updated source-priority notes to reflect Marine Military Expos availability and NDIA anti-bot constraints.
v2.1.9 2026-02-17 eventsmapdata-qualitylocation

Map location accuracy hardening (coordinate fixes + fallback suppression)

Corrected bad imported coordinates for key Europe-based tech expo events and prevented fallback placeholder coordinates from rendering as map pins.

Why it matters: Event cards keep visibility, while map markers now avoid misleading placements when precise geocoding is missing.

Fixed

  • Updated incorrect fallback coordinates for Ramstein, Wiesbaden, Grafenwoehr, Stuttgart-area, and Spangdahlem records.
  • Corrected malformed location metadata for `Joint Industry Forum at Kelley Barracks` (`Stuttgart Germany, USA` → `Stuttgart, Germany`).

Changed

  • Map rendering now suppresses default fallback coordinates (`39.5,-98.35`) so unresolved locations do not appear at a misleading point.
v2.1.8 2026-02-17 eventsingestndiaspecial-operationsverification

NDIA SpecialOps26 event ingest from official link path

Added the NDIA Special Operations Symposium 2026 event using NDIA official URLs with anti-bot-aware confidence handling.

Why it matters: The events feed now captures this additional SOF-relevant NDIA conference with trusted source links and date visibility.

Added

  • Added `36th Annual NDIA Special Operations Symposium` with event and registration links from NDIA URL paths.

Changed

  • Documented anti-bot access limitation on direct fetch and marked confidence/location notes accordingly for follow-up verification.
v2.1.7 2026-02-17 eventsingestaiagenticverification

GovCIO events expansion for AI/agentic signal

Expanded GovCIO coverage by adding Federal AI Forum and converting a seed AI Summit record into a verified official event entry.

Why it matters: The events feed now captures more agentic/federal AI signal from a trusted source while reducing low-confidence seed artifacts.

Added

  • Added `Federal AI Forum 2026` from GovCIO official event page with agentic AI relevance.

Changed

  • Replaced low-confidence seeded `Federal AI Summit` details with verified `AI Summit 2026` GovCIO event metadata and official links.
v2.1.6 2026-02-17 eventsingestaiautonomyverification

Targeted AI/autonomy event ingest + trust-link remediation

Added AI/agentic/autonomy-relevant future events and upgraded key existing records from disallowed-source provenance to official links.

Why it matters: The active /events feed now includes stronger AI/autonomy signal with better link trust and fewer records blocked by legitimacy gating.

Added

  • Added `AI for Defense Transformation 2026` (IDGA), `AI+ Expo for National Competitiveness 2026` (SCSP), and `Defense IT Summit 2026` (GovCIO) with verifiable event links.

Changed

  • Updated existing `AUVSI XPONENTIAL 2026` and `Autonomy in Defense 2026` entries to trusted official provenance/links so they pass active-feed trust gating.
v2.1.5 2026-02-17 eventsog-imagecopy

Events OG title simplified

Updated the Events OG card title text to the shorter label requested.

Why it matters: Social previews now present a cleaner, minimal title: `DoW Events`.

Changed

  • Changed the /events OG card title from `DoW Events + BD Intelligence` to `DoW Events`.
v2.1.4 2026-02-17 eventsog-imagecopysocial

Events OG card expanded with full descriptive subtitle

Updated the /events social preview image copy to use the available space with fuller explanatory text.

Why it matters: Link previews now communicate page purpose more clearly before click-through.

Changed

  • Expanded the Events OG subtitle to a fuller description and increased line capacity for clearer preview context.
v2.1.3 2026-02-17 eventscopylaunch-readiness

Events hero subtitle removed per directive

Removed the extra hero subtitle line from /events for cleaner launch framing.

Why it matters: The events page top section is now tighter and less verbose while preserving functionality.

Changed

  • Removed `Conference-first tracking with sourced opportunity context, SAM visibility, and evidence-backed links.` from the /events hero area.
v2.1.2 2026-02-17 eventsingestverificationdata-quality

Trusted-source ingest pass for future verifiable events

Ran a trusted-source ingest sweep and merged new future events with verifiable external links while suppressing duplicates.

Why it matters: The active events feed gains fresh validated opportunities without reintroducing low-trust or duplicate entries.

Added

  • Ingested newly discovered future events from trusted sources (net-new records only after duplicate suppression).

Changed

  • Executed priority-source importer and retained only net-new entries aligned to future/trusted/verifiable gating.
v2.1.1 2026-02-17 eventsuxcopylaunch-readiness

Events UX/verbiage tightening pass for launch clarity

Refined /events copy and labels for clearer public comprehension while preserving capability-first intelligence depth.

Why it matters: The page now reads cleaner and more actionable on first scan, especially for external launch audiences.

Changed

  • Updated page headline/description and top explanatory line for concise capability framing.
  • Renamed key labels for clarity (`Geographic view`, `Upcoming events`, `Verified links`, `Public government contacts`, `Schedule`).
  • Adjusted filter/search wording (`High-confidence only`, improved search placeholder semantics).
v2.1.0 2026-02-17 eventsbd-intelligenceuxinformation-design

Event intelligence metadata aligned to capability-first direction

Removed low-signal ontology fields from the expanded event panel and tightened insight generation to sourced, actionable intelligence only.

Why it matters: Expanded metadata now reads like a practical DoW BD intelligence surface instead of an internal modeling dump.

Changed

  • Renamed expansion header to `Expand event intelligence` and removed generic ontology blocks (capability areas, mission threads, stakeholders, decision windows).
  • Reframed `BD insights` as `Actionable insights` and limited outputs to sourced signal/deadline/SAM intelligence.

Improved

  • Government organization inference now suppresses generic placeholder labels and prefers concrete agency/source entities.
v2.0.9 2026-02-17 eventsdata-qualityverification

Event legitimacy gate tightened (domain trust + audit artifact)

Added explicit source-domain trust gating and produced a one-by-one legitimacy audit artifact for all event records.

Why it matters: Events tied to known low-trust aggregator domain `jbenton1.github.io/government-guide/conference-tracker/` are excluded from active display until independently verified.

Fixed

  • Blocked disallowed source domain links from eligibility (`jbenton1.github.io`) in active event filtering and link rendering.
  • Required future date + usable external link + trusted source domain for inclusion in active event feed.

Added

  • Generated row-by-row audit report: `src/data/radar/event-legitimacy-audit-2026-02-17.md` (kept vs dropped with reasons).
v2.0.8 2026-02-17 uxmobilehomepagebugfix

Homepage mobile overflow fix for featured cards

Fixed a mobile rendering bug where featured reading titles could overflow card bounds and appear clipped/bleeding outside the container.

Why it matters: Homepage cards now wrap safely on small screens and preserve readable layout without horizontal clipping artifacts.

Fixed

  • Hardened featured reading card layout with min-width constraints, overflow clipping, and wrapped title rendering.
  • Updated mobile top quick-link row to allow wrapping under tight viewport/text-size conditions.
v2.0.7 2026-02-17 eventsbd-intelligencedata-qualityux

Future-only event feed + one-by-one link hardening pass

Restricted the active tracker feed to future-dated events with usable external references and promoted real source links when official links are missing.

Why it matters: The board now suppresses stale/non-future records and improves link integrity by preferring valid external event references over placeholders.

Fixed

  • Removed non-future entries from active display (only future-dated events remain in tracker output).
  • Required at least one usable external URL (official or provenance) for events to appear.

Changed

  • Primary event `Link` now falls back to validated provenance URLs when a direct official URL is absent.
  • Expanded detail links with source references (`Ref 1..n`) to support one-by-one verification workflows.
v2.0.6 2026-02-17 eventsbd-intelligenceuxdata-quality

Events tracker reframed as generic DoW + BD intelligence capability

Renamed the Events surface to a generic DoW events + BD intelligence capability and filtered out manual seed-only records without real external sources.

Why it matters: Tracker language is now capability-oriented, and trust is improved by excluding synthetic/unverifiable seed records from the active feed.

Changed

  • Renamed page and key detail blocks toward a generic capability model (`DoW Events + BD Intelligence Tracker`, `Opportunity intelligence`, `BD insights`).
  • Kept conference-first UX while preserving layered opportunity intelligence (SAM links, government organizations, POCs, insights).

Fixed

  • Filtered out manual seed-only records that lacked real external official links, reducing non-verifiable event noise.
v2.0.5 2026-02-17 eventsuxdata-quality

Events link integrity pass + circular-link suppression

Hardened event link rendering so circular/self-referential links are excluded and only usable external links surface in card actions and metadata.

Why it matters: The `Link` button now appears only when an event has a valid external official URL, preventing loops back to the tracker itself.

Fixed

  • Suppressed circular links that pointed back to `/events/` from both top card actions and detail link sections.
  • Normalized/validated event links before rendering to avoid showing invalid link actions.

Changed

  • Cleaned placeholder self-links from seeded event records so only real external event links remain eligible for display.
v2.0.4 2026-02-17 eventsacquisitionuxintelligence

Events informational overlay generalized for public intelligence use

Replaced user-specific BD tracking fields with generic informational overlays oriented to opportunity discovery and public-source context.

Why it matters: Expanded event details now prioritize SAM links, government organizations, government POCs, and relevant insights instead of personal engagement status tracking.

Changed

  • Replaced `BD engagement` panel with a generic `Informational overlay` panel for opportunity context.
  • Converted contact section into `Government POCs` and added `Government organizations` + `Relevant insights` blocks.
  • Expanded SAM handling to surface SAM links as explicit opportunity references in detailed metadata.
v2.0.3 2026-02-17 eventsseosocialux

Events OG card subtitle fit tuned for more visible text

Adjusted OG text layout so the Events page subtitle can occupy more space before truncation.

Why it matters: Shared `/events/` links now show a fuller subtitle instead of clipping early with ellipsis.

Changed

  • Updated Events OG card subtitle rendering to use a slightly smaller subtitle font and up to two lines.
v2.0.2 2026-02-17 eventsseosocial

Events page OG image generated and wired

Added a dedicated social preview image for the Events tracker and connected page metadata to use it.

Why it matters: Sharing `/events/` now renders a page-specific OG card instead of the global default image.

Added

  • New generated image asset: `/public/og/events.png` via the OG image generator.

Changed

  • Events layout now sets `image="/og/events.png"` for Open Graph and Twitter cards.
v2.0.1 2026-02-17 eventsacquisitionoperationsux

Conference-first tracker cleanup with deeper BD/evidence overlays

Re-centered Events on conference tracking while keeping SAM/opportunity intelligence in detailed metadata through engagement and evidence overlays.

Why it matters: The interface is cleaner for fast event scanning, and BD/opportunity depth is preserved where it matters: inside detailed event analysis.

Added

  • New BD engagement + contacts metadata block (status, owner, next action, touch date, contact list) in expanded event details.
  • New evidence-health view per source (`Fresh/Watch/Stale`) with timestamp-aware provenance badges.
  • Direct SAM links in map popups and metadata links section when SAM provenance is available.

Changed

  • Re-centered Events to conference-first controls (removed explicit opportunity/navy top-level filter clutter).
  • Opportunity and Navy/NSWC signals now show as contextual overlays in detailed event metadata instead of dominating top controls.

Improved

  • Removed duplicate notice labeling when it repeats an existing engagement signal tag.
  • Compact summary strip now prioritizes scan-critical conference metrics (total, upcoming, industry-day, next window, needs-date).
v1.5.6 2026-02-17 eventsfiltersuxacquisition

Events overlay lens + SAM-vs-conference visual coding

Added explicit source-layer filtering and visual differentiation so SAM official notices can be overlaid against conference/workshop/hackathon events without ambiguity.

Why it matters: You can now compare opportunity notices and conference ecosystem activity in one view while still quickly isolating each channel when needed.

Added

  • New source-layer filter (`All`, `Conferences/workshops/hackathons`, `Government opportunity signals`, `SAM official notices`).
  • Preset shortcuts for conference-only and SAM-only slices in the compact control shell.
  • SAM/opportunity source tags on event cards and source badges inside map popups.

Changed

  • Map pin rendering now applies source-layer color coding in addition to event-type tone.
  • Filter/query state now persists `source=` in URL so overlays are shareable and reproducible.

Improved

  • Event summary stats now include SAM official notice count for quick channel health checks.
  • Accessibility labels added to filter controls to keep axe-critical checks clean as controls expand.
v1.5.5 2026-02-17 eventsacquisitionnavydata

Navy / NSWC sourcing expansion + solicitation-heavy SAM profiles

Expanded Events ingestion with Navy-targeted SAM profiles and an official NAVSEA/NSWC page crawler for industry-day signal discovery.

Why it matters: Higher coverage of Navy and naval-warfare-center opportunity signals with cleaner prioritization for solicitation-relevant action.

Added

  • Navy and NSWC-specific SAM import modes (`events:navy-sam-import`, `events:nswc-sam-import`) with organization-focused filtering.
  • Additional service-oriented SAM profiles (`events:army-sam-import`, `events:air-sam-import`, `events:marine-sam-import`, `events:joint-sam-import`).
  • Official NAVSEA/NSWC page crawler (`events:navy-pages-import`) to surface industry-day and outreach candidates from warfare-center pages.

Changed

  • SAM importer now supports additional notice types (`o`, `k`) for deeper solicitation relevance alongside p/r/s signal notices.
  • Importer scoring now includes deterministic relevance reasons and Navy-linked confidence tagging.

Improved

  • Priority-source guidance now explicitly ranks NAVSEA/NSWC official pages + expanded SAM profile strategy.
v1.5.4 2026-02-17 eventsfiltersacquisitiondata

Events industry-intelligence lens + acquisition signal pipeline

Added engagement-signal filtering (industry day, pre-solicitation, sources sought, vendor outreach, special notice) and introduced a SAM.gov opportunities importer baseline.

Why it matters: You can now isolate actionable procurement engagement signals faster and prepare a cleaner ingestion path for deadline-aware tracking.

Added

  • Preset event views for all events, government opportunity signals, and key engagement kinds.
  • New engagement filter with URL-persisted state and filter-chip visibility.
  • Acquisition-signal metadata block in event details (notice type, agency, solicitation number, response/registration dates when present).
  • New SAM opportunities importer script (`events:sam-import`) for p/r/s notice ingestion candidates.

Changed

  • Events now infer engagement kinds from structured metadata plus deterministic title/description heuristics.
  • Map popups now surface opportunity badges when engagement signals are detected.

Improved

  • Priority-source notes now include SAM.gov API as a first-class source for acquisition notice coverage.
  • Importer pipeline hardening includes stronger duplicate prevention by canonical title-year keys and source precedence.
v1.5.3 2026-02-17 writinguxaccessibility

Code block wrap control reliability fix

Fixed Wrap/Unwrap behavior for numbered code blocks on writing pages and improved visible state feedback.

Why it matters: Long code samples now reliably wrap on demand, especially on mobile and narrower windows.

Added

  • Wrap control now toggles visible state text (`Wrap`/`Unwrap`) with pressed-state semantics.

Changed

  • Numbered code-line wrapping now correctly overrides base `white-space: pre` rules when wrap mode is enabled.

Improved

  • Applied safer word breaking/overflow handling for long tokens in wrapped code lines.
v1.5.2 2026-02-17 eventsuxdata

Events cost visibility in compact + detailed views

Registration cost now appears in event cards and metadata views only when cost data is actually tracked.

Why it matters: Improves decision-readiness while keeping cards clean when cost data is absent.

Added

  • Compact card metadata now includes `Reg: <amount>` when registration cost exists.

Changed

  • Detailed logistics now conditionally renders estimated cost only when tracked.

Improved

  • Cost rendering now avoids separators/placeholders when cost is missing.
v1.5.1 2026-02-17 navigationuxaccessibilityevents

Cohesion pass + accessibility hardening

Aligned nav behavior and closed a critical Events accessibility gap found in regression checks.

Why it matters: More consistent navigation behavior and stronger accessibility confidence on core pages.

Added

  • Extended overflow and axe critical checks to include `/events/` and `/changes/`.

Changed

  • Kept Changes discoverability footer-only across desktop and mobile surfaces.

Improved

  • Tightened Events view consistency during compact/detailed mode passes.

Fixed

  • Resolved critical axe issue: `#radar-sort` now has an accessible name (`aria-label`).
v1.5.0 2026-02-16 changesnavigationuxproductivity

Change Notes 2.0 + global keyboard shortcuts

Upgraded release notes into a filterable capability log and added site-wide keyboard navigation.

Why it matters: Faster wayfinding and faster release comprehension with less click friction.

Added

  • Global shortcut system: / (focus search), ? (shortcut panel), and g then h/w/e/c (jump navigation).
  • Keyboard shortcuts overlay with click-to-navigate quick actions.
  • Change Notes filter model with tag toggles, query search, and URL-persisted state.

Changed

  • Restructured release entries around capability outcomes instead of implementation churn.
  • Promoted Changes into desktop and mobile navigation surfaces for first-class discoverability.

Improved

  • Sticky filter shell keeps controls in reach while scanning long release history.
  • Added active-filter chips and release counts for clearer scan state.

Fixed

  • Shortcut handling now avoids input/textarea/contenteditable contexts to prevent typing conflicts.
v1.4.0 2026-02-16 eventsnavigationdocs

Events-first navigation + public change tracking

Shifted the site from Radar framing to Events framing and launched public release notes.

Why it matters: Cleaner information architecture and clearer trust surface for shipped capability changes.

Added

  • Public, versioned Change Notes page at /changes/.
  • Direct footer access to Changes for persistent release visibility.

Changed

  • Replaced /radar with /events as the primary event-intelligence route.
  • Relabeled global navigation surfaces from Radar to Events.

Improved

  • Kept event-centric controls compact: search, branch/type/status filters, upcoming/verified/past toggles.
  • Map-card linkage and event-link exposure stay optimized for scan-speed operations.
v1.3.0 2026-02-16 writinguxnavigation

Long-form reading ergonomics

Improved long-page readability and reduced friction in writing detail navigation.

Why it matters: Higher reading throughput with less orientation loss in dense technical content.

Added

  • Right-rail TOC for long pages on very large screens with active-section tracking.
  • Sticky writing detail actions (PDF, copy link, discuss) for persistent utility access.

Changed

  • Restored full reading-pane width while keeping TOC external to text column.

Improved

  • Intent-only TOC scrollbar, smoother TOC auto-scroll, and wide-screen clipping hardening.
  • Image lightbox behavior and table wrappers with sticky headers for technical artifacts.
v1.2.0 2026-02-13 eventsfiltersuxdata

Events simplification + scan speed

Simplified event decisions around urgency, clarity, and fewer multi-step controls.

Why it matters: Faster shortlist decisions and reduced operator overhead per review cycle.

Added

  • Hide-past default with explicit reveal control.
  • Source-priority ingestion and dedupe pass for larger event inventory coverage.

Changed

  • Moved to date-driven urgency (days-until) as primary prioritization signal.

Improved

  • Flattened filters and moved sorting into list header for lower interaction cost.
  • Standardized event terminology and map/card metadata behaviors.
v1.1.0 2026-02-12 writingfiltersnavigationlegal

Writing controls baseline + legal surface

Established reusable writing controls and persistent site utility surfaces.

Why it matters: More consistent discovery and better legal/transparency posture across the site.

Added

  • Compact writing controls shell with searchable tags and fast clear/reset.
  • Clickable writing type pills (paper/note/memo) for include/exclude filtering.
  • Dedicated legal and license pages linked from persistent footer surface.

Changed

  • Unified sticky browse behavior across mobile sections.