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):
| Part | Clear | 40% cloud |
|---|---|---|
| Moon | 40 of 40 | 40 of 40 |
| Clouds | 25 of 25 | 15 of 25 |
| Sky glow | 15 of 20 | 15 of 20 |
| Dark hours | 15 of 15 | 15 of 15 |
| Sum | 95 | 85 |
| Cap that applies | Sky glow: Bortle 3 holds any night to 89 | Clouds: 100 − 0.9 × 40 = 64 |
| Score | 89, Excellent | 64, 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.
- Filled, half-filled, hollow. On the calendar, the time river and the widgets, a filled night has a full forecast. A half-filled night is an early look, where the forecast is eased toward the park's usual clouds for that month. A hollow night has no forecast yet and uses the usual clouds alone, from ten years of ERA5 reanalysis. A night nobody can forecast is never treated as clear.
- Model bands. For the next seven days, three independent weather models are compared. When they disagree, the river draws the range of scores they allow, and the words say "Models differ".
- Estimates named as estimates. Bortle classes, sky glow from satellite night lights and meteor rates all carry the word, and About the data says what each cannot do.
- Access first. Park closures from the National Park Service sit beside the score. A score never confirms that a road is open, and the app says so.
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:
- Red text on black
6.2 : 1 - Red text on a red panel
5.6 : 1, secondary 5.3 : 1 - Starlight on indigo
16.7 : 1, secondary 8.9 : 1 - Black on amber
11.9 : 1
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
- Hear it. Audio graphs let VoiceOver users hear a month of darkness, the thirty-night river and the shape of the night. "Listen to tonight" plays the night as tones with a transcript.
- Feel it. Haptics can follow the Moon's phase, and the river ticks once per night as you scrub.
- Read it. Every custom control speaks a summary of its data. Layouts reflow at the largest text sizes instead of shrinking; the river becomes a native stepper.
- Get there. 60 of the 85 viewing spots carry step-free or partly step-free notes, each quoting the park's own accessibility page.
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
- A camera sky overlay. It would light up the screen and ask for the camera. "Where to look" turns a drawn sky with the phone's motion sensors instead.
- Driving times. Routing would mean a new service that learns where you are. The radius is a straight line, and it says "as the crow flies".
- Aurora forecasts. There is no free, reliable source for a single park and night. Alaska's parks get a season note that says Nyx does not forecast aurora.
- Accounts, sync and analytics. None. The journal stays on the device and can be exported as a file you keep.
- A cloud AI. Ask Nyx appears only where Apple's on-device model is available, and reasons only over the records Nyx hands it.
The numbers
- 63national parks, 85 named viewing spots
- 0data collected; three public services, each with its own switch
- 268unit tests in 25 suites
- 3.7 minlargest Moon rise or set difference from the U.S. Naval Observatory at mid-latitude parks; under a minute for the Sun
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.