Case study · A three-minute read

Designing for night-adapted eyes

Nyx answers one question for the 63 US national parks: where should I go, and on which night, for the darkest sky? Everything in its design follows from who asks it, and where they are standing when they do.

The problem, at one park

Joshua Tree sits two to three hours from Los Angeles. On a clear night with no Moon, its darkest corners are dark enough to show the Milky Way's structure. On the same date a month later, a gibbous Moon can wash most of that out, and the drive is the same. A weather app tells you about clouds. An almanac tells you about the Moon. A light-pollution map tells you about Palm Springs on the horizon. Nobody joined them for a park and a night, and nobody put a closed road beside the answer.

One score, and the weakest link

Each night gets a Darkness Score from 0 to 100. Four parts add up: the Moon up to 40 points (by its phase and how high it stands through true darkness), clouds up to 25, sky glow up to 20 (from the park's estimated Bortle class) and the hours of true darkness up to 15. Then the weakest part may cap the sum. An early version only added, and an overcast desert night with no Moon still read as good. People do not experience a night as a sum; one problem spoils it.

A worked example, using the published rules. A clear, moonless November night at Joshua Tree (Bortle 3, about eleven hours of true darkness):

PartClear40% cloud
Moon40 of 4040 of 40
Clouds25 of 2515 of 25
Sky glow15 of 2015 of 20
Dark hours15 of 1515 of 15
Sum9585
Cap that appliesSky glow: Bortle 3 holds any night to 89Clouds: 100 − 0.9 × 40 = 64
Score89, Excellent64, Good

The app writes the binding cap under the number, for example "Sky glow limits tonight to 89", so four meters that add to 95 never sit beside an 89 without a reason. Only a Bortle 2 sky or darker can read Pristine.

Drawing honesty

A forecast is good for a few days and guesswork after that, and the design has to show the difference without a paragraph of caveats.

Red light, measured

Eyes take twenty to thirty minutes to adapt to the dark, and a white screen undoes it in a second. Nyx is dark by default, and its night-vision mode turns every surface red, native controls included. Red at low brightness is easy to make unreadable, so the palette was tuned against WCAG contrast rather than by eye:

Ratios are computed from the design tokens. Antialiased and composited pixels on a real screen still need sampling on a device, and that pass is not finished.

A Moon you could print

The Moon is not an image. A Metal shader draws it as a lit sphere, pixel by pixel, from NASA's lunar colour map. The light comes from the Sun's real direction for that night. The disc is turned so its north pole points where it does from the park, with the Moon's libration applied, and the dark side carries a faint earthshine. Reflectance follows Lommel–Seeliger, so a full Moon stays evenly bright to its edge, as the real one does. On Apple Vision Pro the same map wraps a globe you can place on a table, lit at the night's true phase. Drag it and it turns back to the face we always see.

For more people

Apple's automated accessibility audit passes on every screen, in both palettes, in the simulator. Testing with people who use VoiceOver and Voice Control, on real devices, is the next step.

What was left out, and why

The numbers

Moon times were also checked at parks in Alaska, Hawaiʻi, American Samoa and the Virgin Islands, where they agree to within a minute. Terrain and the atmosphere can shift what you actually see by a few minutes more.