Session handover — 2026-05-08¶
End-of-day pickup note. Today closed a lot of ground on garvanbay's homepage: per-site service-token pipeline shipped end-to-end, blog cards went from 0/10 to 7/10 (new feature), footer + FAQ moved off the 2/10 floor, multi-tone heading preservation works, and the mobile audit caught + fixed two real bugs. 25 commits on master, all pushed to origin + EC2 in sync.
Where we ended up¶
- Branch:
master @ 76ee0b5(origin + EC2 + local all aligned). - Garvanbay deployed: https://master.garvanbay-fulldev.pages.dev/ (immutable: https://0e9088e6.garvanbay-fulldev.pages.dev/)
- EC2 build directory:
~/replatform-dashboard/builds/garvanbay.ie/assembled-fulldev/— the assembler must be re-run after anytheme.jschange (it regeneratessrc/styles/global.cssfrom theme tokens).
Today's commits — what they ship¶
Topbar palette pipeline (extractor → translator → component via inline CSS vars):
03d6ea6 feat(theme): wire topbar palette through extractor → translator → component
cd8af01 fix(theme-extractor): paint-layer + leaf-text picks for topbar palette
Header threshold + footer + FAQ:
fb9e66b fix(header): keep 7 nav items visible before collapsing to More
36ccf85 feat(footer,faq): footer-wcp 3-col with icons + design credit; FAQ panels + first-open
d5f201b fix(faq): tint panels with --primary not --accent
6476483 fix(footer): 'Opening Hours' capitalization + underline contact links
Blog cards (new feature, 0→7):
f4ec35e feat(blog): BlogPosts matcher + posts-wcp 3-card grid
2b58568 fix(posts-wcp): hairline border + square image + 1.125rem title + 1.5rem padding
Brand-default revert (pill → rectangle, the only universal FCR signal):
413b758 fix(theme): brand-default CTA → 4px rectangle (was pill)
84ec61f docs: queue per-site service-section tokens
Per-site service tokens (the biggest score lever today):
1bfad94 feat(theme): per-site service tokens (heading colour, accent position)
7913771 fix(service-tokens): walk all section descendants for accent + read heading own text-align
e709bb3 fix(extractor): detect Wix accent lines via border-top, not just bg
a1b39ef fix(section): add data-slot to section-content + section-actions
529b307 docs: per-site service tokens shipped, remove queued entry
Logo + welcome heading + multi-tone:
b6f7574 fix(header): bump logo to h-28 / max-w-440 to match live (was h-16 / 260)
7112d9c fix(theme): welcome heading uses --accent-secondary (yellow-green on garvanbay)
8c70161 fix(content-1): add 'content-1' class so themed CSS scoping works
3b2c516 fix(content-1): use cn() so the content-1 class actually merges
1b5dbd8 docs: queue multi-tone heading preservation work
08e2010 feat(headings): preserve Wix multi-tone heading colour spans
8b4876f docs: multi-tone heading shipped, remove queued entry
CTA strip wrap fix:
5849f4a fix(cta-wcp): cap heading at 1.5rem + widen prose to 4xl so 'Book an appointment...' fits on one line
Mobile audit + fixes:
ee7dc4c fix(topbar): hide on mobile (<640px) to avoid broken wraps [superseded]
76ee0b5 fix(mobile): hamburger SVG renders + compact topbar with phone/email
Score deltas (start → mid-day sweep)¶
Morning sweep (before today's biggest leverage hits):
| region | start | mid-sweep | notes |
|---|---|---|---|
| header | 2 | 3 | top-bar* still flagged (verifier crop, not a real bug) |
| hero | 5 | 6.5 | typography polish remaining |
| welcome | 2.5 | 3 | bg dot pattern still missing |
| cta-strip | 4 | 3 | gradient flagged |
| svc-payroll | 6 | 6.5 | improved after token pipeline |
| svc-management | 6 | 6 | |
| svc-company-secretary | 6 | 7 | |
| svc-accounts-prep | 6 | 6 | |
| svc-tax | 4.5 | 6 | |
| faq | 2 | 3 | dot pattern bg + dark heading flagged |
| blog (new) | 0 | 7 | shipped today |
| footer | 2 | 5 | rewrite shipped today |
A full sweep wasn't run after the per-site service tokens + multi-tone heading + logo size changes landed. First action tomorrow: re-sweep all 12 regions to capture today's net delta.
What's actually working end-to-end now¶
- Topbar palette auto-tunes per site (theme-extractor captures bg, text colour, CTA bg/border/text from live; theme.js plumbs as inline --topbar-* vars; topbar-wcp consumes with FCR-typical fallbacks).
- Service section tokens auto-tune per site (heading colour, accent position above/below/none, accent colour, text-align, font-weight). Garvanbay reads "centred + accent-above + cyan heading" from live and applies via --service-* CSS vars.
- Multi-tone headings preserved (About.js extracts inline-styled spans, content.ts emits sanitized HTML, Fragment renders verbatim). Live garvanbay's "GARVANBAY" yellow-green + "ACCOUNTING" cyan now renders identically.
- Blog feed widget — Wix
post-list-pro-gallerycontainers are surfaced as their own tag='blog' sections, BlogPosts matcher pairs anchors to /post/* with sibling imgs, posts-wcp renders 3-col grid. - Footer-wcp matches live's 3-col shape with cyan icons + FCR design credit + accent line.
- Mobile topbar collapses to compact phone+email row at <640px, hamburger renders + opens the Sheet drawer with full nav.
Open items for tomorrow¶
1. Verify mobile fixes against the user's actual cache state¶
Last interaction the user reported "burger doesn't respond + persistent phone/email doesn't render + responsive is now kind of broken" but headless Chromium probes show all three working at 390/640/768/1024. Most likely a CDN edge cache or browser cache showing yesterday's broken state.
Action: confirm with user on the immutable URL https://0e9088e6.garvanbay-fulldev.pages.dev/. If they still see the issues there, dig deeper (touch-vs-click event, real device behaviour, or something I missed).
2. Tablet topbar at 640-1023px is cramped¶
Compact-mobile-topbar fires at max-width: 640px. Above 640px the
desktop layout (CTA + 3-col meta + nothing) renders at narrower-than-
desktop widths and feels tight.
Action: bump the mobile-topbar media query from max-width: 640px
to max-width: 1023px. Keeps the compact phone+email-only strip on
phones AND tablets, with the full layout only on real desktops.
@media (max-width: 1023px) {
.topbar-inner { grid-template-columns: 1fr; ... }
.topbar-cta { display: none; }
.topbar-meta-group { ... }
}
3. verify-design crops out the topbar (recurring)¶
handle.screenshot() captures the bounding box of the selector
element. Our topbar is a sibling of header.header-wcp, so the header
crop excludes it — Gemini sees "topbar present in live, missing in
ours" and emits top-bar-missing even when it's clearly rendering.
Action (queued in feedback_verify_design_topbar_blindspot.md):
extend captureRegion in lib/verify-design.js to detect any .topbar
or [id^=pinnedTop] element whose top is above the requested selector
and expand the clip upward to include it. ~15-line change.
4. Welcome + FAQ background dot pattern¶
Live garvanbay paints a soft polka-dot decorative bg behind the welcome section and the FAQ. We render solid white. Gemini flags it on both regions. Two paths:
- Asset extraction: theme-extractor captures the bg-image URL from the live section, downloads the SVG/PNG, and the relevant blocks (content-1, faqs-1) consume it via CSS var.
- Just leave plain: modern minimalist look, mobile users won't notice — accept the score hit on those two regions.
The proper-fix path scales (other FCR sites use the same pattern); the shortcut is fine if we want to focus on subpages instead.
5. Heading typography — sites without --service-heading-color¶
When theme-extractor finds no service section (e.g., one-page sites,
non-content-2 layouts), the var falls through to var(--primary) which
is the brand colour. Verify this fallback works on at least one site
without a service stack — wfpainters (welcome-only homepage) is the
obvious candidate.
6. Subpages¶
Still queued from yesterday's handover. Service detail pages, contact
page, blog post pages all need their own pass once the homepage is
demo-ready. Known issues from docs/pipeline/known-issues.md:
- Subpage hero text overlay leaks (Hero matcher false positive)
- Subpage navs wrap onto two rows on live, single-row on ours
- Service-detail subpages have per-item icons we drop
- Blog post pages: no matcher exists for the article layout
User's call: keep honing the homepage to ~8/10, OR start on subpages.
7. Hero typography polish¶
Hero scored 6.5/10 with typography + button styling notes from Gemini.
The H1 on hero is <h1 class="text-white drop-shadow-lg"> rendered as
a slot fragment — separate path from the welcome's content-1 multi-tone
work. If FCR hero headings are also two-tone, the same About.js
preservation pattern would apply (Hero matcher, not About.js).
Suggested tomorrow's order¶
- Re-sweep all 12 regions — first 10 min. Capture today's net delta vs the morning baseline. Probably most regions moved up.
- Verify mobile with the user — show them the immutable URL, confirm they see what automation sees. If yes, the "broken" report was cache; if no, real bug to chase.
- Tablet topbar breakpoint bump (~10 min) — the easy quick win.
- verify-design topbar bbox fix (~30 min) — eliminates 2/4 of the header's persistent false-positive issues, no other code change needed.
- Pick: dot-pattern bg on welcome + FAQ (~1h, scales) OR start subpages (~2h, opens new ground).
How to run the verifier sweep¶
The sweep script is at tmp/sweep-design.sh (also in EC2's
~/replatform-dashboard/tmp/). All 12 regions including blog. Always
pass --ours-component per the f36b6d7 fix from yesterday — without it
issues route to the wrong file.
Per-region JSONs land in gaps/garvanbay-sweep/*.json on EC2. To dump
human-readable issues across all services in one go:
(Script lives in ~/replatform-dashboard/tmp/; recreate from this
template if cleaned: it's the file-per-region issue dumper used today.)
Memory updates this session¶
reference_topbar_palette_pipeline.md— end-to-end wiring for topbar palette tokensreference_blog_feed_pipeline.md— Wix blog widget enumeration + matcher + posts-wcp componentfeedback_fcr_service_variance.md— service-section heading / accent / alignment vary across the FCR portfolio; only rectangular CTA is uniformfeedback_verify_design_topbar_blindspot.md— the bbox-crop false-positive pattern for topbar regionsfeedback_data_slot_attribute_required.md— extended with section-content + section-actions confirmations