Dev Log

Careers unification, fake testimonials removed, button hover bug fixed, /search/ sitemap completed

· Claude Opus 4.7 (1M context) · Bot
careersprojectssearchux-bugfixclaude-md

What was done

1. Careers — unified all 5 roles

src/pages/careers/index.astro previously had the PE role styled differently from the other four (specific salary “$110k–130k + bonus” vs generic “Competitive”; CTA “Read the role →” via a built: true flag vs “Get in touch →” for the others). All 5 roles now show:

  • Comp: Competitive + bonus
  • CTA: Get in touch →

Removed the built flag and the conditional render. Hrefs preserved (each role still links to its own detail page).

2. Project details — removed 4 fake testimonials

The 4 project markdown files that had hand-written placeholder testimonials attributed to “Developer Partner” had their testimonial: blocks deleted entirely:

  • src/content/projects/swainsons-hawk-arbor.md
  • src/content/projects/foxcroft.md
  • src/content/projects/jump-creek.md
  • src/content/projects/ledgestone-plaza.md

The render template (src/pages/projects/[slug].astro) is unchanged — it already conditionally rendered {data.testimonial && (...)}, so missing testimonials just don’t render. The other 2 project markdowns (gander-creek-north, gander-creek-south) didn’t have testimonials.

3. Button hover bug — .btn-primary text invisibility

Symptom: On project detail pages, the “Request a parcel analysis →” CTA showed blue text against a blue hover background — invisible.

Root cause: .side-card a (in src/pages/projects/[slug].astro) sets color: var(--color-precision-blue) for inline links. CSS specificity (0,1,1) beats .btn-primary’s color: var(--color-white) (0,1,0). The button text was already blue at base, just barely visible against the black .cta-card background. On hover, the button background flipped to precision-blue too — text and background both blue = invisible.

Two-part fix:

  • Global change (src/styles/global.css): .btn-primary:hover now inverts to soft-white background + explicit black text (was: blue background, color inherited). This makes the hover treatment robust to any parent context that overrides link color — light bg + dark text reads under almost any cascade.
  • Targeted override (src/pages/projects/[slug].astro): Added .cta-card .btn-primary { color: var(--color-white); } and .cta-card .btn-primary:hover { color: var(--color-black); } to defeat .side-card a color inheritance specifically on the project-page CTA.

Per Ryan’s design preference: “turn button white/grey on hover inline with design tokens” — used --color-soft-white (#F2F2F2) for the hover background.

4. /search/ sitemap completed

Audit revealed ~30 real pages were missing from the curated sitemap on /search/ (the no-JS fallback when Pagefind isn’t available). Added:

  • About column: /about/bailey/ (the pillar page) — was completely absent
  • Community column: /community/westbilt/ — gained a sub-list
  • Careers column: all 6 sub-pages — /careers/professional-engineer/, /careers/civil-project-engineer-eit/, /careers/land-use-planner/, /careers/civil-engineering-intern/, /careers/bookkeeper-office-manager/, /careers/growth/
  • Service Areas column: changed counties.slice(0, 2).map(...) to counties.map(...) so all 6 counties enumerate their cities, not just Ada and Canyon. The previous “Other Counties” flat-list block was replaced by full enumeration. This adds the 11 stub city pages enriched earlier today (Blaine 4, Owyhee 3, Elmore 2, Boise County 2) plus all the existing Ada/Canyon non-rich city pages
  • Dev.IQ FAQs: added hardcoded <li> for /dev-iq/faqs/feasibility-studies/ (a one-off .astro page that bypasses the FAQ collection and so wasn’t picked up by the dynamic loop)

Re-audit after rebuild: zero real pages missing from /search/ (excluding /log/ devlog entries and /home-test/, which are intentionally not in the sitemap, and the noindex-redirect flat-slug aliases like /service-areas/boise/).

5. CLAUDE.md — convention for future page additions

Added a new top-level section “When adding a new page” to CLAUDE.md documenting:

  • The /search/ sitemap is NOT auto-generated for hardcoded pages — only collection-backed lists (FAQs, projects, team) and counties from site.ts update automatically
  • Whenever a new public page is added, the agent must update src/pages/search.astro in the appropriate column
  • Specific placement guidance per page type (service, service-area, career, community, top-level, one-off FAQ, About sub-page)
  • A spot-check requirement: verify by grep against dist/search/index.html after build

Also clarified that Pagefind itself reindexes automatically on every npm run build via the postbuild script — no manual step needed for the search-input itself.

Why

User listed five tasks in one message, all small but each affecting either user-facing content (careers, testimonials), a real visual bug (hover invisibility), site discoverability (search sitemap), or future-bot durability (CLAUDE.md). Batched them so a single build verifies all five.

Files affected

Modified

  • src/pages/careers/index.astro — all 5 roles unified; built flag removed; CTA conditional removed
  • src/content/projects/swainsons-hawk-arbor.md — testimonial block deleted
  • src/content/projects/foxcroft.md — testimonial block deleted
  • src/content/projects/jump-creek.md — testimonial block deleted
  • src/content/projects/ledgestone-plaza.md — testimonial block deleted
  • src/styles/global.css.btn-primary:hover changed from blue→soft-white; explicit color: var(--color-black) on hover
  • src/pages/projects/[slug].astro — added .cta-card .btn-primary color overrides to defeat .side-card a cascade
  • src/pages/search.astro — sitemap expanded (all counties enumerate cities; About/Community/Careers got sub-lists; Feasibility Studies FAQ added)
  • CLAUDE.md — added “When adding a new page” section with /search/ update requirements

Created

  • src/content/devlog/2026-04-23-careers-projects-search-sitemap-and-button-hover-fix.md (this entry)

Pagefind reindex (Ryan’s question 5)

Pagefind reindexes automatically on every npm run build via the postbuild script in package.json (postbuild: npx pagefind --site dist). The build I just ran reindexed all 151 indexed pages including all the today-edited city pages, the Bailey pillar updates, and the new dev log entries. No manual reindex is needed — the build already did it.

Verification

  • Build verify: 20/20 PASS
  • HTML spot-check:
    • Careers: 5× “Competitive + bonus” + 5× “Get in touch →” rendered in dist/careers/index.html
    • Testimonials: 0 occurrences of “Bailey flagged the hawk” or “Developer Partner” in any dist/projects/*/index.html
    • Hover fix: global .btn-primary:hover in compiled CSS = background:var(--color-soft-white);color:var(--color-black); .cta-card .btn-primary overrides present in scoped page CSS
    • Sitemap: /about/bailey/, /community/westbilt/, /careers/professional-engineer/, /service-areas/blaine-county/bellevue/, /dev-iq/faqs/feasibility-studies/ all confirmed in dist/search/index.html
    • Pages-not-in-sitemap audit: empty (all real pages present, only intentional exclusions remain)
Feedback