Skip to content

feat(marketing): three.js clipping engine with moving parts - #55

Merged
SomeRandmGuyy merged 5 commits into
mainfrom
feat/marketing-clipping-engine
Sep 28, 2026
Merged

SomeRandmGuyy merged 5 commits into
mainfrom
feat/marketing-clipping-engine

Conversation

@SomeRandmGuyy

@SomeRandmGuyy SomeRandmGuyy commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

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.

  • The machine (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.
  • anime.js drives it: the onScroll timeline 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.
  • Data model (src/lib/clip-engine.ts): per-stage configs (camera + which parts run) and clip formations as pure functions, covered by src/lib/clip-engine.test.ts.
  • three.js is loaded with a dynamic import, so only the landing page pays for it. Theme toggle recolours the engine live (dark and light palettes). The render loop pauses when the stage is off screen.
  • prefers-reduced-motion: the engine renders once, assembled, and nothing animates. Without WebGL the stage keeps its readouts over a static glow.
  • Copy, chapters, Rolling out / Live labels, demo form, FAQ and captures are unchanged. Adds a vertical parts legend (2 film reels · 3 render rotors · 4 transmitters · 12 clips).

Type of change

  • feat — new capability
  • fix — bug fix
  • docs — documentation only
  • refactor — no behavior change
  • chore / ci — tooling and pipeline

Verification

  • src/lib/clip-engine.test.ts — 17/17 pass
  • npm run typecheck — tsc --noEmit exit 0
  • npm run lint — eslint src/components/marketing src/lib/clip-engine.ts src/lib/clip-engine.test.ts exit 0; prettier clean on changed files
  • UI touched: Vercel preview driven with Playwright + Chromium (SwiftShader WebGL) — every stage rendered in isolation, plus the real page at 1440×900 dark and light, 390×844 mobile and reduced motion. WebGL canvas created, no page errors, no horizontal overflow. Only console error is the existing platform-chrome CSP block of grok.com/grok-app-builder/extensions.js.
  • Auth/routes touched: n/a

Contracts check

  • No secrets committed; .env.example documents names only
  • Server-only code stayed under src/lib/server/ / *.server.ts (no server code touched)
  • If schema changed: n/a
  • Platform chrome untouched

🤖 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-host canvas (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 shared EngineView.progress instead of per-frame CSS variables; anime.js still handles HUD/panels, assembly intro, parallax, and ripples. clip-engine.ts is rewritten around per-stage engineStateAt / 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.

RetriggerConfidence Score: 5/5

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.

  • Twelve clips move through the engine’s stage formations, with updated tests and readouts.
  • The recent gate adjustment keeps the conveyor aligned with the gate.
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]
Loading

Reviews (3) · Last reviewed commit: "fix(marketing): centre the approval conv..."

SomeRandmGuyy and others added 3 commits September 28, 2026 06:47
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
@vercel

vercel Bot commented Sep 28, 2026

Copy link
Copy Markdown

Deployment failed for project clippyos with the following error:

Hobby accounts are limited to daily cron jobs. This cron expression (*/15 * * * *) would run more than once per day. Upgrade to the Pro plan to unlock all Cron Jobs features on Vercel.

Learn More: https://vercel.link/3Fpeeb1

@vercel

vercel Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
clippyos Ready Ready Preview Sep 28, 2026 7:34am UTC

Request Review

@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

Comment thread src/components/marketing/clip-engine.tsx Outdated
Comment thread src/lib/clip-engine.ts
Comment thread src/components/marketing/engine/clip-engine-scene.ts
Comment thread src/components/marketing/anime/landing-motion.ts
Comment thread src/components/marketing/engine/clip-engine-scene.ts
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
@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

greptile-apps[bot]
greptile-apps Bot previously approved these changes Sep 28, 2026
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
@greptile-apps
greptile-apps Bot dismissed their stale review September 28, 2026 07:33

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

@SomeRandmGuyy
SomeRandmGuyy merged commit 3cd49a9 into main Sep 28, 2026
6 of 10 checks passed

This branch was successfully deployed

1 active deployment
Preview – clippyos — 2228f027 Deployed Sep 28, 2026 by vercel[bot]
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