Dirt-to-doors video on Our Process page + cross-link callout from Services
What was done
1. Renamed the hero video to its canonical source name
public/videos/services-hero.mp4 -> public/videos/dirt2doors.mp4. The previous name was services-specific, but the same clip is now used on multiple pages, so the source-derived name is clearer. Updated heroVideoMp4="/videos/dirt2doors.mp4" on src/pages/services/index.astro.
2. /dev-iq/our-process/ hero -> video
src/pages/dev-iq/our-process.astro now passes the same video to PageHero:
heroImage={heroImg} // unchanged - still the LCP poster
heroAlt="Bailey Engineering project lifecycle, from dirt to doors"
heroVideoMp4="/videos/dirt2doors.mp4"
heroVideoLoops={3}
The existing projects3.png import stays as the poster (LCP-safe first paint while the video loads). Same single video file serves both pages — no extra bandwidth on disk.
3. /services/ — process callout strip between hero and services-stack
Added a new .process-callout section directly below the hero, before the services-stack. Layout flow becomes:
[hero with dirt-to-doors video]
[process callout — 1 sentence + button] ← NEW
[services-stack: 5 disciplines]
[bottom CTA]
Markup (existing design tokens, no new colors):
<section class="process-callout section-tight">
<div class="container container-narrow">
<span class="eyebrow">From dirt to doors</span>
<h2>Curious how the work actually unfolds?</h2>
<p>Every Bailey project moves through the same nine phases — feasibility
through recorded plat. Here's the play-by-play.</p>
<a href="/dev-iq/our-process/" class="btn btn-primary btn-hover-outline"
data-analytics-event="cta_services_to_process">
See our 9-phase process <span aria-hidden="true">→</span>
</a>
</div>
</section>
Background = soft-white, bottom border, centered narrow container. Uses the existing btn-hover-outline modifier so the hover state matches the career-page CTAs.
Why
The dirt-to-doors video runs silent for ~30s through 3 loops, lands on a final frame, and naturally raises the question “wait, what are the steps?” The right place to answer that is immediately below the hero, before the user dives into the 5 service families. Capturing that intent at peak curiosity is what the callout is for.
/dev-iq/our-process/ already had a still image hero (projects3.png); swapping in the same video creates visual continuity for users arriving from the callout — the page they land on shows the same motion they just clicked through to learn more about.
Tradeoffs
- No new asset weight on
/dev-iq/our-process/— the video is the same file already shipping for/services/. Browsers cache it across both pages. - Adds one section to scroll past on
/services/for users who only want the disciplines list. Section is ~150px tall on desktop; visible without scrolling on most viewports, then out of the way.
Verification
npm run buildcleandist/services/index.htmlcontainsprocess-calloutand thecta_services_to_processanalytics event (2 occurrences — both expected from the section markup)dist/dev-iq/our-process/index.htmlcontains the<video>tag withdata-max-loops="3"and<source src="/videos/dirt2doors.mp4">- Both pages reference the same single 5.3 MB MP4 in
dist/videos/dirt2doors.mp4 - The old
services-hero.mp4filename no longer appears anywhere in source or dist
Files affected
- Renamed:
public/videos/services-hero.mp4->public/videos/dirt2doors.mp4 - Modified:
src/pages/services/index.astro(video path + new process-callout section + CSS) - Modified:
src/pages/dev-iq/our-process.astro(heroVideoMp4 + heroVideoLoops) - Created: this devlog entry
Operator follow-up
Re-upload dist/. Important: the upload should remove the old dist/videos/services-hero.mp4 from the server (it no longer exists in the new build) — most SFTP clients can do “mirror” or “sync” mode to handle this. Otherwise the renamed file will live alongside the orphaned old one, wasting ~5 MB until manually cleaned up. Cloudflare cache purge for /services/ and /dev-iq/our-process/ to make sure the new HTML serves fresh.