Skip to content

feat(landing): polish pass 2 — 9 fixes + cards overdrive + OG image#49

Merged
johnnichev merged 3 commits intomainfrom
feat/landing-polish-pass-2
Apr 7, 2026
Merged

feat(landing): polish pass 2 — 9 fixes + cards overdrive + OG image#49
johnnichev merged 3 commits intomainfrom
feat/landing-polish-pass-2

Conversation

@johnnichev
Copy link
Copy Markdown
Owner

Summary

Pass 2 of the landing polish work. Nine fixes from feedback + a fresh OG image to match the new SELECTOOLS terminal banner brand.

What's in here

# Item Where
1 Trace nodes (#production): tool_selection / tool_execution labels were overflowing button containers font 11→10px, padding tightened, white-space: nowrap
2 @deprecated marker "2 minors" wrapping to 2 lines white-space: nowrap on .ent-marker__count
3 FAQ search placeholder "search the docs..." was misleading (only filters FAQ) renamed to "search questions..."
4 Wordmark Variant 3 banner not vertically centered in nav .nav-logo gets display:inline-flex + align-items:center + height:100% (had to update the LATER .nav-logo definition because cascade order won)
5 SELECTOOLS terminal banner logo added to README.md and docs/index.md 3-row box-drawing in fenced code block
6 Drag-to-compare slider: desktop mouse-follow mode hovering over the pane scrubs the slider position; cyan ring + ew-resize cursor on hover; touch keeps the existing range input
7 Builder cards (49KB / 0 deps / 8 nodes / $0): bland → distinctive 4 unique stat-cards with bar comparison, package.json snippet, mini SVG graph, price strikethrough
8 Comparison cards (1 line / <0.5ms / 4612 / $0.03): bland → distinctive 4 unique stat-cards with code snippet, latency dial, animated counter, itemized receipt
9 Comparison table polish (light touch) pill-shaped verdict cells, cyan tinted "selectools" column with left-edge accent, subtle row hover
extra OG image: meta tags referenced /assets/og-image.svg but file was missing created SVG (1200x630) and rendered to PNG via Playwright; updated meta tags to og-image.png

Cards overdrive (the biggest change)

Both stat-card rows share the new `.stat-card` shell (220-230px tall, gradient bg, cyan ring on hover, stagger reveal via .stat-row.in-view + nth-child delays). Each card has a distinct central visualization, intentionally different from the bento (PR #46) and the compliance shelf (PR #47).

Builder row (`.stat-card--bytes / --deps / --nodes / --price`):

  1. 49KB — animated horizontal bar comparison: selectools 49KB cyan vs electron 67MB faint. Caption: "1400x lighter than electron".
  2. 0 deps — mini package.json snippet showing `"dependencies": {}` with the empty braces in cyan, pulsing on a 1.6s loop.
  3. 8 nodes — SVG mini-graph: 8 connected dots in a 2-2-1-2-1 flow pattern. Edges scan-draw on viewport entry via stroke-dasharray.
  4. $0 — strikethrough "$39 / seat / mo" above a giant cyan-glowing "$0" with "FOREVER" caption.

Comparison row (`.stat-card--code / --latency / --tests / --cost`):
5. 1 line — actual highlighted Python: `AgentGraph.chain(planner, writer, reviewer).run("prompt")` with strikethrough "25 lines (LangGraph)" comparison line.
6. <0.5ms — semicircle latency dial (SVG arc) with cyan fill at ~3% of the 0..10ms range. Shows just how negligible the overhead is.
7. 4612 — animated counter that ticks from 0 → 4,612 via requestAnimationFrame with easeOutCubic.
8. $0.03 — itemized dashed-border receipt: 40 test cases / 3 providers / 20 judge calls, with a total line. Concrete proof of the cost claim.

JS observer added: one IIFE that finds all `.stat-row[data-stat-row]` and wires up the in-view trigger + the counter tick (any element with `data-counter-target`). Reduced motion: cards snap visible, bars/edges/dial/counter snap to final state.

OG image

Created `landing/assets/og-image.svg` showing a mac terminal window framing with the SELECTOOLS terminal banner art rendered in cyan with a glow filter. Tagline below, "$ pip install selectools" in a cyan-bordered frame, footer with version/license/providers, "[•] selectools" wordmark in the bottom-right.

Rendered to PNG via Playwright at exact 1200x630 dimensions. Better social media compatibility than SVG (some crawlers don't render SVG OG images). Meta tags now reference og-image.png with og:image:type and og:image:alt.

Note for reviewer: GitHub repo social preview is set in repo Settings > General > Social preview. Upload `landing/assets/og-image.png` there manually after merge.

Test plan

  • Trace nodes render cleanly at desktop, all 4 labels fit (verified Playwright 1280x900)
  • @deprecated "2 minors" stays on one line
  • FAQ search placeholder reads "search questions..."
  • Wordmark Variant 3 banner is vertically centered (banner midY = 27.5, nav midY = 28, sub-pixel alignment)
  • Wordmark Variants 1 and 2 still center correctly
  • README.md renders with the banner at top (verified GitHub markdown)
  • Drag-to-compare mouse-follow works on desktop (slider tracks cursor X position)
  • Both stat-card rows render with distinct visualizations and stagger reveal
  • Comparison table verdict cells show as colored pills, selectools column tinted cyan
  • OG image rendered at 1200x630 with SELECTOOLS banner, tagline, install command
  • Real device check at iPhone/Galaxy: defer to user
  • GitHub social preview uploaded to repo settings: defer to user

1. Trace nodes (#production): tool_selection / tool_execution labels
   were overflowing their button containers. Reduced font-size from
   11px to 10px, removed letter-spacing, tightened padding from 10px 8px
   to 10px 6px, added overflow:hidden + white-space:nowrap so text fits
   even at narrow widths.

2. Enterprise @deprecated marker: "2 minors" was wrapping to two lines.
   Added white-space:nowrap and flex:0 0 auto to .ent-marker__count so
   the count stays on one line regardless of available width.

3. FAQ search placeholder: "search the docs..." was misleading because
   the input only filters FAQ items, not the actual docs site. Renamed
   to "search questions..." for honest copy.

4. Wordmark Variant 3 (terminal banner) was rendering at the bottom of
   the nav header instead of vertically centered. Two fixes:
   - .nav-logo gets display:inline-flex + align-items:center + height:100%
     so its content centers within the nav row
   - .wm--3 gets vertical-align:middle for inline contexts
   Now the banner sits in the middle of the header.

6. #see-difference drag-to-compare gets a desktop-only mouse-follow
   mode: hovering over the pane scrubs the slider position from 0 to
   100 based on cursor X. Touch keeps the existing range input as the
   primary control. Visual feedback: cyan ring + ew-resize cursor when
   hovering. Hint copy updated from "drag to compare" to "move your
   cursor across".

(Items 5, 7, 8, 9, OG image will follow in subsequent commits.)
Two related changes that go together because they share the new
visual language: the SELECTOOLS terminal banner is now in README.md
and docs/index.md, and the bland 4-card metric rows in #builder and
the comparison section get the same overdrive treatment that the
other landing sections received in PR #47.

## Card overdrive (#builder + comparison)

Replaces 8 generic .card cells (4 below the visual builder, 4 below
the comparison table) with .stat-card scoreboard tiles. Each card has
a distinctive central visualization, distinct from any pattern in PR
#46/#47 (not bento, not compliance shelf).

Builder row (.stat-card--bytes / --deps / --nodes / --price):
1. 49KB — animated horizontal bar comparison: selectools 49KB cyan
   bar vs electron 67MB faint bar. Caption: "1400x lighter than
   electron".
2. 0 deps — mini package.json snippet showing
   "dependencies": {} with the empty braces highlighted in cyan
   and pulsing on a 1.6s loop.
3. 8 nodes — SVG mini-graph: 8 connected dots in a flow pattern
   (2-2-1-2-1 layout). Edges scan-draw in sequence on viewport entry
   via stroke-dasharray animation.
4. $0 — strikethrough "$39 / seat / mo" above a giant cyan-glowing
   "$0" with "FOREVER" caption.

Comparison row (.stat-card--code / --latency / --tests / --cost):
5. 1 line — actual highlighted Python code snippet showing
   AgentGraph.chain(planner, writer, reviewer).run("prompt") with
   strikethrough "25 lines (LangGraph)" comparison line.
6. <0.5ms — semicircle latency dial (SVG arc) with the cyan fill at
   ~3% of the 0..10ms range. Shows just how negligible the overhead is.
7. 4612 — animated counter that ticks from 0 to 4,612 via
   requestAnimationFrame with easeOutCubic. Re-uses the enterprise
   counter pattern from PR #47, smaller scale.
8. $0.03 — itemized receipt with dashed border showing 40 test cases,
   3 providers, 20 judge calls, with a total line. Concrete proof of
   the cost claim, not just the number.

Shared CSS atoms (.stat-card, .stat-card__viz, .stat-card__metric,
.stat-card__sub, .stat-card__compare). 230px min-height. Stagger
reveal via .stat-row.in-view + nth-child transition-delays. Cyan
ring + glow on hover (pointer:fine only). 4-col grid → 2-col at
1024px → 1-col at 600px.

JS observer added: one IntersectionObserver IIFE that finds all
.stat-row[data-stat-row] and wires up the in-view trigger + the
counter tick (any element with data-counter-target inside the row).

Reduced motion: cards snap visible, bar fills snap to final width,
SVG edges show fully drawn, dial fills to final position, counter
shows the final value, JSON pulse killed.

## README.md + docs/index.md

Adds the SELECTOOLS terminal banner art (the 3-row box-drawing
rendering used by Wordmark Variant 3 in the nav) at the top of both
README.md and docs/index.md. Just three lines of box-drawing chars
in a fenced code block. Renders fine on GitHub and in MkDocs.
…tering

Three follow-up items from the polish pass:

1. Comparison table polish (item 9): light touch, no full redesign
   because tables should stay scannable. Three improvements:
   - Verdict cells (.yes/.no/.mid) get pill-shaped backgrounds with
     subtle borders. Each verdict is now a colored badge instead of
     plain text, which makes the table scannable at a glance.
   - The selectools column (col 2) gets a subtle cyan tint background
     and a 2px cyan inset shadow on the left edge. The eye now goes
     straight to the "winner" column without enlarging the column.
   - Subtle row hover state on mouse devices (cyan tint), helps follow
     a single feature row across columns. Coarse pointers skip this.

2. OG image (extra item): the meta tags referenced
   /assets/og-image.svg but the file didn't exist. Created the SVG
   (1200x630) showing a mac terminal window with the SELECTOOLS
   terminal banner art rendered in cyan with glow filter, the
   tagline "Production-ready AI agents in plain Python.", a feature
   sub-tagline, "$ pip install selectools" in a cyan-bordered frame,
   and the full v0.20.1/license/providers footer line.

   Rendered to PNG via Playwright (better social media compatibility
   than SVG since some crawlers don't render SVG). PNG is 238KB,
   exact 1200x630 dimensions. Updated meta tags to reference
   og-image.png with og:image:type and og:image:alt.

3. Wordmark Variant 3 vertical centering (continuation of item 4):
   the previous fix targeted the wrong .nav-logo rule. There are TWO
   .nav-logo definitions in the source (one near other nav styles,
   one near the "logo wink" section later in the file). The later
   one wins via cascade order, and it had display:inline-block. Now
   it has display:inline-flex + align-items:center + height:100%, so
   the banner centers vertically. Verified: nav midY = 28, banner
   midY = 27.5 (alignment within 0.5px is sub-pixel).
@johnnichev johnnichev merged commit 85d4225 into main Apr 7, 2026
6 checks passed
@johnnichev johnnichev deleted the feat/landing-polish-pass-2 branch April 7, 2026 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant