feat(marketing): three.js clipping engine with moving parts - #55
Conversation
Replace the CSS-3D clip engine with a WebGL clipping engine in the style of the Spectrum Web Co engine: an octagonal chassis, pumping pistons, a glass core with a spinning crystal, three render rotors, two film reels feeding a film strip, a hook scanner, a cutter that slams the strip into clips, an approval gate, four transmitters that broadcast ripples, and a library vault. Twelve clips move between formations while the camera orbits the engine. The anime.js scroll timeline drives the engine's stage progress, readout, panels and HUD; anime.js also runs the assembly intro, stage pulses, pointer parallax and transmitter ripples. three.js is loaded with a dynamic import so only the landing page pays for it. Stage configs and clip formations live in src/lib/clip-engine.ts with tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
Pull the camera back to frame the whole engine in every stage, lay the cut clips on a tray in front of the cutter, add sparks rising through the glass core, light the film frames with their own colours, and strengthen edges and key light so the parts read as a machine. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
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_931b0063-2bbf-4172-8d2f-239edb00e4e5) |
The approve stage now carries the clips along a conveyor through the gate, tints the ones that have passed, and the Approvals panel signs off all twelve clips per network. Ripple loops pause with the render loop and the grid material is disposed with the scene. 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_fa1e4d2e-3844-49a7-be8c-5d453891402f) |
Offset the gate so the pending queue, the gate and the approved clips all sit clear of the parts legend, and pull the approve camera back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
Dismissed because a newer commit was pushed; Greptile will re-review the current head.
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_9944b555-c026-4c63-8072-0f38e2f87dcc) |
Summary
Replaces the CSS-3D clip engine on the landing page with a three.js clipping engine with moving parts, in the same style as the Spectrum Web Co engine (anime.js + three.js), themed for ClippyOS.
src/components/marketing/engine/clip-engine-scene.ts): octagonal chassis, six pumping pistons, a glass core with a spinning crystal and rising sparks, three render rotors, two film reels feeding a moving film strip, a hook scanner ring, a cutter that slams the strip into clips (with a flash), an approval gate, a crown of four transmitters that broadcast ripples, and a library vault. Twelve clips move between formations (halo → reel → cut tray → render spiral → gate arc → broadcast → vault stack → Hermes orbit → halo) while the camera orbits and finishes with a full lap.onScrolltimeline scrubs the engine's stage progress plus the readout (mode, stage, timecode, live orbit/pitch/dist), panels and HUD; anime.js also runs the assembly intro, stage pulses, pointer parallax and the transmitter ripple loops.src/lib/clip-engine.ts): per-stage configs (camera + which parts run) and clip formations as pure functions, covered bysrc/lib/clip-engine.test.ts.prefers-reduced-motion: the engine renders once, assembled, and nothing animates. Without WebGL the stage keeps its readouts over a static glow.Type of change
feat— new capabilityfix— bug fixdocs— documentation onlyrefactor— no behavior changechore/ci— tooling and pipelineVerification
src/lib/clip-engine.test.ts— 17/17 passnpm run typecheck—tsc --noEmitexit 0npm run lint—eslint src/components/marketing src/lib/clip-engine.ts src/lib/clip-engine.test.tsexit 0; prettier clean on changed filesgrok.com/grok-app-builder/extensions.js.Contracts check
.env.exampledocuments names onlysrc/lib/server//*.server.ts(no server code touched)🤖 Generated with Claude Code
https://claude.ai/code/session_01AzZUDyzfUAfxJAXaPfiq8t
Note
Low Risk
Marketing-only landing visuals and bundle size (three.js on
/); no auth, API, or server paths touched. Residual UX risk is WebGL performance and the camera readout/parallax mismatch.Overview
Replaces the landing page’s CSS-3D clip demo with a WebGL three.js “clipping machine” that scroll still drives through anime.js, while three.js only loads on
/via dynamic import.The pinned stage is now an empty
data-engine-hostcanvas (clip-engine-scene.ts) showing chassis, pistons, reels, film strip, scanner, cutter, gate, transmitters, vault, and 12 clips moving through named formations. Scroll scrubs a sharedEngineView.progressinstead of per-frame CSS variables; anime.js still handles HUD/panels, assembly intro, parallax, and ripples.clip-engine.tsis rewritten around per-stageengineStateAt/clipPoseAt(camera + part intensities + formations), with expanded tests.UI/CSS: drops the large 3D frame/core CSS; adds canvas sizing, WebGL fallback glow, vertical parts legend, camera readout, and approvals grouped by network (3 clips × 4 networks). Docs: README describes the three.js engine. Deps:
three+@types/three.Note: Greptile flagged that the orbit/pitch/dist readout ignores pointer parallax (scroll-only); still open in this diff.
Reviewed by Cursor Bugbot for commit 2228f02. Bugbot is set up for automated code reviews on this repo. Configure here.
The PR appears safe to merge based on the reviewed changes and resolved prior findings.
Summary
The PR replaces the landing page’s CSS-3D demo with a dynamically loaded, scroll-driven three.js engine. Since the previous review, it shifts the approval gate, conveyor, camera, and tint threshold together; the earlier findings’ threads are resolved.
Diagram
%%{init: {'theme': 'neutral'}}%% flowchart LR Scroll[Scroll timeline] --> View[Engine progress] View --> Formations[Clip formations] View --> Camera[Camera and moving parts] Formations --> Gate[Approval gate] Gate --> Broadcast[Broadcast] Broadcast --> Vault[Library vault]Reviews (3) · Last reviewed commit: "fix(marketing): centre the approval conv..."