Skip to content

Build Services page: Entry Points and Delivery by the Numbers (LS-1598) - #55

Open
brandonmarshal wants to merge 6 commits into
feature/ls-1598-services-page-batch-2from
feature/ls-1598-services-page-batch-3
Open

Build Services page: Entry Points and Delivery by the Numbers (LS-1598)#55
brandonmarshal wants to merge 6 commits into
feature/ls-1598-services-page-batch-2from
feature/ls-1598-services-page-batch-3

Conversation

@brandonmarshal

Copy link
Copy Markdown
Collaborator

Summary

Adds two more sections to the Services page: "Entry Points" (You don't have to buy everything at once) and "Delivery by the Numbers" (Twelve years of WordPress engineering). Together with Hero, Linked Decisions, Service Clusters, and Service Tiles from earlier PRs, this covers 6 of the 7 sections on the page — only the closing CTA remains, on a separate stacked branch.

Stacked on #54 — this branch is feature/ls-1598-services-page-batch-3, based off feature/ls-1598-services-page-batch-2.

Entry Points

  • Added patterns/sections/services-entry-points.php: eyebrow/heading/description on the left, a 2x2 grid of 4 entry-point link cards on the right (Start with discovery, Support review, Migration assessment, AI-readiness discussion), each linking to its corresponding service page.
  • Reuses the existing Card - Link Row style and core/icon arrow — no new card style or icon needed.

Delivery by the Numbers

  • Added patterns/sections/services-delivery-numbers.php: a centered eyebrow/heading/description intro followed by 3 centered delivery-scale stats (WordPress depth, Platform launches, Approved client praise).
  • Reuses the existing Stat Segment style (is-style-stat-segment) — same building block as the Work archive's engagement row — composed centered with the value shown before its label, instead of that pattern's left-aligned label-first order. No new card style needed.
  • Stat label/description font sizes bumped for readability (label one token up, description to a 16px token).

Mobile/tablet fixes

  • Entry Points: switched its card grid from a fixed columnCount:2 to minimumColumnWidth (matching the technique already used in work-related-routes.php) — WordPress's native auto-fit grid collapses to 1 column on mobile/tablet on its own, no CSS needed. Fixes a 2-column squeeze that was forcing multi-line text wrap at narrow widths.
  • Delivery by the Numbers: added a scoped SCSS partial that flips the shared Stat Segment divider from a vertical border-inline-end to a horizontal border-block-end once the row stacks below 782px (WordPress's own columns-stacking breakpoint), with the trailing divider correctly stripped from the last stacked item. Scoped to this section only — the shared stat-segment.json style used elsewhere (Work archive) is untouched.

Test plan

  • npm run schema:validate — all JSON files pass
  • npm run patterns:escape — clean, no warnings
  • npm run security:scan — clean
  • php -l on both new pattern files — no syntax errors
  • vendor/bin/phpcs --standard=WordPress on both new pattern files and inc/animations.php — clean
  • Verified live on a local WP install: both sections render with correct copy/order; Entry Points confirmed 1-column at 380px width with no text wrap; Delivery by the Numbers confirmed horizontal divider on stacked mobile cards and vertical divider on desktop, with no trailing divider after the last item
  • Manual visual QA in the Site Editor / cross-browser check

Stacks on #54 (LS-1598).

- Add patterns/sections/services-entry-points.php: "You don't have
  to buy everything at once." — eyebrow/heading/description on the
  left, a 2x2 grid of 4 entry-point link cards on the right (Start
  with discovery, Support review, Migration assessment, AI-readiness
  discussion), each linking to its corresponding service page
- Reuses the existing Card - Link Row style and core/icon arrow —
  no new card style or icon needed

Context
- Section background uses surface.card-raised (#E8E8E8) rather than
  surface.card (used by Service Clusters), since Card - Link Row's
  own card background is already surface.card — matching the section
  to that token would make the cards blend into their background
- Add patterns/sections/services-delivery-numbers.php: "Twelve
  years of WordPress engineering, not a slide-deck claim." — a
  centered eyebrow/heading/description intro followed by 3 centered
  delivery-scale stats (WordPress depth, Platform launches,
  Approved client praise)
- Reuses the existing Stat Segment style (is-style-stat-segment) —
  same building block as the Work archive's engagement row —
  composed centered with the value shown before its label, instead
  of that pattern's left-aligned label-first order. No new card
  style needed.

Follow-up
- Increased the stat label font size one token up (300 → 400) and
  the description to 16px (100 → 200) for readability
Bug fix
- services-entry-points.php: switch the card grid from a fixed
  columnCount:2 to minimumColumnWidth, matching the technique already
  used in work-related-routes.php — WordPress's native auto-fit grid
  collapses to 1 column on mobile/tablet on its own, no CSS needed.
  Fixes 2-column squeeze forcing multi-line text wrap at narrow widths.
- services-delivery-numbers.php: add a scoped SCSS partial that flips
  the shared Stat Segment divider from a vertical border-inline-end to
  a horizontal border-block-end once the row stacks below 782px (WP's
  own columns-stacking breakpoint), with the trailing divider correctly
  stripped from the last stacked item. Scoped to this section only —
  the shared stat-segment.json style used elsewhere is untouched.
@brandonmarshal brandonmarshal added area:theme Theme & styles (templates, template parts, FSE) comp:block-patterns Patterns library/registration lang:css Stylesheets lang:php PHP code priority:normal Default priority for most issues. status:needs-review Awaiting code review labels Sep 11, 2026
@linear-code

linear-code Bot commented Sep 11, 2026

Copy link
Copy Markdown

LS-1598

@brandonmarshal brandonmarshal self-assigned this Sep 11, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved moderate icon-sizing and responsive-layout issues remain, along with contradictory task statuses.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds the Services page’s Entry Points and Delivery by the Numbers sections, including responsive styling, asset wiring, and documentation updates.

Changes:

  • Adds entry-point service cards and delivery metrics.
  • Adds responsive stat-divider styling and build/enqueue integration.
  • Updates task tracking and changelog entries.
File summaries
File Summary Review findings
src/scss/structural/services-delivery-numbers.scss Responsive divider styling No findings.
specs/001-services-page/tasks.md Task status tracking Nit (3 votes): T020 and T021 should reflect the added stylesheet and wiring.
patterns/sections/services-entry-points.php Entry-point card grid Moderate (3 votes): Nest icon dimensions under style; increase the grid minimum width to preserve the intended layout.
patterns/sections/services-delivery-numbers.php Delivery metrics section Moderate (2 votes): Nest the eyebrow icon dimensions under style.
package.json CSS build wiring No findings.
inc/animations.php Asset registration and detection No findings.
functions.php Editor stylesheet enqueue No findings.
CHANGELOG.md Release notes No findings.
assets/css/services-delivery-numbers.css Compiled stylesheet No findings.
Review details

Files not reviewed (1)

  • assets/css/services-delivery-numbers.css: Generated file

Suppressed comments (1)

patterns/sections/services-entry-points.php:85

  • The arrow has the same invalid root-level dimensions attribute, so its requested 14px width is ignored and it will render at the icon default size. Put dimensions.width under style, as in the existing core/icon usages.
							<!-- wp:icon {"icon":"lightspeed/<?php echo esc_attr( $ls_arrow_icon_slug ); ?>","className":"has-text-color","style":{"color":{"text":"var(--wp--custom--color--text--subtle)"}},"dimensions":{"width":"14px"}} /-->
  • Files reviewed: 8/9 changed files
  • Comments generated: 4
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread patterns/sections/services-delivery-numbers.php Outdated
Comment thread patterns/sections/services-entry-points.php Outdated
Comment thread patterns/sections/services-entry-points.php Outdated
Comment thread specs/001-services-page/tasks.md Outdated
Bug fix
- services-entry-points.php, services-delivery-numbers.php: fix
  wp:icon dimensions being a sibling of style instead of nested
  inside it — core/icon serializes dimensions as a block support
  under style.dimensions, not a root attribute, so the width was
  being silently ignored and every icon rendered at the 24px default
- services-entry-points.php: increase the card grid's
  minimumColumnWidth from 260px to 340px — at common desktop widths
  (confirmed live at 1440px) the smaller value let a 3rd card fit
  per row, breaking the intended 2x2 layout into 3+1

Context
- specs/001-services-page/tasks.md: update T020/T021 from N/A to
  done with the actual files/wiring — they were correctly N/A when
  the section was first built (no SCSS needed), but the later
  mobile-divider fix added a real stylesheet, making them stale
brandonmarshal added a commit that referenced this pull request Sep 11, 2026
Bug fix
- services-cta.php: fix wp:icon dimensions being a sibling of style
  instead of nested inside it — same bug class already fixed on
  PR #55, the eyebrow dot was rendering at the 24px default instead
  of 8px
- inc/animations.php: load corner-glow.css unconditionally instead
  of gating it on is_page('services') — services-cta.php declares
  Inserter: true, so an editor can place it (and this shared class)
  on any page, where the condition would leave it caught only by
  the render_block/footer fallback. Same precedent as card-shells/
  cta-buttons: cheap enough (~400 bytes) to load unconditionally

Cleanup
- Use UK-English spelling ("colour"/"colours", "centred") in prose
  documentation comments in services-cta.php and CHANGELOG.md,
  matching AGENTS.md's own established convention — CSS property
  names and values are unaffected, only English prose
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:theme Theme & styles (templates, template parts, FSE) comp:block-patterns Patterns library/registration lang:css Stylesheets lang:php PHP code priority:normal Default priority for most issues. status:needs-review Awaiting code review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants