All websites

08 / Case study

Ortyx Orbital / 2026

Ortyx Orbital — 3D animation that doesn’t slow the site down

A landing page for a fictional satellite company, in Astro and Sanity. A three.js satellite comes apart as you scroll, next to a globe with orbits and ground stations. On desktop, Lighthouse gives 100 in every category.

Role
Design and development / my own demo
Year
2026
Scope
  • three.js
  • GSAP and Lenis
  • Load order
  • Accessibility
  • Sanity
Disciplines
  • Astro
  • three.js
  • GSAP
  • Sanity
  • Cloudflare Workers
Visit site
The Ortyx Orbital home page: a 3D satellite in the middle of the headline “Ziemia, odświeżana co 90 minut” (Earth, refreshed every 90 minutes)

The idea

3D animation has a reputation as a performance killer: a heavy library, a long load, choppy scrolling and a red Lighthouse score. Ortyx Orbital is a demo built to show it doesn’t have to be that way.

It is the landing page of a fictional company building a constellation of small observation satellites. A three.js satellite flies across the first screen, and in the Anatomy section it comes apart into modules as you scroll. Below is a globe with orbits and 14 ground stations, then the missions in a pinned horizontal scroll.

The Anatomy section: the satellite taken apart into modules, with part labels and a description of the onboard computer
The satellite comes apart as you scroll.

The page first, then the 3D

The first screen doesn’t wait for the scene. The largest element Lighthouse measures (LCP) is the heading in the HTML, and the styles are inlined in the page. The fonts, cut down to Latin with Polish letters, weigh 63 KB together.

three.js (150 KB) is a separate file. It loads only after the page has loaded, when the browser is idle, and not at all with data saving on. The scene is built in short pieces, and the shaders compile before the first frame appears. That is why loading the 3D never blocks clicks or scrolling.

Without a GPU, on a virtual machine or in some automated tests for example, the browser would compute the scene on the CPU at a few frames a second. The page checks for that in a separate thread and then shows still renders of the satellite and the globe, made from the same scene, instead of the 3D.

Diagram: first the text in the HTML, which is the LCP; after the page loads, when the browser is idle, three.js in a separate file; last, the satellite’s first frame
The page works before the 3D arrives.

Smoothness

Scrolling, the GSAP animations and the scene’s render all run on one clock. Lenis smooths the scrolling, ScrollTrigger only writes progress from 0 to 1, and the scene reads it in the same frame and smooths it itself.

When frames take longer than 24 ms on average, the scene lowers its render resolution instead of dropping frames. When another section covers the satellite, rendering stops. On phones the scene is lighter: no antialiasing, 700 stars instead of 1,500 and sparser dots on the globe.

The Coverage section: a globe of land dots with orbits and a list of ground stations, with the card of the Svalbard station
The globe turns with a drag or the arrow keys.

Accessibility

Motion can be stopped with a button in the header (WCAG 2.2.2), and the choice is remembered. With “reduce motion” on, the satellite changes state in one step, without animation, and scrolling stays native. All the content is in the HTML, and the canvas is hidden from screen readers. The globe works with a keyboard, and the stations are buttons with a card that announces the chosen one.

The Applications section: a horizontal strip of missions with NASA photos, including wildfires and glaciers
The missions in a horizontal scroll, with NASA photos.

The result

Lighthouse on desktop (measured on 2 November 2026): 100 for performance, accessibility, best practices and SEO. LCP 0.4 s, blocking time 0 ms, layout shift 0. In the mobile simulation, performance is 99–100. On first load, the home page downloads about 300 KB, half of it three.js.

The content (sections, satellite parts, stations and missions) lives in Sanity, in Polish and English. The contact form saves messages in a separate, private dataset.

Questions

  • Does 3D slow a site down?

    It doesn’t have to. Here three.js loads after the page, when the browser is idle, so it neither delays the first screen nor blocks clicks. On desktop, Lighthouse gives 100 in every category.

  • What does someone with a weaker phone, or with reduced motion, see?

    On a weaker phone, a lighter scene: fewer stars, no antialiasing, and a resolution that drops when the phone can’t keep up. With “reduce motion” on, the satellite changes state without animation, and the “Pause motion” button stops the background animation. All the content is in the HTML, so nothing is lost.

  • Is the satellite a model from a 3D program?

    No. It is built in code from simple three.js shapes, with materials painted on a canvas, so the page downloads no model file at all.

Tell me what you need.

Reply within 24 h

What is it about?

Please enter your name.

Please enter a valid email address.

Please write a message (min. 10 characters).

Add details: company, timeline, budget
Budget optional

Form data is used only to reply to your message. Privacy policy

SR / Terminal

Tab completes · ↑↓ history · Esc closes