Click-to-play M4A narration, looping with fade in and out, behind a
bottom-left Sound on/off button.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replaces several team portraits, adds Chris to the team listing, and removes Reniera. Adds versioned image URLs to prevent stale cached photos, while adjusting desktop team sizing, alignment, and site-manager row placement.
Add a directors caricature that highlights the corresponding face and portrait on hover. Update the five leadership images and include source photos plus editing prompts for future team portrait production.
Projects can now be opened from the deck: a modal shows live progress per
section, the services on site and a plan map drawn from the site model.
- ProjectModal with per-section progress and site maps (src/data/sitemaps),
generated by app/scripts/build-sitemaps.py
- progress.json holds the per-project section states
- Why Mega becomes a scroll-driven list with a sticky panel that follows the
point in the middle of the screen, plus new pillar photographs
- PRJ-06 Munyaka, PRJ-07 Cedar Gate and PRJ-08 The Hills join the deck, so
the track length and the site count now follow the number of projects
- Projects moves above Why Mega and the section labels renumber
- Contact section rebuilt on an asymmetric grid
- Intro counters keep their thousands separator and no longer wrap
- Dev server listens on the LAN so a phone on the same Wi-Fi can open the site
The accordion was hover-only, so the layers never introduced themselves. On
arrival it now opens one layer at a time and then settles back, leaving the
reader to hover or tab through them. The layers ignore the pointer while the
sequence runs, and moving the pointer or tabbing in ends it early.
Desktop only: below 640px the accordion is a vertical list and every layer is
already readable. Skipped entirely under prefers-reduced-motion.
The Stackless reference keeps its vertical label on hover, so the label runs
straight through the panel copy. MEGA's labels are longer ('Electrical
Reticulation'), which makes the collision worse. Fade the label out as the
slice expands and let the panel carry the title.
Ports the Stackless Coffee ritual accordion: five slices that expand
across the row on hover or keyboard focus, driven by pure CSS
flex-grow. The layer copy is derived from the existing services array,
so the two cannot drift apart.
The incoming card was translucent while it rose over the card it
covers, so both sets of copy were legible at once on photo-led cards.
The shell (photo and scrim) now goes opaque as soon as the card starts
moving, while the copy fades in over the whole arrival.
- The receding card must stay fully opaque; dimming it let the card
behind ghost through the title and chips on photo-led cards.
- Give the pinned stage top padding so the section label clears the
fixed nav, and a gap so the covered card does not clip the intro.
- Let the deck size to the space left in the stage, so it can never
overflow the viewport.
Ports the Stackless Coffee roast-log mechanic (pinned deck of cards
dealt on scroll) to the MEGA projects section: photo-led cards,
CSS sticky + rAF scrub, no new runtime dependency.
Add a 3:4 tablet frame set (810x1080) and raise phone frames to the
full source height (608x1080). The scroll engine picks the set by
screen shape, and a logo loader holds the page until the coarse frame
pass is in (12 s cap).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prefer IPv4 DNS for npm, cache the npm store between builds, log fetch
progress, add retries, and drop the unused ESLint toolchain
(291 -> 190 packages).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vite + React + Tailwind site with a scroll-scrubbed drone fly-through,
services, projects, company, team and contact sections, plus a
Dockerfile + nginx config for Coolify deployment.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>