Skip to content

honey LED rim on homepage copy chip (periwinkle on copy) - #548

Open
ghesp wants to merge 26 commits into
cursor/equalize-hero-cta-gaps-fc07from
cursor/honey-chip-led-rim-0a59
Open

honey LED rim on homepage copy chip (periwinkle on copy)#548
ghesp wants to merge 26 commits into
cursor/equalize-hero-cta-gaps-fc07from
cursor/honey-chip-led-rim-0a59

Conversation

@ghesp

@ghesp ghesp commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Stacked on #547 (equalize hero CTA gaps), which is stacked on #540 (agent prompt homepage chip). Do not merge before those PRs.

Railway preview (homepage): https://docspage-docspage-pr-548.up.railway.app/

Hard-refresh that URL9349864 types the incoming command in on For humans ↔ For agents at a shared 23ms/glyph pace. Hex #542 is unchanged.

Head SHA: 934986464c62f6a4971011da742e058398081a58

Summary

Georgina asked for the homepage hero copy chip to use the same behaviour as the 404 hex LED (PR #542): honey idle crawl + soft bloom, periwinkle #5368BD on the agents tab.

Typewriter (9ff5bd7, shared pace 9349864)

On tab change the outgoing command clears (~70ms), then the incoming string types in character-by-character. The chip stays mounted so the LED rim does not restart.

Speed: both tabs use a fixed 23ms per glyph — the humans pace from clamp(round(520 / n), 6, 28) when n is 23. The longer agents prompt is not sped up; it just takes longer (~1.9s of glyphs + 70ms clear).

A 1px caret blinks while glyphs land (hidden for prefers-reduced-motion). Reduced motion gets the full string instantly — no typewriter, no fill dim.

Fill dim still bookends the switch (bg-black/25 inside the pill). Copy icon stays put. Shared humans width, overflow fade, and horizontal scroll are unchanged. Glow stays tab-linked (honey / periwinkle), not copy.

Tab glow + fill dim

  • Glow: honey #E69135 on For humans, periwinkle #5368BD on For agents. The hex deploy lerp eases the colour (responseSmoothing 0.17 ≈ 510ms). Copy shows the check tick only — it does not drive rgbDeployActive.
  • Fill dim: a bg-black/25 overlay inside the pill bookends the type-in. The page and LED rim stay undimmed. prefers-reduced-motion skips the overlay.

Chip width (1872fce)

Both tabs hug the humans command ($ npx @docs.page/cli init + copy icon + padding). An invisible in-flow sizer holds that row; the visible snippet is absolute so the agents prompt cannot widen the pill. inline-flex w-max max-w-full mx-auto — content-hug vs the page, not the hero column.

When the snippet overflows, a trailing-edge CSS mask fades the text over 1.25rem on the scrollport. The copy icon sits outside the scroll/fade. The snippet uses overflow-x-auto (touch / trackpad / mouse) with the scrollbar hidden; the chip width does not grow while scrolling.

Chip bloom

Chip-only (404 hex on #542 unchanged). Honey #E69135 / periwinkle #5368BD unchanged.

Constant 38f51b6 777262c 356865d
CHIP_BLOOM_CSS (canvas pad) 32 52 52
CHIP_NEAR_RADIUS_SCALE 0.18 0.26 0.23
CHIP_NEAR_INTENSITY 1.38 1.90 1.68
CHIP_FAR_INTENSITY 0.80 1.12 0.98
CHIP_FAR_POWER (lower → longer tail) 0.32 0.28 0.30
DIRECT_TRIANGLE_INTENSITY_SCALE 58 82 72
DIRECT_TRIANGLE_ABSORPTION 1.7 1.45 1.52

Mask edge

Far bloom was lighting the whole presentation buffer, so the pad showed as a hard honey rectangle. Expanding the pad only moved that line.

  • Floor shader buffer_edge_fade: coverage → 0 in the outer 55% of the canvas pad (smoothstep, all four sides). The LED rim sits at the chip edge, inside the fade, so corners/AA stay hex-style.
  • Canvas pad is also clamped to the viewport so _app overflow-x-clip cannot cut the sides.
  • Chip / hero stacks are overflow-visible.

Matches #542 except rounded-rect path + chip bloom

  • LEDS_PER_EDGE = 24 (144 capsules)
  • led-buffer crawl, honey / periwinkle linear, hero-frame-state deploy lerp
  • Sim floor (MIN_SIM_HEIGHT 360), canvas dpr: [1, 2]
  • Tab (not copy) → rgbDeployActive → deploy lerp
  • Same hex occluder AA on the chip’s rounded-rect SDF (transparent interior)

Remaining differences (intentional)

#542 hex Chip on this PR
Pointy hex + 6×60° fillets Chip rounded-xl + 4×90° fillets
Black hex fill Transparent interior (periwinkle-950 shows through)
Canvas pointer-down is the hold Tab drives rgbDeployActive (agents = periwinkle)
Hex sized by TRIANGLE_HEIGHT_RATIO + desktop zoom Outline measured from the chip box + bloom pad
Fillet = HEX_FILLET_RATIO of circumradius Fillet = CSS border-radius of the chip
lil-gui + hover brush on the canvas No GUI; overlay is pointer-events-none
Hex bloom tunables Chip-local bloom (softer than 777262c)

Humans/agents tabs, copy tracking, and Get started are unchanged. The 404 branch was read only.

Scope

  • app/ (hosted site, MCP, Ask AI)
  • packages/cli/
  • packages/mdx-bundler/
  • docs/ (product documentation)
  • Repo / CI / other

Type of change

  • Bug fix
  • New feature
  • Documentation
  • Refactor / chore

Test plan

  • bun run check passes locally
  • bun run --cwd app build passes locally (Next typecheck)
  • Hard-refresh Railway: both tabs type at 23ms/glyph; glow and fill dim bookend the type-in; copy tick does not recolor the rim
  • prefers-reduced-motion: instant full text, no typewriter / no fill dim
  • LED crawl does not restart on tab change

Notes for reviewers

Depends on #547 (and transitively #540). Base is cursor/equalize-hero-cta-gaps-fc07.

Adds vgpu / @vgpu/wgsl and the same Next wgsl loader as #542. Do not merge this before those homepage PRs.

This VM has no WebGPU adapter — confirm the fade and brightness on Railway in a GPU browser.

Open in Web Open in Cursor 

Replace the flat primary border on the homepage prompt chip with a
rounded-rect LED crawl in brand honey, turning periwinkle while copy
is held or the copied tick is showing — the same idle/hold pair as
the 404 hex, approximated in 2D canvas rather than WebGPU.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app

railway-app Bot commented Sep 7, 2026

Copy link
Copy Markdown

🚅 Deployed to the docs.page-pr-548 environment in docs.page

Service Status Web Updated
docs.page ✅ Success (View Logs) Web Sep 8, 2026 at 4:43 pm UTC

@CLAassistant

CLAassistant commented Sep 7, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
0 out of 2 committers have signed the CLA.

❌ cursoragent
❌ claude
You have signed the CLA already but the status is still pending? Let us recheck it.

TypeScript rejected the ternary because lastFrameTime is still
possibly undefined on the non-first-frame branch.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 13:39 Destroyed
Drive ChipLedRim from the same Chip that owns useCopy so the 2s
copied state cannot be cleared by an effect cleanup between
pointerup and click. Lift deploy brightness so hold/copy reads
clearly periwinkle, not a brief honey flash.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 13:52 Destroyed
Copy on press so periwinkle lasts the full 2s tick even when the
gesture never synthesizes a click. Keyboard still copies via onClick.
A short latch keeps the prompt-copy beacon to one fire per press.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 13:57 Destroyed
Replace the 2D canvas beaded-dot approximation with the 404 hex
vgpu pipeline (emitters, raycast bloom, honey crawl, periwinkle
deploy) adapted to a rounded-rect occluder around the chip.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 14:08 Destroyed
Raise perimeter density (especially fillet arcs), draw in CSS pixels on a
CSS×DPR buffer, and soften capsule/box edges so the honey rim is not a
staircase next to the bloom.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 14:23 Destroyed
Reset chip-led-front to triangle-led-front from #542 (24 LEDs/edge,
same crawl, deploy lerp, bloom, discard). Only the occluder/emitter
path is a rounded-rect for the chip; interior stays transparent.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 14:33 Destroyed
Hex fillets are clean because the floor evaluates the shape SDF at
device resolution with 0.5 - sdf/|∇sdf|. The chip had dropped that
occluder, so the honey edge was a hard sim-buffer clip. Restore the
hex silhouette (transparent instead of black), the emitter-clip AA,
and the per-edge straight+circular-arc LED walk.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 14:43 Destroyed
Chip-local only: wider canvas pad, longer near/far falloff, slightly
stronger raycast intensity. Hex #542 tunables are unchanged.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 16:05 Destroyed
About 2× the last chip-only nudge on pad, near/far falloff, and
raycast intensity. Honey #E69135 and periwinkle #5368BD unchanged.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 16:10 Destroyed
The far bloom was filling the pad and cutting off as a hard rectangle.
Fade coverage out in the outer half of the pad, keep the canvas inside
the viewport, and ease chip-local bloom back toward the earlier nudge.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 7, 2026 17:18 Destroyed
Modest step from b7f19e5 — slightly smaller radius and lower intensity
so the hero copy stays clearer. Mask-edge fade and rim colours unchanged.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 09:12 Destroyed
@cursor cursor Bot changed the title draft: honey LED rim on homepage copy chip (periwinkle on copy) honey LED rim on homepage copy chip (periwinkle on copy) Sep 8, 2026
@ghesp
ghesp marked this pull request as ready for review September 8, 2026 09:39
On small viewports the pill was w-full and the snippet row was flex-1,
so the command and copy icon were pulled to opposite edges. Size the
chip to its content (w-fit max-w-full) and drop the grow.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:00 Destroyed
w-fit still resolved to the hero column, so the command and copy icon
sat at opposite ends. Use an explicit 22rem (humans-tab command + icon
+ padding), justify-start + gap-2 only, and max-w-full to scroll on
narrow viewports.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:04 Destroyed
w-fit used stretch-available, and the LED canvas width was calc(100% +
pad) — that percentage resolved against the hero column, so the pill
grew with the page. Size the chip with inline-flex w-max, keep parents
w-auto, and give the canvas explicit pixel bounds.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:12 Destroyed
Both tabs size from an invisible humans command + icon spacer, so the
pill does not grow on For agents. Overflowing snippet text uses a
trailing-edge mask fade; the copy icon stays fully visible.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:22 Destroyed
Keep the shared humans-width pill and the trailing fade on the
scrollport. overflow-x-auto on the snippet so the full agents prompt
can be scrubbed; the copy icon stays outside the scroll.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:28 Destroyed
Quiet the glow from 777262c — lower near/far intensity and a slightly
tighter radius — without dropping back to the invisible 38f51b6 nudge.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:35 Destroyed
Keep the chip and LED rim mounted. Humans/agents text crossfades with a
short ease-out slide; the copy icon stays put. Copied tick resets with
the payload. Reduced motion skips the transform.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:40 Destroyed
A short black/25 overlay inside the pill peaks at 150ms and eases out
with the 300ms snippet crossfade. The LED rim and page stay undimmed.
Reduced motion skips the overlay.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:45 Destroyed
Periwinkle while For agents is selected, honey on For humans. Copy still
shows the tick but no longer drives the LED deploy lerp. Fill dim on tab
swap is unchanged.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:46 Destroyed
Snippet fade/slide, fill dim, and honey↔periwinkle deploy lerp all
stretch to about half a second so the transition feels less abrupt.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-548 September 8, 2026 10:49 Destroyed
Replace the fade/slide snippet swap with a character-by-character
typewriter so For humans ↔ For agents feels like the text is being
entered. Speed targets ~520ms of glyphs (humans a tad slower, agents
floored so the long prompt does not crawl). Reduced motion gets the
full string instantly. The chip and LED rim stay mounted.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
Railway's Next typecheck treats window.setInterval as number, not
Node's Timeout. The typewriter timer now uses number so the preview
build can finish.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
Georgina preferred the humans glyph rate. Both snippets now type at
23ms per character instead of speeding up the longer agents prompt.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
Copying on pointerdown behind a 400ms latch meant the click ~10ms later
returned early and never wrote, so a tap showed the tick with an empty
clipboard; the latch now guards only the tracking beacon. useCopy also
gates the tick on the resolved write, so a rejected or missing clipboard
no longer renders a success tick.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011dckaZTpCJMniJGB8RPa2K
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.

4 participants