Skip to content

Landing page: cursor-reactive hero, flow sketch and backoff chart - #59

Open
NickolasBenakis wants to merge 15 commits into
mainfrom
oneshot/premium-motion
Open

NickolasBenakis wants to merge 15 commits into
mainfrom
oneshot/premium-motion

Conversation

@NickolasBenakis

@NickolasBenakis NickolasBenakis commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

Makes hookgres.dev feel less templated: motion that reacts to the cursor, a blueprint sketch of how a webhook flows, and a real chart for the retry simulator.

What changed

  • Hero dot field (site/motion.js): a canvas grid behind the hero. Dots near the cursor turn blue and move aside, and faint streaks cross toward the code window. It's densest behind the code and fades out under the headline.

  • Floating code window: tilts up to ~3° toward the cursor; its shadow falls away from the cursor, as if the cursor were the light (dark mode keeps a faint tinted underlight, since a shadow can't show on black).

  • Section labels: mono product terms (BEGIN … COMMIT, webhook-signature, hookgres.deliveries) led by the sketch's packet mark, instead of generic blue labels.

  • Cursor spotlight on code windows and interactive panels ([data-spot]): a lit edge plus a faint inner light where the cursor is.

  • "How it flows" sketch (new section after the hero): app → one transaction (invoices + hookgres.messages, COMMIT) → three SKIP LOCKED workers → endpoints returning 204, 503→204 and 500. Packets loop while it's on screen (with a short rest between runs) and the failed delivery takes a dashed retry path back. No scroll-triggered draw-in.

  • Retry chart: attempts evenly spaced, elapsed time on a log scale, so the curve is the backoff. "Send event" moves a dot along it and colours each attempt.

  • Night band: Retries, Signatures and Delivery log sit in a deep Postgres-blue band (soft seams in and out, the hero's dot texture). The closing CTA is a panel of the same band.

  • Live delivery log: new deliveries arrive at the top, attempts tick in on the compressed schedule, statuses settle, older rows slide out. Pauses on hover and with a Pause button (WCAG 2.2.2).

  • Sketch steps: send() → COMMIT → SKIP LOCKED → POST under the drawing. The lit step follows the packets; hover, keyboard focus or press holds the drawing on a step (on phones, pressing also scrolls the drawing there).

  • Numbers each get a small drawing of the default (retry spacing, five-day window, secret overlap, zero-loss grid).

  • Signature demo: the signature resolves out of noise when it changes; tampered bytes are marked red. Copy always takes the settled signature.

Behaviour notes

  • Loops run only while their element is on screen and the tab is visible.
  • Tilt and spotlight run only with a mouse. Touch devices get a still dot grid.
  • prefers-reduced-motion: no loops or tilt; the sketch is static.
  • Hero streaks stay out of the text (right of the copy, above the feature list).
  • Removed: fake window dots on the retry and log panels.
  • Fits the existing CSP: motion.js is same-origin, nothing external. No new dependencies.
  • On phones the sketch (760px minimum width) scrolls sideways inside its card and can take keyboard focus.

Verification

  • pnpm site:build and pnpm lint pass.
  • Headless Chrome in light, dark, 390px phone and reduced-motion: no page errors, and no sideways page scroll at 390, 600, 768, 1000 and 1100px.
  • vitest wasn't run (its setup needs Docker Postgres). The only landing-page test checks the pricing row, which is unchanged.
  • An independent review found 5 issues, all fixed: glow overflow at 450–960px, streak drawn off its row, a loop that could survive a fast scroll, the hidden sketch scrollbar, and an always-on animation on phones.

Follow-ups

  • Turning on reduced motion mid-visit only applies after a reload (the existing page code works the same way).
  • The 404 page and the docs don't have the new motion yet.

🤖 Generated with Claude Code

- Hero: canvas dot field that lights up and moves aside near the cursor,
  with streaks crossing toward the code window; the code window tilts
  toward the cursor over a drifting glow.
- Cursor spotlight on cards (lit edge and soft inner light).
- New "How it flows" blueprint sketch: app -> one transaction -> SKIP
  LOCKED workers -> endpoints, with looping packets and a retry path.
- Retry simulator: a log-scale backoff chart replaces the progress line.

Loops run only while on screen; touch devices get a still grid;
reduced motion gets static drawings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hookgres Ready Ready Preview Nov 13, 2026 6:56pm UTC

NickolasBenakis and others added 14 commits November 12, 2026 22:19
- Section labels name the real thing in mono (BEGIN … COMMIT,
  webhook-signature, hookgres.deliveries) with the sketch's packet mark.
- The colour glow behind the hero code window is now a shadow cast
  away from the cursor.
- Remove fake window dots, the sketch's scroll-triggered draw-in, and
  the spotlight on quote cards that aren't clickable.
- Hero streaks stay out of the text: right of the copy, above the
  feature list.
- Chart caption for the time axis; rewrite the closing heading and the
  simulator's empty state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Retries, signatures and the delivery log sit in a deep Postgres-blue
  band with soft seams and the hero's dot texture; the closing CTA is a
  panel of the same band.
- The delivery log is live: new deliveries arrive at the top, attempts
  tick in, statuses settle, older rows slide out. Pauses on hover and
  with a Pause button.
- Four steps under the flow sketch follow the packets; hover, focus or
  press one to hold the drawing on that step (on phones it also scrolls
  the drawing there).
- Small drawings of each default above the numbers.
- The signature resolves out of noise when it changes; tampered bytes
  are marked. Copy always takes the settled signature.
- The Hookgres column of the comparison table is tinted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The retry chart tours healthy, flaky and down while on screen, and the
commit demo alternates; picking a control stops the tour. The signature
playground is replaced by a section on verifying with the official
Standard Webhooks libraries, with tabs that rotate through five
languages. Drops the 2x playback notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One invoice.paid goes to a healthy, a flaky and a down endpoint on the
same schedule. Each lane fills as attempts land, counts down to its next
try and ends Delivered or Failed, so every run has something to watch.
Plays while on screen with a Pause button; reduced motion shows the
final state. Removes the mode buttons and the single-curve chart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both rows (invoices and hookgres.messages) land pending, then commit or
roll back together; on commit the worker carries the event to acme.com
(204), on rollback the wire is cut and nothing is sent. Commit/Roll back
move into the code bar as toggles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The auto-playing delivery log repeated the retry race. It's now a console
with three real queries against hookgres.deliveries, messages, endpoints
and attempts, results in a real table, and a Replay button that walks a
failed delivery through replayDelivery(). Nothing moves until clicked.

Verify tabs step through each language once, then rest on Node; each
snippet notes what a failed check looks like. Hero code fits on phones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- New "when you need it" section after the hero: six customer requests
  from docs/use-cases, plus who doesn't need Hookgres.
- Transaction demo gets pg / Prisma / Drizzle tabs; Commit and Roll back
  drive all three. Copy points to the ORM guide.
- Waitlist and comparison table say how customers add endpoints today:
  your own settings page around createEndpoint().
- The install-to-retry recording moves into the rollback section as a
  second tab; its separate section is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Curly apostrophes in the copy, one 0.96 press scale everywhere (tabs
included), neutral focus rings, and equal-height video captions so
switching recordings doesn't move the page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Section labels larger and in the accent colour; headings get a
  measure; body copy steps up to 18px.
- Dark bands fade with eased stops into the colour of the section they
  meet (the night band now meets the alt section without a line), and
  the alt section fades into the page.
- Agent row: a one-line pitch, and tooltips on the agent logos and copy
  buttons replace the bottom toast.
- Use-case cards: brand logos, whole-card links to each case, and a
  request line that delivers once on screen.
- Bug quotes: source cards with logo, tracker id, date, highlighted
  phrase and a link out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Section labels 15px, headings capped at 38px, so the label reads as
  part of the heading instead of a footnote.
- The dark band's own padding never applied (section.band won on
  specificity), so its first and last lines sat on the fade. Fixed.
- Copy: no mid-sentence colons, fewer three-item lists, plainer
  phrasing in the library and verify sections.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The row reads "Ship webhooks in one prompt."; the copy button still puts
"Add Hookgres webhooks to this app: hookgres.dev/llms.txt" on the
clipboard. The separate pitch line is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A cursor works the transaction demo and SQL console. Hover, tap or keyboard
focus takes over from the current state, and play resumes 8s after the reader
leaves. The retry race can be scrubbed, and the verify tabs keep cycling.
Only the reader's own clicks are announced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hover no longer pauses the live demos; only the reader's own click or
keyboard focus holds one, for eight seconds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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