Repository navigation
feat(marketing): anime.js clip engine landing page - #54
Conversation
Rebuild the homepage as a scroll-driven story in the style of the Spectrum Web Co and Desk Lanes sites: a pinned CSS-3D ClippyOS clip engine that anime.js v4 scrubs chapter by chapter. Twelve footage frames circle a spinning ClippyOS core, unroll into a film strip, get their hooks detected and cut into four clips, turn into captioned vertical cards, are signed off in Approvals, fan out to X, YouTube, Instagram and TikTok, stack into the Library and join the Hermes loop. The same createScope runs the hero intro (split text, boot LEDs, frames dropping into the ring), split-word reveals, a scroll HUD and magnetic CTAs. Stage poses live in src/lib/clip-engine.ts with unit tests. Ingest, detect, cut and caption/render are labelled Rolling out until the native clipping pipeline ships; approvals, the Social Machine, the Library and Hermes are labelled Live. With prefers-reduced-motion the stage renders one static formation. Magic UI / Motion effects are removed from the homepage only; other pages keep them. The FAQ uses native details. The unused feature grid, logo cloud, spotlight, tilt card and testimonials components are removed. The demo form, Get Access flow and product captures are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
|
Deployment failed for project clippyos with the following error: Learn More: https://vercel.link/3Fpeeb1 |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_0b12312b-2be8-478b-a781-399a5666e196) |
| enter: "bottom top", | ||
| leave: "bottom-=36% top", | ||
| sync: 0.4, |
There was a problem hiding this comment.
Reveals trigger after content leaves When a visitor scrolls down normally,
bottom top is reached only after the heading has passed above the viewport. The copy uses the same trigger, and the product shots and FAQ items are hidden before a similarly late trigger. Visitors therefore cannot see these elements reveal while they are viewing them.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/components/marketing/anime/landing-motion.ts
Line: 323-325
Comment:
**Reveals trigger after content leaves** When a visitor scrolls down normally, `bottom top` is reached only after the heading has passed above the viewport. The copy uses the same trigger, and the product shots and FAQ items are hidden before a similarly late trigger. Visitors therefore cannot see these elements reveal while they are viewing them.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.There was a problem hiding this comment.
Not a bug. anime.js v4 reads enter/leave as "<container> <target>" (see ScrollObserver.refresh in animejs/dist/modules/events/scroll.js: enterContainer = splitted[0]; enterTarget = splitted[1]). So enter: "bottom top" fires when the viewport's bottom edge meets the element's top edge, i.e. as the heading scrolls into view from below, and leave: "bottom-=36% top" completes the reveal when the heading's top is 36% above the viewport bottom. Checked in headless Chrome at 1440×900: every section heading is fully revealed while it sits in the upper half of the viewport. Same pattern as the Desk Lanes homepage.
There was a problem hiding this comment.
You're right — I had the enter/leave boundary order reversed. In anime.js v4 these are parsed as <container> <target>, so enter: "bottom top" starts when the viewport bottom reaches the heading's top, while leave: "bottom-=36% top" completes the reveal at the intended in-view position. The headless check confirms the content is visible during its reveals. I’m withdrawing this finding; no change is needed.
Tip: You can customize Greptile's behavior for this repo with .greptile/rules.md and .greptile/config.json.
| locate(); | ||
| }, | ||
| }); | ||
| animate(head, { x: [0, ruler.clientWidth], ease: "linear", duration: 1000, autoplay: observer }); |
There was a problem hiding this comment.
Reduced motion still moves HUD When a visitor requests reduced motion, this animation still moves the ruler head as they scroll. The other motion effects are disabled, but the HUD does not provide the promised static experience.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/components/marketing/anime/landing-motion.ts
Line: 397
Comment:
**Reduced motion still moves HUD** When a visitor requests reduced motion, this animation still moves the ruler head as they scroll. The other motion effects are disabled, but the HUD does not provide the promised static experience.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.There was a problem hiding this comment.
Leaving this as is. With reduced motion the HUD uses sync: true, so the ruler head is a direct 1:1 read-out of scroll position, like a scrollbar thumb, with no easing, smoothing or autonomous movement. The decorative effects (intro, reveals, engine, spin, magnets) are all off in that mode.
There was a problem hiding this comment.
That’s a fair distinction. With sync: true, the ruler head is a direct scroll-position indicator rather than an independently animated effect, so it does not violate the reduced-motion intent. The surrounding motion is disabled in reduced-motion mode as described. I’m withdrawing this finding; no change is needed.
The stage readout, live flag, timecode and ring spin read the raw scroll progress, so after a fast scroll or anchor jump they ran ahead of the frames and panels, which follow the smoothed timeline. Update them from the timeline's own onUpdate so they change with the visuals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_d2d3d9e4-d7f8-43df-9e1b-ded3605e9330) |
| </p> | ||
| </Chapter> | ||
|
|
||
| <Chapter name="Hermes loop" id="native"> |
There was a problem hiding this comment.
Missing landing UI coverage The landing page now has a scroll-driven engine, and the FAQ uses native
<details>, but no matching scripts/qa-*.ts Playwright suite was added or extended. AGENTS.md requires extending the matching suite when a screen changes. Manual browser checks do not provide repeatable regression coverage; this repository requirement must be satisfied before merging.
Context Used: AGENTS.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/components/marketing/landing-page.tsx
Line: 328
Comment:
**Missing landing UI coverage** The landing page now has a scroll-driven engine, and the FAQ uses native `<details>`, but no matching `scripts/qa-*.ts` Playwright suite was added or extended. AGENTS.md requires extending the matching suite when a screen changes. Manual browser checks do not provide repeatable regression coverage; this repository requirement must be satisfied before merging.
**Context Used:** AGENTS.md ([source](https://github.com/swcstudiospace/clippyos/blob/main/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Summary
Rebuilds the public landing page (
/) as a scroll-driven story on anime.js v4, matching the Spectrum Web Co and Desk Lanes marketing upgrades.src/components/marketing/clip-engine.tsx) sits on the right while chapters scroll on the left. OneonScrolltimeline scrubs it through ten stages: twelve footage frames around a spinning ClippyOS core → film strip → hooks detected → cut into four clips → captioned vertical cards → signed off in Approvals → fanned out to X, YouTube, Instagram and TikTok → stacked into the Library → Hermes loop → online.src/components/marketing/anime/landing-motion.tsruns the hero intro (split text, boot LEDs, frames dropping into the ring), split-word reveals, a stage readout with scramble text and timecode, side panels per stage, a scroll HUD and magnetic CTAs, all in onecreateScopereverted on unmount.src/lib/clip-engine.ts, covered bysrc/lib/clip-engine.test.ts.prefers-reduced-motionrenders one static formation with nothing animating.<details>. The now-unused feature grid, logo cloud, spotlight, tilt card and testimonials components are deleted. Demo form, Get Access flow and product captures are unchanged. The landing header is fixed so the stage fills the viewport from the top.Type of change
feat— new capabilityfix— bug fixdocs— documentation onlyrefactor— no behavior changechore/ci— tooling and pipelineVerification
npm test—tests 415, pass 414, fail 0, skipped 1(the skip is the existing db.ts-blocked library-storage test);src/lib/clip-engine.test.ts17/17 passnpm run typecheck—tsc --noEmitexit 0npm run lint—eslint src/components/marketing src/lib/clip-engine.ts src/lib/clip-engine.test.ts src/routes/index.tsxexit 0, no warnings; prettier check clean on changed source filesgrok.com/grok-app-builder/extensions.js.Contracts check
.env.exampledocuments names onlysrc/lib/server//*.server.ts(no server code touched)server/middleware/grok-pwa.ts,grokPwaPlugin(),<PreviewHostBridge />,public/__grok/)🤖 Generated with Claude Code
https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
Note
Low Risk
Marketing-only UI and documentation; no auth, API, or server logic changes—main risk is scroll/animation UX regressions on the public page.
Overview
Replaces the public
/landing with a scroll-scrubbed story: a pinned CSS-3D clip engine on the right and narrative chapters on the left, wired through anime.js v4 (createScope+onScrollinlanding-motion.ts).Scrolling advances ten demo stages (ring → strip → detect/cut → vertical cards → approvals → social fan-out → library → Hermes → online) using poses from new
src/lib/clip-engine.ts, with 17 unit tests on geometry and Live vs Rolling out labels.ClipEnginerenders the 3D stage; hero intro, split-word reveals, stage readout/timecode, side panels, ScrollHud, and magnetic CTAs share one timeline;prefers-reduced-motionshows a static publish formation.The old Magic UI / Motion homepage (feature grid, logo cloud, testimonials canvas, spotlight, tilt cards, marquee) is removed; FAQ uses native
<details>. Product shots expand to ten surfaces (adds Social Machine + Inbox); demo/Get Access flows stay.animejsis added; README documents the clip engine. Largestyles.cssblock styles the spine, stage, and later sections.Reviewed by Cursor Bugbot for commit 89db774. Bugbot is set up for automated code reviews on this repo. Configure here.
The PR does not yet appear safe to merge because the content reveals remain mistimed and the changed UI lacks required Playwright coverage.
Fix with agent prompt
Summary
Replaces the public landing page with an anime.js scroll-driven clip-engine story, reorganizes the marketing sections, and switches the FAQ to native details. The new UI still needs the repository-required Playwright QA coverage.
Reviews (2) · Last reviewed commit: "fix(marketing): drive the engine readout..."