Skip to content

No.310 · Media· New

Helix Showcase

A portfolio as a spiral of curved project cards wound round an invisible column, over a dark field of glowing blue wave lines. Scrolling turns the spiral like a screw: cards rise out of the top while the next ones come up into view from below.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Dark

Build a scroll-driven 3D portfolio (a fictional studio, 'Vela', sixteen projects) in one WebGL canvas inside a sticky full-height stage, in a section four viewports tall. Background pass: near-black navy with a soft radial lift, eight glowing wave filaments (each a sum of two sines, drawn as a thin bright core, exp(-d²·5200), inside two soft halos), some running in pairs in electric blue (#2463ff) with pale cores where they are strongest, drifting slowly and shifting with scroll, plus fine grain. Cards: each project is a card 2.05 × 1.32 units bent onto a cylinder of radius 2.6, built from a 28-segment strip so it is truly curved, with rounded corners cut in the fragment shader. Card i sits at angle i × 52° and height −i × 0.62. The whole helix is tilted (12° about x, −15° about z), shifted a little right and seen through a 38° perspective camera. Cards facing away show their backs, mirrored and darkened; front faces are lit by how squarely they face the camera; distant cards sink into fog and cards fade at the top and bottom of the frame. Draw back to front with alpha. Scroll: progress through the section maps to lift; the helix moves as a screw (turn = −lift/pitch × step), so each card in turn comes to the front centre while the ones before it rise out of the top and the next come up from below. Lift follows the scroll through a critically damped spring. Every card image is a fictional website painted on a 2D canvas (nav, headline, text bars, buttons, a 'photograph' painted from gradients) and packed into a 2048² atlas. Overlay: a glass top bar (blurred, 18px radius) with the brand, links, a theme switch and a white 'Let's talk' pill; a caption bottom left with '04 / 16', the project and its field; a 'Scroll' hint bottom right. Selected variant — Dark (dark): Palette for this theme (Dark): --hlx-bg #010307; --hlx-edge rgb(255 255 255 / 0.12); --hlx-focus #8fb4ff; --hlx-glass rgb(12 14 20 / 0.62); --hlx-ink #ffffff; --hlx-knob #ffffff; --hlx-pill #ffffff; --hlx-pill-ink #050607; --hlx-soft rgb(255 255 255 / 0.62); --hlx-track rgb(255 255 255 / 0.16). Treat these as the root colour tokens, one value per role, and name them to suit your code. Select it with the theme option set to "dark". Keep every dimension, spacing value, state and motion from the brief unchanged, and keep text at 4.5:1 contrast or better on these surfaces. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Scroll to turn the helix. The stage is focusable: ↑/↓, ←/→, Page Up/Down, Home and End scroll the page to the position that brings the previous or next project to the front. The switch toggles the light and dark scene. Motion: The helix eases after the scroll and the waves drift. With reduced motion the helix follows scroll directly with no spring and the waves hold still; rendering pauses off-screen. Accessibility: The front project is announced politely and shown as a caption; the full project list is in the page as an ordered list of links. Without WebGL the same painted cards appear as a responsive grid. Responsive behavior: Below 720px the camera pulls back and the helix centres; below 52rem the bar keeps only the brand, switch and button. Touch: Touch scrolling drives it the same way. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
Scroll to turn the helix. The stage is focusable: ↑/↓, ←/→, Page Up/Down, Home and End scroll the page to the position that brings the previous or next project to the front. The switch toggles the light and dark scene.
Motion
The helix eases after the scroll and the waves drift. With reduced motion the helix follows scroll directly with no spring and the waves hold still; rendering pauses off-screen.
Accessibility
The front project is announced politely and shown as a caption; the full project list is in the page as an ordered list of links. Without WebGL the same painted cards appear as a responsive grid.
Responsive
Below 720px the camera pulls back and the helix centres; below 52rem the bar keeps only the brand, switch and button.
On touch
Touch scrolling drives it the same way.

Featured

373 components