Back to the dev blog
Engineering Update ·

On the Road to Launch: Designing Easy Eyes for iPhone, iPad, Apple TV, and Apple Vision Pro

An architectural overview of how we rebuilt Easy Eyes from the ground up: the crystal simplification redesign, our lit-sphere and blink renderers, RealityKit passthrough on visionOS, and our offline-first sync backend.

As we prepare for the upcoming App Store release of Easy Eyes (App Store Connect app record 6778345800 for iOS/iPadOS/tvOS and 6802504215 for visionOS), we wanted to share an engineering account of how the product was built, the architectural decisions we made along the way, and what to expect when the app opens to the public.

The Crystal Simplification Redesign

In our early prototypes, Easy Eyes suffered from a common trap in health and habit apps: too many screens, too many competing buttons, and heavy, saturated gradient fills. When a user opens an app because their eyes hurt from staring at bright screens, an interface full of vivid orange buttons, film grain, and busy analytics charts only causes more visual fatigue.

In July 2026, we executed a complete redesign centered around extreme visual restraint:

  • 3-Tab Architecture: We collapsed the interface into three clean tabs: Home, Progress, and Settings. Secondary features like friends leaderboards, badge showcases, and quest lists were moved into clear sub-pages under Progress rather than crowding the top-level tab bar.
  • The Time-Aware Hero Card: The Home screen presents one obvious action. A pure deterministic recommendation engine examines the current hour:
    • Before 11:00 AM → Follow the Light (waking up ocular muscles).
    • 11:00 AM to 5:00 PM → 20-20-20 Break (midday screen relief).
    • 5:00 PM to 9:00 PM → Box Breathing (evening transition).
    • After 9:00 PM → 4-7-8 Calm (pre-sleep relaxation).
  • Four Restrained Palettes: We engineered four low-saturation crystal themes: Dusk (cool slate-blue), Ember (muted copper-graphite), Warm (pale gold neutral), and Paper (soft light mode). All themes use native Liquid Glass surfaces (.glassEffect on OS 26+) and faint, neutral glows rather than heavy color washes.

The Player Engine: Lit-Sphere & Blink Rendering

The core interaction of Easy Eyes happens inside the exercise player. We wrote a custom 2D Canvas / TimelineView player that runs at 60 or 120 fps across iOS, iPadOS, and tvOS with minimal CPU overhead.

The Lit-Sphere Orb: In visual tracking exercises, depth and position must be instantly readable. Rather than applying artificial gaussian blur to simulate distance (which forces the eye to strain to bring a blurry target into focus), we built a directional lit-sphere renderer. The orb maintains a crisp micro-texture with specular glints and an emissive corona. Perceived near/far distance is communicated naturally through physical scale, luminance, and subtle dust parallax.

Anatomical Blink Rendering: For the Complete Blink Reset mode, we developed a specialized eyelid mask renderer. As the prompt signals a blink, stylized upper and lower eyelid curves descend smoothly, hold for two seconds while showing a subtle phosphene glow across the dark field, and open with a soft light-veil bloom.

Audio Architecture & Speech Ducking

Reading instructions while resting your eyes is counterproductive. Easy Eyes uses AVSpeechSynthesizer configured in a dedicated .playback audio session. The engine speaks calmly even if your iPhone hardware silent switch is active, automatically ducks the background practice music by 70% during spoken prompts, and smoothly restores the bed when the cue ends.

Users can pick from eight bundled ambient practice music beds, keep the sound off, or continue listening to their own background audio and podcasts.

Spatial Depth on Apple Vision Pro (TakeEasyVision)

Rather than porting an iPad window into visionOS, we created a dedicated Vision Pro target (TakeEasyVision).

visionOS Immersion Architecture

When you start an open-eye exercise in Apple Vision Pro, the main window dismisses itself completely. The practice runs inside a RealityKit mixed passthrough space, so your physical surroundings remain fully visible.

  • A 3D orb rendered with a custom MaterialX ShaderGraphMaterial (featuring Fresnel rim glow and time-drifting fractal noise) glides through comfortable physical space between 0.6 m and 3.5 m in front of you.
  • A floating translucent glass control panel sits comfortably below your eye level (at 1.05 m elevation), offering gaze-and-pinch pause, music, and exit controls.

We maintain strict medical honesty here: virtual depth cues in a VR headset provide binocular disparity and vergence feedback, but the headset display remains at a fixed optical focal distance. For a genuine 20-20-20 distance break, Easy Eyes explicitly instructs you to take off the headset and look out a window.

Go Backend & Offline-First Reliability

Easy Eyes connects to a lightweight Go + Fiber API sharing our server infrastructure. Every completed session acts as an atomic check-in unit.

Because an eye break often happens on an airplane, in a subway, or during poor Wi-Fi connectivity, the iOS client includes a persistent SessionQueue. Completed check-ins are saved locally to encrypted storage and synchronously replayed on the next foreground event. The server updates streak counters, awards badges, and recomputes leaderboard standings without losing a single session.

Current Verification Status

Where the codebase stands today:

iOS / iPadOS Suite

61/61 unit tests green (exercise geometry contract, motion profiles, session queue codec, reminder scheduling, localization parity).

visionOS RealityKit Suite

Spatial comfort frames, SessionCoordinator de-windowing state machine, and ShaderGraph orb loading verified clean in Vision Pro simulator.

Easy Eyes will launch on the App Store as a simple, honest purchase: $0.99 one-time on iPhone, iPad, and Apple TV, and $3.99 for Easy Eyes Vision on Apple Vision Pro, with zero ads and zero recurring subscription fees.