Orchestrating a cinematic web experience: From starfield projections to character-driven storytelling.
See this project in action. Explore the full functionality and design in a live environment.


This project represents a masterclass in 'Creative Engineering', where code drives narrative. The core challenge was to build a 'Convergence Engine'—a complex sequence where two characters (A Saudi Man and a Robot) traverse a 3D starfield tunnel to meet. To achieve this, I built a custom 'Handshake Lab' (debug tool) to visually manipulate the X/Y/Rotation matrices of the assets in real-time, exporting the precise values to the GSAP timeline. The architecture uses a 'Dual-Mode' rendering system: Desktop experiences feature pinned, stacking cards and vertical infinite loops, while Mobile experiences gracefully fallback to natural touch-driven scrolls, guarded by a custom 'Landscape Protection' layer to ensure optimal viewing.
Engineered a '3D Starfield Projection' engine: Utilizing HTML5 Canvas and RequestAnimationFrame, I built a depth-based particle system where stars propagate along the Z-axis (z -= speed), creating a warp-speed tunnel effect that reacts to the user's scroll position via GSAP. I implemented the perspective projection formula `x = (star.x / star.z) * width + width / 2` to simulate true depth.

Developed the 'Convergence Timeline' architecture: A complex GSAP implementation that synchronizes text blurring/scaling (3D fly-through effect) with character movements. The characters move based on calculated steps: `y: -180 + (i + 1) * (165 / texts.length)%` with alternating rotations `i % 2 === 0 ? 3 : -3`, ensuring perfect pacing regardless of content length.

Built a 'Handshake Lab' Debugger: To solve the alignment challenge of the Man/Robot handshake, I created a dedicated internal tool ([HandshakeTester.tsx](cci:7://file:///c:/Users/NV_USER/Desktop/haleef/app/components/HandshakeTester.tsx:0:0-0:0)) with GUI sliders. This allowed for real-time manipulation of translation and rotation values, exporting the final coordinates directly to the production code.

Implemented 'Dual-Mode Stacking' logic: The Solutions section uses `gsap.matchMedia()` to completely swap logic. On Desktop (>1024px), it calculates cumulative heights (`currentY += offsetHeight + gap`) to create a 'Pin & Stack' effect where cards slide over each other using calculated z-indexes. On mobile, it reverts to a 'Natural Flow' with simple scroll-triggered fade-ins.

Designed a 'Zero-Gravity' Navigation system: The interface features a floating capsule that 'bobs' using a continuous sine-wave animation (`yoyo: true`, `repeat: -1`). It includes velocity-aware visibility (hiding on fast scroll down) and utilizes Lenis for clean, custom-eased anchor scrolling: `Math.min(1, 1.001 - Math.pow(2, -10 * t))`.

Created a 'Conflict Resolution' visualizer: A split-screen architecture featuring opposing infinite marquees. The 'Problems' loop flows upwards (Red), while 'Solutions' flows downwards (Blue), visually representing the transformation of chaos into order. I added a responsive conditional layout where loops stack horizontally on mobile and vertically on desktop.

Integrated 'Landscape Guard' protection: To preserve the integrity of the vertical storytelling experience on mobile, a dedicated guard component detects `landscape` orientation via media queries (`hidden landscape:flex`) and renders a 'Please Rotate' overlay with a gyroscope animation.

Visit the live project or check out the source code




Explore more of my work













NOOR
"If Your Dreams do not scare you, they are too small !"
Got a project? Let’s vibe together and
make it ninjaa-precise—get in touch!